[오라클 DB관리]23.09.14

망구씨·2023년 9월 14일
0

오라클DB관리

목록 보기
8/19
post-thumbnail


📖 6장. 오라클 네트워크 환경구성

oracle net 서비스


사용자가 리스너를 통해 서버에 접속하려면 TCP/IP를 이용해야한다.

Oracle Net 구성파일에는
1. 내가 접속하려는 서버 ip 주소
2. 내가접속하려는 서버의 인스턴스이름(sid)- 서비스이름
3. 포트번호
4. 프로토컬
✅ 클라이언트에서 데이터 베이스 서버로 접속하기 위해서 oracle net을 사용합니다. oracle network에 관련한 프로그램이 클라이언트에도 설치되어있고 서버에도 설치되어 있습니다.

클라이언트 pc에는 오라클 클라이언트 프로그램이 설치되어 있습니다.
굉장히 가벼운 프로그램인데, 이 프로그램을 설치하면 oracle net이 설치됩니다.

🤔 건물주소가 아이피주소라면 포트번호는 건물안의 복도번호

관련 실습1. 오라클 설치 다운로드 사이트에 가서 오라클 클라이언트 설치 프로그램이 있는지 확인하세요 오라클

✅ 오라클 클라이언트 프로그램 설치하면 db가 설치되는것은 아니고 oracle net이 설치되는 것!

클라이언트 --------------------> 서버
(oracle net)                 (oracle net)

tnsnnames.ora                listener.ora
4가지 정보                      4가지 정보

Oracle Net 리스너

어떤 유저가 들어올지 항상 리슨하고있다 ! 경비원느낌..!
💡 오라클 데이터베이스 서버에 떠있는 리스너는 4가지 정보를 항상 알고 있어야 한다.
1. 호스트 이름 (ip주소)
2. 포트 번호 (port)
3. 프로토콜 (protocol) : 네트워크 통신 언어(TCPIP)
4. 서비스 이름 (service name) : 인스턴스 이름
이 4가지 정보가 listener.ora파일에 있습니다. 리스너가 이 네가지 정보를 listener.ora파일을 보고 알고 있는 것입니다.

sqlnet.ora파일은 무엇인가?
회사 특정 데이터베이스 서버에 아무나 접속하지 못하도록 하고 허용된 ip주소만 접속할 수 있게 해주는 파일!
예) 오라클 엔지니어로 신한은행에 가서 기술지원을 하려고 하는데, 노트북을 들고 갈거다! 그 노트북에 오라클 클라이언트가 설치되어 있어야 한다. 신한은행에 도착하면 dba에게 내 노트북tnsnames.ora에 등록할 4가지 정보를 달라고 얘기행해야한다.

내가 접속하려는 데이터 베이스 서버에 sqlnet.ora 에 내 노트북의 ip주소를 넣어놔달라고 꼭이야기 해야 한다.

관련실습1. 리눅스 서버에서 listner.ora파일과 sqlnet.ora파일이 있는 곳으로 가서 한번 열어보기

[orcl:network]$ cd $ORACLE_HOME
[orcl:dbhome_1]$ cd ..
[orcl:11.2.0]$ ls
dbhome_1  grid
[orcl:11.2.0]$ cd grid
[orcl:grid]$ ls
JRE          crs        demo         has               jdk   network      oui       root.sh    wwg
OPatch       csmig      diagnostics  hs                jlib  nls          owm       scheduler  xdk
assistants   css        eons         install           ldap  oc4j         perl      slax
auth         ctss       evm          install.platform  lib   ons          plsql     sqlplus
bin          cv         gipc         instantclient     log   opmn         precomp   srvm
cdata        dbs        gns          inventory         md    oraInst.loc  racg      sysman
cfgtoollogs  dc_ocm     gnsd         javavm            mdns  oracore      rdbms     usm
clone        deinstall  gpnp         jdbc              mesg  ord          relnotes  utl
[orcl:grid]$ cd network
[orcl:network]$ ls
admin  doc  install  jlib  lib  log  mesg  tools  trace
[orcl:network]$ cd admin
[orcl:admin]$ pwd
/u01/app/oracle/product/11.2.0/grid/network/admin

