※ 이 글은 Oracle Database 11g Release 11.2.0.4.0 - 64bit 버전을 기준으로 작성된 글입니다.
ERROR NAME
ORA-12154 : TNS:could not resolve the connect identifier specified
SYMPTOMS
TNS 위치 설정이 정상적으로 등록되어 있지 않아 발생하며 DB_LINK 접근 시 종종 오류가 발생함. 해당 오류는 tnsnames.ora 에 인스턴스 접속 정보들이 기재되어 있는데, tnsnames.ora에 등록되어 있지 않거나 DB Alias가 등록되어 있지 않은 경우 발생하는 오류다.
HOW TO SOLVE
따라서, 다음과 같이 조치하면 된다. 조치 방법은 두가지다.
- tnsnames.ora에 db_alias 등록한 뒤 tns 통신 및 DB LINK 확인
- DB LINK 재생성
1. tnsnames.ora에 db_alias 등록한 뒤 tns 통신 및 DB LINK 확인
su
cd $TNS_ADMIN
vi tnsnames.ora
- tnsnames.ora는 관리자 계정으로만 수정이 가능함
- 일반적으로 $TNS_ADMIN은 등록되어있는 환경변수이나, 환경변수가 등록되어 있지 않은 경우 tnsnames.ora의 위치를 찾아서 수정해줘야 함. (필자 경로는 /u01/app/12.1.0.1/grid/network/admin 이었음)
※ tnsnames.ora에 아래와 같이 문구 삽입
KIS02 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 203.xxx.xxx.xxx)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = KIS02)
)
)
- 수정해야할 부분
- 인스턴스명 (예 : KIS02)
- HOST - 원격지 호스트 IP 주소
- PORT - 원격지 호스트 포트
- SERVICE_NAME - 인스턴스명 (예 : KIS02)
이후 정상 접근되는지 확인
tnsping [인스턴스명]
sqlplus [원격지 사용자명]/[비밀번호]@[TNS_ALIAS명]
SQL> SELECT * FROM [테이블명]@[DB_LINK명]
- tnsping 을 통해 통신 여부 확인
- sqlplus 로 접근
- 예: sqlplus hr/hr@KIS02
- SQL> SELECT * FROM EMPLOYEES@L_DBLINK_KIS02
2. DB LINK 재생성
이 경우는 DB ALIAS 설정 대신 원격지 IP 주소, 포트를 DBLINK 생성할 때 같이 넣고 생성하는 방법임.
DROP DATABASE LINK [링크명];
기존 링크를 먼저 삭제해준다.
그리고 아래와 같이 기존 링크명을 그대로 따서 DB LINK를 재생성해준다.
CREATE DATABASE LINK [링크명] CONNECT TO [원격지 사용자명] IDENTIFIED BY "[원격지 사용자 비밀번호]"
USING '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = [원격지 IP주소])(PORT = [원격지 포트]))
)
(CONNECT_DATA =
(SERVER=dedicated)
(SERVICE_NAME=[인스턴스명])
)
)';
참고문헌
1. Database Link Accessed Remotely Fails with ORA-12154, Locally Works (Doc ID 1593961.1)
https://support.oracle.com/knowledge/Oracle%20Database%20Products/1593961_1.html
'운영(Ops) 이야기 > TroubleShooting' 카테고리의 다른 글
[Oracle] ORA-12541: TNS: no listener 오류 해결 방법 (0) | 2022.08.04 |
---|