Database/ORACLE

3일차 - 6장. Oracle 네트워크 환경 구성

99iberty 2013. 12. 4. 10:05

 

Oracle Net 서비스 

 네트워크로의 접근은 모두 리스너가 받아들인다.

 

클라, 오라클 DB 쪽 모두 다 구성파일 필요하다면 넣어야 한다.

 

listener.ora : 해당 리스너에 대한 구성정보. 리스너가 지원할 DB에 대한 정보를 담아 놓음.

sqlnet.ora : 오라클의 리스너가 작동할 환경의 규칙에 대해서 설명

 

grid 없으면 홈/네트워크/어드민 아래에 있는데 grid 있으면 그리드 홈 밑에 있음,,

 

리스너에 도달하기 위해선 클라이언트는 4개의 정보 알고 있어야 함.

1. 리스너가 실행 중인 호스트

2. 리스너가 모니터 중인 포트

3. 리스너가 사용중인 프로토콜

4. 리스너가 처리 중인 서비스 이름.

 

리스너는 유저의 요청이 맞는지 확인하고 DB 정보 맞다면 그 DB에 연결할 서버프로세스 구동하고

그걸 유저에게 알려주면 그 때서야 세션이 맺어짐.

세션 맺게 되면 리스너는 떨어짐. 더 이상 유저의 작업에 관여하지 않음.

다시 다른 유저가 네트워크에 접근하는지 귀만 기울임.

 

리스너컨트롤 ; $ lsnrctl

grid 를 설치했다면 그 리스너의 구성이 다 그리드 홈디렉토리에 있기 때문에

. oraenv 로 환경셋팅 맞추고 그 때서야 lsnrctl 사용 가능.

 

 

srvctl 로도 리스너, DB 핸들링 가능.

디폴트 리스너 말고 백업 리스너 구동 가능.

 

리스너에 등록할 서비스..

정적서비스 / 동적서비스 차이

1. 정적서비스

listner.ora 에 서비스를 적어서 인식하게 하는 방법.

2. 동적서비스

각각의 DB의 백그라운드프로세스가 알아서 리스너에게 등록하는 방법.

pmon 프로세스가 담당.

 

[+ASM:admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-DEC-2013 11:01:08

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                03-DEC-2013 09:44:49
Uptime                    1 days 1 hr. 16 min. 19 sec
Trace Level               off
Security                  on: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/edydr1p0/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=edydr1p0.us.oracle.com)(PORT=1521)))
Services Summary... (리스너가 지원하는 DB의 인스턴스에 대한 정보들)
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "orcl" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully

리스너가 인식하고 있다.

# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/grid/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON              # line added by Agent
~                                                                              
~                                

listner.ora에 없어도 lsnrctl status 하면 인식한다.. 그래서 dynamic 서비스다.

 

 

 

[+ASM:admin]$ lsnrctl stop

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 04-DEC-2013 11:02:49

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
The command completed successfully

 

DB가 다운된 상태에서 다시 lsnrctl start 해도 the listner supports no services.

1분 정도 지나면 ASM에 대한 건 올라오지만 나머지 디비 인스턴스는 안 올라옴.

동적인 방법으로 하면 등록이 안 됨 . (DB ㄷㅏ운된 상태)

DB올릴 때 NOMOUNT 상태 지날 때(이때 백그라운드 프로세스 구동되기 때문) lsnrctl status 하면 딱 보일 거다.

 

 

pmon 은 자기 자신의 DB에 대한 정보를 1521로 던진다.

상대방이 받는지 안 받는지 신경 안 씀.

리스너 기본 폴트가 1521인데, 그걸 안 쓰면 (혹은 백업 리스너) dynamic 서비스 를 못 씀.

즉 1521안 쓰는 기본 리스너랑 백업리스너는 static한 서비스 등록밖에 못 함.

 

alert 로그 

[orcl:trace]$ pwd
/u01/app/oracle/diag/rdbms/orcl/orcl/trace

 

 

 

간단한 연결

1. 장점 : 구성파일이 필요 없음.

2. 단점 : 오라클이 지원하는 여러 프로토콜 중에서 TCP/IP 이외에 지원 못 받음

 

-> 해결방법

로컬 이름 방식

1. 구성파일 만들어 놓고 지칭할 수 있는 이름으로 지정.

-> 구성파일이 tnsname.ora

-> tnsnames.ora 는 오라클 인스턴스의 홈/network/admin 에 있다.

-> 리스너 파일은 ASM의 홈 아래에 있고..

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

$ sqlplus hr/hr@orcl

이게 네임 지정 방식. orcl 이름의 인스턴스로 가겠다.

 

 

디렉토리 이름 지정

1. ldap 이용해서 .. 비용이 추가 됨.

 

 

고급 연결옵션 -> 싱글DB에서는 의미 없음.

 

 

 

Oracle Net 연결 테스트

클라이언트와 ORacle NET리스너 까지의 연결 확인.

리스너가 제공하는 이비가 유효한 건지 체크하는 등의 작업은 확인 안함.

tnsping 은 인스턴스를 +ASM 으로 안 바꾸고 걍 orcl로 해도 됨.

[orcl:admin]$ tnsping orcl

TNS Ping Utility for Linux: Version 11.2.0.1.0 - Production on 04-DEC-2013 11:47:33

Copyright (c) 1997, 2009, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = edydr1p0.us.oracle.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))
OK (10 msec)
-> dedicated 방식임을 알 수 있음.

 

 

* 메모리

 

User Global Area : PGA 메모리 컴포넌트에 잡히는 area.

UGA가 SGA로 넘어갔다. 이 의미는?

Shared Server 방식으로 접속했을 때 메모리 구조 .

 

shared방식에서는..

User 여러명이서 PGA 하나를 공유. 같이 쓰는 공통의 부분을 UGA로 묶어서,

원래는 PGA에 잡혔던 부분이 SGA로 넘길 거당.

 

shared pool을 늘려줘야 한다 그래서, pga로 잡혔던 부분을 sga로 넘기므로.

 

메모리 할당 및 해제로 인해 발생하는 chunk가 내가 사용하는 메모리 사이즈에 따라 달라짐.

uga가 침범하게 되면 메모리 단편화가 발생할 소지가 생김.

그 단편화가 sort땜에 특히나 생김........

그럼 전체적인 성능도 떨어짐..

만약에 shared server 방식을 쓰게 된다면, 오라클의 large pool (옵셔널한 부분) 을 잡아서

UGA를 large pool 로 넘겨야 함. SGA말고.

 

 

large pool은 기본적으로는 RMAN 쓸 때 쓰게 되는데..

Shared Server 방식 쓰게 되면 역시나 필요.

 

 

connection pooling

대부분 미들웨어에서 지원해줌.

오라클도 지원해줌.

 

Shared Server에서..

255까지 연결 가능하다고 했을 때 256번째 연결은?

-> idle 클라이언트를 끊고 연결됨. 혹은 대기하다가 idle 생기면 그 때 끊고 연결.

 

 

DBlink

본사 <-> 지사

내가 사용할 DB링크의 이름, DB리스너 정보, 사용자 정보 적어서 만듦.