✅ listener.ora파일을 열어보니, 4가지 정보 중에서 1가지가 안보인다.
host이름, port, protocol, | 서비스이름
listener.ora파일 안에 4가지 정보가 다 있으면 정적 서비스 등록 방법, 서비스 이름이 없고 3가지 정보만 있으면 동적 서비스 등록 방법이라고 합니다.
❓ 동적 서비스 등록이란! pmon이 서비스 이름을 parameter file에서 읽어서 리스너에게 등록해주는 것을 말합니다.

관련실습2. sqlnet.ora파일도 열어보시오

✅ 클라이언트에서 데이터베이스 서버로 접속하는 방법을 2가지 허용하겠다.
1. tnsnames.ora 를 이용해서 접속하는 방법
2. easy connect 방식(tnsnames.ora없이 그냥 4가지 정보를 바로 기술해서 접속)

관련실습3. sqlnet.ora에 등록된 아이피주소만 서버에 접속을 허용하겠다고 설정하시오!
tcp.validnode_checking=yes
tcp.invited_nodes=(192.168.56.1,192.168.56.2) -> 얘는 접속 가능
tcp.exclude_nodes=(192.168.0.6) -> 얘는 접속 불가능!
TCP.NODELAY=yes

네트워크 연결 설정

💡 클라이언트 쪽에 있는 응용 프로그램이 oracle net을 통해서 데이터 베이스 서버에 접속하려면 리스너가 있는 주소, 포트, 프로토콜, 서비스 이름을 알아야 연결할 수 있습니다.

관련실습1. tnsnames.ora를 열어보세요!
4가지 정보가 다 있다!

[orcl:~]$ cd $ORACLE_HOME/network/admin
[orcl:admin]$ ls
samples  shrept.lst  tnsnames.ora
[orcl:admin]$ vi tnsnames.ora

✅ 우리는 하나밖에 없지만 회사가면 이거 짱많다 ! 접속 방법은, sqlplus scott/tiger@orcl2 이렇게 맞춰서 같은 이름으로

✔️ 이것은 tnsnames 방식으로 접속하는 방법이다. sqlplus scott/tiger@orcl2 이렇게 하면 리스너를 통해 접속하는 것! -> 자기자리에서 노트북이나 컴퓨터로 응용프로그램 통해 들어가는 것은 이렇게 들어간다.
✔️ 리스너 통하지 않고 바로 접속하는 방법
[orcl:admin] $ sqlplus scott/tiger -> 이거는 사실 서버실에 들어가야지만 이렇게 접속할 수 있다.

리스너 죽이고 리스너 통해 접속해보기

[orcl:admin]$ lsnrctl stop
[orcl:admin]$ sqlplus scott/tiger@orcl
Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-12541: TNS:no listener -- 리스너 없다고 에러난다!

[orcl:admin]$ lsnrctl start --리스너 다시 올리기!


얘는 된다 !

유저 세션

리스너는 연결할 때, 연결 요청을 허락한 이후에는 서버 프로세서가 유저프로세서 건네준 SQL을 처리합니다.

Oracle 네트워크 구성 및 관리 도구

✔️ Enterprise Manager Net Services Administration 페이지
✔️ Oracle Net Manager
✔️ Oracle Net Configuration Assistant
✔️ 명령행

실습 em에서 리스너 내리기

저기 들어가서 중지 누른다. -> 그냥 명령어

Listener Control 유틸리티


관련실습1. 리스너 모드로 접속해서 help 명령어 수행하기

. oraenv
ORACLE_SID = [orcl] ? +ASM
위의 코드는 아래와 같다!
$ export ORACLE_HOME=/u01/app/oracle/product/11.2.0/grid --홈디렉토리 정하기
$ export $ORACLE_SID=+ASM

