데이터베이스2012. 1. 26. 14:08

Oracle 8i 미만 버젼에서는 Oracle SID(System Identification) 정보만을 이용
하여 클라이언트에서 서버로의 접속이 이루어졌으나, Oracle 8i부터 새로이 소개된
Service Name을 이용하여 데이타베이스에 접속할 수 있게 되었다.

그러나 만일 Service Name을 적절히 기술되지 않으면 다음과 같은 오류를 만나게
되므로 그 사용 방법을 다루고자 한다.

"ORA-12514 :TNS - Could not resolve service name"
"ORA-12154 :TNS - Could not resolve service name"

Net8 Easy Configuration 또는 Net8 Assistant 도구에서 Net Service Name을
입력하여야 하며, SERVICE_NAME은 TNSNAMES.ORA 화일에 CONNECT_DATA 절에
기술하여 하며, 과거 버젼의 (SID=<SIDname>) 절을 대치시킨 것이다.

SERVICE_NAME을 TNSNAMES.ORA에 지정하는 방법은 다음 세 가지로 가능하다.


(1) 만일 LISTENER.ORA에 GLOBAL_DBNAME 파라메터가 지정되어 있다면, 그 이름
을 이용한다.

(참고로 GLOBAL_DBNAME은 init 파라메터 <DB_NAME>.<DB_DOMAIN>의 형태로
구성된다.)

listener.ora:
-------------
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = RC815.o200.kr.oracle.com)
(ORACLE_HOME = /mnt3/rctest8i/app/oracle/product/8.1.5)
(SID_NAME = RC815)
)
)

tnsnames.ora:
-------------
ora815 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = tcp)(HOST = o200)(PORT = 1588))
)
(CONNECT_DATA =
(SERVICE_NAME = RC815.o200.kr.oracle.com)
)
)


(2) 초기화 파라메터 <SERVICE_NAMES>.<DB_DOMAIN>의 형태를 이용한다.

(참고로 SERVICE_NAMES의 디폴트 값은 <DB_NAME>.<DB_DOMAIN>이므로
SERVICE_NAMES이 명시적으로 지정되어 있지 않으면 <DB_NAME>.<DB_DOMAIN>
형태의 지정이 가능하다.)

init<SID>.ora:
--------------
SERVICE_NAMES = MYDB
DB_DOMAIN = o200.kr.oracle.com

tnsnames.ora:
-------------
ora815 =
...
(CONNECT_DATA =
(SERVICE_NAME = MYDB.o200.kr.oracle.com)
)
)

만일 둘 이상의 service name의 지정이 필요한 경우에는 다음과 같이
init<SID>.ora화일에 SERVICE_NAMES에 이름을 연속하여 지정한 후 사용할 수 있다.

init<SID>.ora:
--------------
SERVICE_NAMES = MYDB1, MYDB2
DB_DOMAIN = o200.kr.oracle.com

tnsnames.ora:
-------------
ora815_A =
...
(CONNECT_DATA =
(SERVICE_NAME = MYDB1.o200.kr.oracle.com)
)
)

ora815_B =
...
(CONNECT_DATA =
(SERVICE_NAME = MYDB2.o200.kr.oracle.com)
)
)

(3) 마지막으로 init<SID>.ora에 DB_DOMAIN 파라메터가 없고, listener.ora에도
GLOBAL_DBNAME이 없는 경우에는 간단히 SID 값을 사용한다.

tnsnames.ora:
-------------
ora815 =
...
(CONNECT_DATA =
(SERVICE_NAME = ORA815)
)
)
Posted by 미랭군