● 개요
- 추가적인 리스너를 생성할 수 있다.
- 오라클 넷 서비스를 생성할 수 있다.
- connect-time failover를 구성할 수 있다.
● 오라클 넷 서비스(Oracle Net Services)
◎ 정의
: 네트워크 connection을 가능하게 하는 소프트웨어
◎ 전체 구조도
◎ 리스너에 추가하는 법
○ telnet으로 추가
- 리스너가 동작중인지 확인
OS] ps -ef|grep lsnr
- linstener.ora가 있는 디렉토리로 이동 후 확인
OS] cd $ORACLE_HOME/network/admin
OS] ls
- listener.ora의 내용을 확인
OS] vi listener.ora
- 내용을 확인해보면 다음과 같다. 빨간색 부분을 추가한다.(띄어쓰기 안맞을 경우 에러 발생할 가능성이 있다.)
L1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora10gr2.gsedu.com)(PORT = 1521))
)
)
SID_LIST_L1 =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(GLOBAL_DBNAME = orcl)
)
(SID_DESC =
(SID_NAME = ikdb)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(GLOBAL_DBNAME = ikdb)
)
)
L2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora10gr2.gsedu.com)(PORT = 1621))
)
)
SID_LIST_L2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = jgh_db)
(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
(GLOBAL_DBNAME = jgh_db)
)
)
- 리스너를 start시킨다.
기본은 1521 포트의 리스너가 start되지만 리스너를 명시해서 start, stop을 할 수 있다.
OS] lsnrctl start
OS] lsnrctl stop
OS] lsnrctl start L1
OS] lsnrctl start L2
OS] lsnrctl stop L1
OS] lsnrctl stop L2
- lsnrctl 명령으로도 가능
OS] lsnrctl
LSNRCTL> start l1
LSNRCTL> start l2
LSNRCTL> service l1
LSNRCTL> service l2
LSNRCTL> status l1
LSNRCTL> status l2
LSNRCTL> set current l2 -- 디폴트 리스너를 바꿀 수 있다.
○ Oracle Net Manager로 추가
OS] netmgr
○ Oracle Configuration Assistant로 추가
OS] netca
○ EM으로 추가
※ Server에 기본 리스너외에 추가 리스너 등록
SQL> alter system set local_listener = a -- 같은 machine내에 a리스트를 보고 등록
SQL> alter system set remote_listener = a -- 다른 machine의 리스너 등록
<tnsnames.ora>
a =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1621))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = orcl)
)
)
※ RAC환경에서의 설정
- SID는 중복 불가, SERVICE_NAME은 중복 가능
SERVER1 (192.168.0.10)
OS] vi initi1.ora
instance_name = i1
service_names = haha, hoho
remote_listener = .....
SERVER2 (192.168.0.11)
OS] vi initi2.ora
instance_name = i2
service_names = haha, hoho
remote_listener = .....
SERVER3 (192.168.0.12)
OS] vi initi3.ora
instance_name = i3
service_names = haha, hoho
remote_listener = .....
CLIENT
<tnsnames.ora>
sqlplus
chris/chris@a -- a : connect identifier(=network alias, service alias)
a =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = haha)
)
)
-- connect discriptor
- haha라는 서비스명으로 접속하므로 i1이 shutdown되어 있더라도 i2로 접속이 가능
SID=i1으로 할 경우 문제가 생길 소지가 있음. SERVICE_NAME으로 하는 것이 좋음
※ instance name이 같은 서버가 있어도 도메인으로 식별 가능
instance1
instance_name = HRDB
db_domain = asia.com
instance2
instance_name = HRDB
db_domain = africa.com
※ Dedicated Server vs. Shared Server
Dedicated Server
- 하나의 유저에 하나의 서버 프로세스가 담당.
- sserver process당 PGA가 생긴다.
dedicate server로 접속시 client의 tnsnames.ora설정 파일
<tnsnames.ora>
shared =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.122.1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.122.1)(PORT = 1621))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
Shared Server
- 일정 갯수의 서버 프로세스를 유저서버프로세스가 공유하는 형식
-
UGA(user session data, cursor state, sort data)가 SGA내에 생김(서버 프로세스가 공유하기 위해서)
- 아래의 파일들을 설정해주어야 함
shared server 접속시 client의 tnsnames.ora 설정 파일
<tnsnames.ora>
shared =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.122.1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.122.1)(PORT = 1621))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = orcl)
)
)
server의 파라미터 파일 설정
SQL> alter system set shared_servers = 2; -- 서버프로세스를 2개
SQL> alter system set dispatchers = '(protocol=tsp)(dispatchers=3)'; -- 디스패쳐를 3개
기타참고사항
- JDBC 드라이버
: Java Database Connectivity의 약자. 번역기. DBMS의 벤더들이 만든다.
oracle net을 simmulate한 것
사용시에 오라클의 버전에 맞게 사용할 것
- 리스너가 살아있는지 확인(서버가 살아있는지 확인하는 것은 아님)
tnsping 172.16.122.106:1521/orcl
- name resolution
: connect identifier(network alias, service alias)를 connect descriptor로 바꾸는 행위를 말한다.
- linux : oerr ora 12154 명령을 치면 에러에 대한 내용이 나옴.
- 오라클에서의 connection과 session
- connection
: communication path way
- session
: log in ~ log out