✅ 서버에 오라클 인스턴스가 2개가 떠있다. DB인스턴스와 ASM인스턴스 이렇게 두개가 있는데 두개중에 어디로 접속할지를 결정하는 것이다. orcl로 할지 아니면 +ASM으로 할지를 선택하고 작업을 해야한다.
그리고 다시 데이터 베이스 인스턴스로 돌아와서 작업하고 싶으면

. oraenv
ORACLE_SID = [+ASM] ? +orcl

or
$ export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
$ export $ORACLE_SID=orcl
[+ASM] $lsnrctl status
[+ASM] $lsnrctl --리스너 모드로 들어가는 명령어

점심시간 퀴즈

A: idle instance는 디비 내려간 상태.
B: 마운트 상태여야 나오는 것들이 있다. All이 아니다!

SRVCTL을 사용하여 리스너 시작 및 정지

💡 srvctl은 RAC나 Exadata 서버를 관리할 때 유용한 툴 !
single instance일때도 사용 가능 합니다.

실습1. srvctl을 이용해서 리스너 내리기

. oraenv
ORACLE_SID = [+ASM] ? +orcl
[+ASM:~]$ lsnrctl status


[+ASM:~]$ srvctl -h -- help 명령어
[+ASM:~]$ srvctl stop listener

실습2. 다시 리스너 올리기

[+ASM:~]$ srvctl start listener

실습3.


Net Services Administration 페이지
Net Services Administration 페이지에서 여러 파일 시스템의 Oracle 홈에 대해 Oracle Net 서비스를
구성할 수 있습니다. 이 페이지는 리스너에 대한 일반적인 관리 기능도 제공합니다. Net Services
Administration을 사용하여 다음 항목을 구성 및 관리할 수 있습니다.
• 리스너: 리스너를 추가, 제거, 시작 및 정지하는 것은 물론 추적 및 로깅 특성을 변경합니다.
또한 리스너의 제어 상태 보고서를 볼 수 있습니다.
• 디렉토리 이름 지정: 간단한 이름과 연결 식별자를 정의하고 이들을 Connect Descriptor
로 매핑하여 서비스의 네트워크 위치와 ID를 식별합니다. 데이터베이스 서비스,
Net 서비스 및 Net 서비스 alias를 중앙 디렉토리 서비스에 저장합니다.
• 로컬 이름 지정: Net 서비스 이름을 tnsnames.ora파일에 저장합니다.
• 프로파일: sqlnet.ora 파라미터를 구성합니다.
• 파일 위치: Net 서비스의 구성 파일 위치를 변경합니다


리스너 생성
Oracle Net 리스너를 생성하려면 리스너 속성 페이지의 Related Links 영역에서 Net Services
Administration을 누릅니다. 그런 후 다음 단계를 수행하십시오.
1. Administer drop-down list에서 Listeners를 선택하고 Go를 누릅니다.
2. 호스트에 대한 선호 인증서를 입력하지 않은 경우, Host Login 페이지가 나타납니다.
username 및 암호를 입력하고 Login을 누릅니다.
3. Create를 누릅니다.
4. 리스너 이름을 입력합니다. 이름은 이 서버에서 고유해야 합니다. Add를 눌러 리스너
주소를 추가합니다. 각 리스너에는 적어도 하나의 리스너 주소가 있어야 합니다


