Oracle/Admin

ORACLE NETWORK 정리 ; 리스너(listener.ora)

에몽이ㅋ 2012. 4. 2. 21:40
대략적인 oracle network(http://gyh214.tistory.com/112 )



기본적으로 $ORACLE_HOME/network/admin/ 안에 파일이 생성되고, 오라클엔진은 그 안 파일을 참고하여 네트워크설정을 합니다.

리스너, listener.ora
외부에서 들어오는 연결을 받아서 listener.ora안에 설정되어있는 Database들에 연결해주는 기능

파일안에 들어가는 항목들의 설명
참조사이트 : http://docs.oracle.com/cd/B28359_01/network.111/b28317/listener.htm 

1. Protocol Address Section
 : protocol addresses들을 정의하고, 접속요청을 허용하는 섹션입니다.

*아래와 같은 파라미터들이 사용됩니다. (이외에도 IP, RECV_BUF_SIZE, SEND_BUF_SIZE 가 사용됩니다.) 
ADDRESS
DESCRIPTION
QUEUESIZE

1.1 ADDRESS : single listener protocol address를 정의할때 사용됩니다. DESCRIPTION 파라미터 안에 선언됩니다.
예제 : 
istener_name=
 (DESCRIPTION=
  (ADDRESS=(PROTOCOL=tcp)(HOST=hr-server)(PORT=1521))
  (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1522)))

1.2 DESCRIPTION : listener protocol address들을 묶어주는 역할을 합니다.
(여러개의 주소를 사용하고, 그 여러개의 주소를 하나의 리스너만을 사용해서 관리하고 싶을 때)

listener_name=
 (DESCRIPTION=
  (ADDRESS=(PROTOCOL=tcp)(HOST=hr-server)(PORT=1521))
  (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1522)))

1.3 QUEUESIZE : 접속요청을 허용할 수 있는 최대값입니다.
Default 
Solaris Operating System: 5
Windows NT 4.0 Workstation: 5
Windows NT 4.0 Server: 50

예시
listener_name=
 (DESCRIPTION=
  (ADDRESS=(PROTOCOL=tcp)(HOST=hr-server)(PORT=1521)(QUEUESIZE=20)))


2. SID_LIST Section
 : using for database service, *external procedure, *Heterogeneous Services(HS), some management tools(OEM 포함)
* external procedure : PL/SQL코드에 의해 짜여진 function이나 procedure, C로 external procedure에 의해 지원이 됩니다.
* Heterogeneous Services  : oracle에서 non-oracle로 접속하기 위한 서비스들, 
               oracle SQL을 이용해서 non-oracle data들을 oracle내에 있는 자료처럼 사용할 수 있게 합니다.
               oracle procedure call을 이용해서 non-oracle 시스템, 서비스, APIs에 접속할 수 있게합니다.
예제 :
SID_LIST_listener_name=
  (SID_LIST= 
   (SID_DESC=
    (GLOBAL_DBNAME=global_database_name)
    (SID_NAME=sid)
    (ORACLE_HOME=oracle_home))
   (SID_DESC=...))

SID_LIST 섹션안에는 아래와 같은 파라미터들이 사용됩니다.
ENVS
GLOBAL_DBNAME
ORACLE_HOME
PROGRAM
SID_DESC
SID_LIST
SID_NAME
SDU

2.1 ENVS : PROGRAM parameter안에 명시된 program을 실행시키기 위한 환경변수를 지정해주는 파라미터
SID_DESC파라미터 안에 포함됩니다.
* windows에서는 지원이 되지 않는 파라미터입니다.
* 적어주지 않는다면, listener의 환경설정을 기본으로 가집니다.

사용법
(ENVS="variable1=value1, variable=value2")

