안녕하세요.. 수고들 많으세요..
다름이 아니라 이미 생성된 db링크가 있는데요..
CREATE PUBLIC DATABASE LINK IPAD_DB
CONNECT TO AAA
USING 'IPAD_DB'
이렇게 생성되어 있습니다.
그리고 이것을 쿼리하면 SELECT SYSDATE FROM DUAL@IPAD_DB 하면 잘 가져옵니다. DUAL 테이블이외의 테이블도 잘 조회가 되구요
그런데 노란색 바탕 중 IPAD_DB 는 제 PC이 TNSNAMES.ORA에는 정의된 게 없구요.
그렇다고
USING '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 211.109.12.123)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oracle)
)
)'
뭐 이런식으로 표현을 한것도 아닌데, 디비링크를 사용하면 잘 되고 있단 말이죠..
이걸 어떻게 해석해야 하나요..
TNS에 서비스명을 기술한것도 아니고, 그렇다고 db링크 생성할때 DESCRIPTION .. 구문을 사용한것도 아닌데
어떻게 디비링크가 되고 있는지 알고 싶고, 어디에서 확인할 수 있는지 알고 싶습니다.
개발db서버 쪽에서도 이런식으로 DB LINK가 만들어진게 있는데, 이 링크가 작동을 안합니다.
ora-12154 tns could not resolve the connect identifier specified 와 같은 에러가 나고요.
v$parameter 에 global_names=false로 설정되어 있구요.
TNSnames.ora, sqlnet.ora, 시스템 패스 등은 개발자 임의로 수정할 수 없는 상태이구요.
ORACLE 11g 입니다.
ora-12154로 찾아보면서 해볼 건 해봤는데,, 에러의 원인이 뭔지 잡히는게 없네요..
그래서 운영DB서버에서 잘 사용하고 있는 디비링크와 비교해보려고 했던거구요.. 운영서버의 DB링크의 Using '서비스명'
은 PC의 tnsnames.ora에 없이도 잘 되는 이유를 알면 ora-12154 에러도 확인 될 것 같아서 질문 올립니다.
다들 풍요로운 추석 보내시구요.
확인해야 할 tnsnames.ora 파일의 위치는.
로컬 PC 가 아니라 운영서버 및 개발서버입니다.
저는 로컬 PC의 TNSname.ora 와 관련된것인줄 알았는데,,
마농님.
그렇다면 local PC의 tnsnames.ora에는 'IPAD_DB' 라는 서비스 Description이 없더라도
서버의 tnsnames.ora 'IPAD_DB' 서비스가 있기때문에 db링크가 된다는 말씀이죠?
잘 이해가 안가서요.. 로컬에서 tnsnames.ora과 서버의 listener로 DB접속을 하는걸로 알고 있었는데.. .
DB 서버설정은 안해봐서.. 몰랐었나봐여.
답변 감사합니다.
[로컬]에서 [서버]로 붙을 때는 [로컬]의 tnsname를 사용합니다.
[AAAA]에서 [BBBB]로 붙을 때는 [AAAA]의 tnsname를 사용합니다.
[운영서버]에서 [원격서버]로 붙을 때는 [운영서버]의 tnsname를 사용합니다.
아.. 마농님. 답변까지 너무 감사드립니다.
그렇다면 로컬pc에 원격서버의 tnsnames가 있건 없건 의미가 없는거군요..
운영서버의 tnsnames.ora에 원격서버의 정보를 적어야 DB링크를 할 수 있는거구요..
그래서 제 localPC의 tnsnames.ora에 없어도 db link가 되었던거군요..
알기쉬운 설명 정말 감사합니다. 외부 플젝중엔 긔 회사의 운영서버의 tnsnames.ora를 만질일이 없었는데
이번기회에 잘 좀 알고 있다가 현업담당자에게 설명을 좀 해줄 수 있겠네요.
설명 정말 감사합니다.
.