리스너 주소 추가
리스너 생성 워크플로우에 따라 리스너 주소 생성을 계속합니다.
5. 네트워크 프로토콜을 선택합니다. TCP/IP가 가장 많이 사용되고 있으며 기본값입니다.
일반적으로 데이터베이스 서버에 있는 로컬 응용 프로그램에 연결하는 데 사용되는
IPC(Internal Process Communication) 또는 외부 코드 라이브러리(EXTPROC) 및 SSL을
사용하는 TCP/IP를 선택할 수 있습니다.
주: EXTPROC 프로토콜은 Other Services 탭을 사용하여 구성합니다.
6. 리스너가 모니터할 포트를 입력합니다. Oracle Net의 기본 포트는 1521입니다.
1521 이외의 다른 포트를 사용하는 경우 리스너 또는 Instance에 대한 추가
구성이 필요합니다.
7. 리스너가 실행될 서버의 이름 또는 IP 주소를 입력합니다.
8. 리스너에 대한 다른 모든 구성 단계는 선택 사항입니다. OK를 눌러 주소를 저장합니다.
수신 주소와 이름만 구성하면 됩니다.
9. Create Listener 페이지에서, 방금 생성한 주소에 대한 정보를 검토하고 OK를 눌러 변경
사항을 저장합니다.
10. 새 리스너를 시작하려면 Actions drop-down list에서 Start/Stop을 선택한 다음 Go를 누릅니다



[orcl:~]$ cd $ORACLE_HOME
[orcl:dbhome_1]$ cd ..
[orcl:11.2.0]$ ls
dbhome_1  grid
[orcl:11.2.0]$ cd grid
[orcl:grid]$ ls
JRE          ctss         gnsd              jlib     opmn         relnotes
OPatch       cv           gpnp              ldap     oraInst.loc  root.sh
assistants   dbs          has               lib      oracore      scheduler
auth         dc_ocm       hs                log      ord          slax
bin          deinstall    install           md       oui          sqlplus
cdata        demo         install.platform  mdns     owm          srvm
cfgtoollogs  diagnostics  instantclient     mesg     perl         sysman
clone        eons         inventory         network  plsql        usm
crs          evm          javavm            nls      precomp      utl
csmig        gipc         jdbc              oc4j     racg         wwg
css          gns          jdk               ons      rdbms        xdk
[orcl:grid]$ cd network
[orcl:network]$ cd admin
[orcl:admin]$ pwd
/u01/app/oracle/product/11.2.0/grid/network/admin
[orcl:admin]$ alias net='/u01/app/oracle/product/11.2.0/grid/network/admin'
[orcl:admin]$ net
[orcl:~]$ vi .bash_profile

alias net2='cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin'
alias net='cd /u01/app/oracle/product/11.2.0/grid/network/admin'

이름 지정 방식

💡 오라클 데이터 베이스에 접속하는 4가ㅣ 방법

1. 간단한 연결(easy connect)

$ sqlplus scott/tiger@edydr1p0.us.oracle.com:1521/orcl.us.oracle.com
        유저이름/패스워드@호스트명(ip주소):포트번호/서비스이름
       
[orcl:~]$ lsnrctl status 해서 확인하기        
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=edydr1p0.us.oracle.com)(PORT=1521)))
  .
  .
Service "+ASM" has 1 instance(s).
Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "orcl.us.oracle.com" has 1 instance(s).

엔지니어로 일할 때 sql접속이 안된다고 하면 위 방법으로 리스너 상태를 확인하기

2. tnsnames.ora 에 tns별칭으로 오라클에 접속하는 방법

sqlplus scott/tiger@orcl

💡 dba를 위한 tip

tnsnames.ora파일이 있는 곳으로 빨리 갈 수 있도록 alias를 만들어주세요.

$ alias tns='cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin'
[orcl:~]$ source .bash_profile

3. 디렉토리 이름 지정
: 디렉토리 서버가 있는데 이 서버에 접속하고자 하는 모든 서버들의 4가지 정보를 등록해놓고 이 디렉토리 서버를 통해서 접속하고자 하는 서버에 접속정보를 얻어서 접속하는 방식

  • 디렉토리 서버가 없다면 서버쪽의 아이피 하나 바뀔때마다 클라이언트쪽 모든 컴터를 다 수정해주어야 한다.

4. 외부 이름 지정
: 디렉토리 이름 지정하고 같은 방식인데 오라클 제품을 쓰느냐, 아니면 다른 third party 제품을 쓰느냐의 차이이다.

