본문 바로가기

Oracle/Error

ORA-12514

ORA-12514, ORA-12154 에러 발생시 해결법


Technical Bulletins No. 11882의 내용입니다.

※ 아래와 같은 문제가 발생하면 tnsnames.ora파일을 점검해 볼 필요가 있습니다.

"ORA-12514 :TNS - Could not resolve service name"
      (접속 기술자에 주어진 SERVICE_NAME 이 리슨너에 없습니다.)
"ORA-12154 :TNS - Could not resolve service name"  


Net8 Easy Configuration 또는 Net8 Assistant 도구에서 Net Service Name을 입력하여야 하며,
SERVICE_NAME은 tnsnames.ora 파일에 CONNECT_DATA 절에 기술하여야 합니다.

SERVICE_NAME을 tnsnames.ora 파일에 지정하는 방법은 다음과 같이 세 가지가 있습니다.



(1) listener.ora에 GLOBAL_DBNAME 파라미터가 지정되어 있다면, 그 이름을 이용 하면 됩니다.

 
(참고로 GLOBAL_DBNAMEinit 파라메터 <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)
      )
    )
  ================================================
    * Oracle Community OracleClub.com
    * http://www.oracleclub.com
    * http://www.oramaster.net
    * 운영자 : 김정식 (oramaster _at_ empal.com)
  ================================================ 

[출처] ora-12514|작성자 venturs


9i에서 10g로 넘어가면서 자주 만나는 에러..

군데 자꾸 까먹는당.. ㅡ.ㅜ

 

참고로.. 10g 클라이언트에서 9i 오라클 서버로 접근할때 발생하는 경우임.. ^^;;


ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

 

==> TNS 설정을 확인한다.

 

 

:: tnsnames.ora

aladdin_ora920 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = aladdin)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora920)
    )
  )

 

여기서 SERVICE_NAME을 SID로 변경한다.

==>

 

aladdin_ora920 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = aladdin)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = ora920)
    )
  )