예제
SID_LIST_listener_name=
 (SID_LIST=
  (SID_DESC=
   (SID_NAME=plsextproc)
   (ORACLE_HOME=/oracle11g)
   (PROGRAM=extproc)
   (ENVS="LD_LIBRARY_PATH=/oracle/11g/lib:/oracle/11g/ctx/lib"))
 
 (SID_DESC=
  (SID_NAME=test)
  (PROGRAM=/tmp/myexec)
  (ENVS="LD_LIBRARY_PATH=/private/xpm/lib:/private/mylibs,MYPATH=/usr/ucb:/usr/local/packages,
APL_ENV_FILE=/apl/conf/env.txt")))
 
2.2 GLOBAL_DBNAME : database service를 정의하기 위한 파라미터
클라이언트쪽에서 서버로의 접속요청이 진행되는 동안, 리스너는 GLOBAL_DBNAME와
클라이언트쪽 local naming parameter(tnsnames.ora)안의 SERVICE_NAME을 같은지 살펴봅니다.
만약에 클라이언트의 tnsnames.ora의 connect descriptor가 SID 파라미터로 사용되었으면, GLOBAL_DBNAME은 사용되지 않습니다.
이 파라미터는 oracle7, oracle8.0의 네트워크구성을 위해서 존재하지만, Oracle9i의 몇몇 구성이나, 관리툴에 의해서도 필요합니다.
해당 파라미터의 값은 일반적으로 DB_NAME.DB_DOMAIN 형식입니다.
SID_DESC파라미터 안에 적어줘야합니다.

예제
SID_LIST_listener_name=
  (SID_LIST= 
   (SID_DESC=
    (GLOBAL_DBNAME=sales.us.example.com)
    (SID_NAME=sales)
    (ORACLE_HOME=/usr/oracle)))

2.3 PROGRAM : 실행할 서비스프로그램이름을 명시합니다., SID_DESC안에 명시됩니다.

예제
SID_LIST_listener_name=
  (SID_LIST= 
   (SID_DESC=
     (SID_NAME=sales)
     (ORACLE_HOME=/usr/oracle)
     (PROGRAM=extproc)))
* extproc : External Procedure
** extproc에 대한 여러가지 정보들
http://gyh214.tistory.com/206  
http://www.datadisk.co.uk/html_docs/oracle/external_procedures.htm 
http://www.orafaq.com/forum/t/91778/2/ 

2.4 SID_DESC : 특정 database instance나 non-database service들의 service정보들을 명시하기 위한 파라미터
       SID_LIST 파라미터안에 명시됩니다.

예제:
SID_LIST_listener_name=  
(SID_LIST= 
   (SID_DESC=...)
   (SID_DESC=...)
   
*SID_DESC 안에는 아래와 같은 파라미터들이 사용될 수 있습니다.
ENVS
GLOBAL_DBNAME
ORACLE_HOME
PROGRAM
SID_NAME
SDU

2.5 SID_LIST : SID description들을 정의하기 위한 파라미터

예제 :
SID_LIST_listener_name=
  (SID_LIST= 
   (SID_DESC=...)
   (SID_DESC=...))

2.6 SID_NAME : instance의 SID를 명시하기 위해서 사용하는 파라미터
       파라미터파일에서 INSTANCE_NAME 파라미터의 내용과 같아야 합니다.

예제 :
SID_LIST_listener_name=
  (SID_LIST= 
   (SID_DESC=
    (GLOBAL_DBNAME=sales.us.example.com)
    (SID_NAME=sales)
    (ORACLE_HOME=/usr/oracle)))

2.7 이 외에도 SDU파라미터가 사용됩니다.(맨위 참조사이트 참조)


리스너를 제어하는 방법
lsnrctl을 사용
합니다. 

$ lsnrctl OPERATIONS listener_name

OPERATION의 종류
start               stop                status
services            version             reload
save_config         trace               spawn
change_password     quit                exit
set*                show*

* listener_name을 적어주지 않으면, default값인 LISTENER을 제어합니다.
** 여러개의 리스너가 존재한다면 마지막에 listener_name을 반드시 적어줍시다.