easy connect와 이름지정 connect의 차이점

easy connect                 vs        이름 지정 connect
TCP/IP만 지원                           모든 프로토컬 지원
네트워크 고급욥션 3가지 지원x         네트워크 고급 옵션 3가지 지원
1. connect time filaover
2 소스 경로 지정
3. 로드 밸런싱

관련 실습1. 먼저, tnsnames.ora 파일을 열어서 새로운 tns 정보를 등록하시오 !

[orcl:admin]$ tns
[orcl:admin]$ pwd
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin
[orcl:admin]$ ls
listener.ora  samples  shrept.lst  tnsnames.ora
[orcl:admin]$ vi tnsnames.ora

[orcl:admin]$ sqlplus scott/tiger@orcl7

관련 실습2. em으로 tnsnames.ora파일에 새로운 tns정보를 등록하시오
홈 > 네트 서비스 관리 > 로컬 이름 지정 > 생성 >tnsnames.ora 열어서 만든거 있는지 확인



✅ 잘 연결된다.

관련 실습3. 리스너가 이 서버에 몇개가 떠있는지 확인하기

[orcl:admin]$ ps -ef | grep LISTENER* | grep -v grep
oracle   22328     1  0 14:03 ?        00:00:00 /u01/app/oracle/product/11.2.0/grid/bin/tnslsnr LISTENER -inherit
oracle   23456     1  0 14:24 ?        00:00:00 /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr LISTENER2 -inherit
  • 아까 리스너 1522로 하나 만들어놔서 두개 열려있음

    oracle net 연결 테스트

    💡 오라클 database에 응용프로그램(sql developer...)으로 접속이 안된다고 요청이 오면 다음과 같은 순서로 조치를 하면 됩니다.

1. database 서버에 리스너가 정상인지 확인

[orcl:admin]$ ps -ef | grep LISTENER* | grep -v grep
[orcl:admin]$ lsnrctl status

2. 클라이언트 쪽에 tnsnames.ora를 잘 작성 했는지 확인

3. tnsnames.ora파일의 tns별칭으로 tnsping을 수행한다.

[orcl:admin]$ tnsping orcl9

4. 3가지 정보를 가지고 easy connect을 시도한다.

[orcl:admin]$ tnsping edydr1p0.us.oracle.com:1521/orcl.us.oracle.com
                             호스트명, 포트명, 서비스 


✅ 호스트명, 포트명, 서비스 쓴다. 위 과정 다 수행했는데도 안된다? 서버실 가야한다. 랜선 빠져있을것이다.

실습1. 리스너를 통해 접속을 한 상태에서 리스너를 내리면 접속이 끊길까? (안끊긴다.)

1. 리스너를 통해 접속
[orcl:admin]$ sqlplus scott/tiger@orcl

2. 리스너 내리기
[orcl:~]$ lsnrctl stop

3. 접속 끊겼는지 확인
SQL> select * from emp; -> 안끊긴다.

Dedicated server 프로세스



✅ 디스패처와 서버프로세스 사이에 응답Q, 요청Q가 있는데 유저가 sql요청하면 요청Q에 디스패처가 올려놓고 서버프로세스가 결과를 응답Q에 두면 이 결과를 디스패처가 유저에게 전달한다.

💡 Dedicated server 프로세서 구조는
하나의 유저프로세서당 ----------> 하나의 서버 프로세서 구조이고
Shared server 프로세서 구조는
여러개의 유저프로세서 -------- 디스패처들 ---------> 서버 프로세서들이 있다.

유저수가 많은 쿠팡이나 인터파크 같은 사이트에서는 shared server 구조를 구성하고 있습니다.
그런데 Shared server 구조로 구성하게 되면 pga 영역에 있는 상당수의 영역들이 전부 SGA 영역으로 들어갑니다.

Shared Server: 연결 풀링

profile
Slow and steady wins the race.

0개의 댓글