블로그는 나의 힘!
[ Programing ]/Database2010. 4. 2. 03:24
Practice 5 : Usage and Configuration of the Oracle Shared Server

1. Server에 접속하여 Oracle Shared Server를 구성합니다. (아래를 참조)
     - 초기할당 Dispatcher 개수 : TCP에 대하여 1개
     - 초기할당 Shared Server Process 개수 : 1개
     - Dispatcher의 최대개수 : 2개
     - Shared Server Process의 최대개수 : 6개

# sqlplus '/as sysdba'
SQL> shutdown immediate
SQL> exit
# vi $ORACLE_HOME/dbs/initPROD.ora
......
local_listener=TEST -> 동일한 이름의 Net Service 이름을 tnsnames.ora에 구성
dispatchers="(PROTOCOL=TCP)(DISPATCHERS=1)"
shared_servers=1
max_dispatchers=2
max_shared_servers=6
......
# vi $TNS_AMDIN/tnsnames.ora

======================================== tnsnames.ora ========================================
# 리스터 이름과 동일한 서비스 구성
TEST = 
             (DISCRIPTION =
                  (ADDRESS_LIST =
                       (ADDRESS = (PROTOCOL=TCP)(HOST=X.X.X.X)(POST=XXXX))
                  )
                  (CONNECT_DATA =
                       (SERVICE_NAME=PROD.com)
                  )
             )
===============================================================================================

# lsnrctl
LSNRCTL> stop TEST
LSNRCTL> start TEST
LSNRCTL> exit
# sqlplus '/as sysdba'
SQL> startup
SQL> exit

2. Listener Control Utility에서 Dispatcher를 확인합니다.
# lsnrctl
LSNRCTL> services TEST
LSNRCTL> exit

3. 새로운 터미널을 시작하여 로컬접속을 시도하고 다음을 조회해 봅니다.
# sqlplus /nolog
SQL> conn system/manager
SQL> select circuit, dispatcher, server from v$circuit;
         ( no rows selected -> Shared Server 방식의 접속이 아님! )

4. Network을 통한 접속을 시도합니다.
SQL> conn system/manager@XXX
SQL> select circuit, dispatcher, server from v$circuit;

 CIRCUIT      DISPATCH      SERVER
----------    ----------     ----------
80AE0E80      80C91270       80C90F2C


-> Shared Server 방식의 접속에선 행이 query 됨!

5. Shared Server와 Dispatcher의 상태를 모니터링 합니다.
SQL> select name, status, circuit from v$shared_server;
SQL> select name, status, from v$dispatcher;

6. Dispatcher의 개수를 동적으로 늘리고 그 정보를 모니터링 합니다.
SQL> alter system set dispatchers='(PROTOCOL=TCP)(DISPATCHERS=2)';
SQL> select name, status from v$dispatcher;
SQL> exit
# lsnrctl services TEST

< Optional Practice >
  Oracle 8i 이후 Version에서 Instance 자동 등록 기능을 지원 합니다.
이 기능을 사용하면 listener.ora file에 SID_LIST_listener_name Section의 구성이 필요치 않습니다.
다음과 같이 테스트 합니다.

1. initPROD.ora에서 다음의 Parameter가 설정되어 있음을 확인합니다.
     - INSTANCE_NAME
     - SERVICE_NAMES

2. listener.ora file을 다음과 같이 재구성 합니다. (SID_LIST_listener_name Section제거)
# cd $TNS_ADMIN
# vi listener.ora

======================================= listener. ora =========================================
TEST =
           (DESCRIPTION_LIST =
                (DESCRIPTION =
                     (ADDRESS_LIST =
                          (ADDRESS = (PROTOCOL = TCP)(HOST = X.X.X.X)(PORT = XXXX))
                     )
                )
            )

LOG_DIRECTORY_TEST=/opt/oracle/product/9.2.0/network/log
LOG_FILE_TEST=TEST.log
=============================================================================================

3. 리스너와 인스턴스를 재시작합니다.
# lsnrctl stop TEST
# lsnrctl start TEST
# sqlplus "/as sysdba"
SQL> startup force

4. 리스너에 인스턴스가 자동으로 등록되었는지 확인합니다.
# lsnrctl status TEST
......

STATUS of the LISTENER
------------------------
Alias                                TEST
Version                            TNSLSNR for Solaris: Version 9.0.1.0.0 - Production
Start Date                          12-JAN-2003 09:30:52
Uptime                              0 days 0 hr. 1 min. 18 sec
Trace Level                       off
Security                            OFF
SNMP                              OFF
Listener Parameter File       /opt/oracle/product/9.2.0/network/admin/listener.ora
Listener Log File                /opt/oracle/product/9.2.0/network/log/TEST.log
Listening Endpoints Summary...
     (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=X.X.X.X)(PORT=xxXX)))
Services Summary...
Service "PROD.com" har 1 instance(s).
     Instance "PROD", status READY, has 2 handler(s) for this service...

The command completed successfully


5. 클라이언트가 접속을 테스트 합니다.
# sqlplus /nolog
SQL> conn system/manager@xxx
Posted by Mister_Q