2010-06-02 4 views
6

동일한 서버의 스키마에 대한 링크 인 데이터베이스 링크를 만들어야합니다. 이것에 사용할 특별한 키워드가 있습니까? (로컬 또는 로컬 호스트와 같음)원격 및 로컬이 동일한 서버 인 데이터베이스 링크를 만드는 방법

서버의 이름이 tnsnames에 있으며 내 문제의 일부일 수 있습니다.

계속하려면 데이터베이스 링크가 필요한 스크립트와 관련된 복잡한 상황이 있습니다.

답변

8

DB 링크 메커니즘은 TNS를 거치므로 로컬 데이터베이스의 TNS 항목을 정의하고 링크에서 사용하십시오.

YourDBAlias = 
    (DESCRIPTION = 
    (ADDRESS_LIST = 
     (ADDRESS = (PROTOCOL = TCP)(HOST = yourHOST)(PORT = 1521)) 
    ) 
    (CONNECT_DATA = 
     (SERVICE_NAME = YourDB) 
    ) 
) 

이 항목은 또한 데이터베이스 서버의 TNSNAMES.ORA 파일에 존재해야합니다 :

클라이언트 TNSNAMES.ORA 파일과 같이 보입니다 항목을 포함해야합니다. 이 트릭 (당신은 TNS의 이름을 사용하는 가정)을해야

CREATE [PUBLIC] DATABASE LINK yourLinkName 
     CONNECT TO theSchema IDENTIFIED BY thePW 
     USING 'YourDBAlias'; 

:

다음으로 데이터베이스 링크를 생성합니다. 당신이 당신의 TNS 이름의 SQL *에서, 데이터베이스에 대해 무엇인지 확실하지 게다가 당신이 명령을 실행할 수있는 경우

또한 :

show parameter service_names 

이렇게하면 이름 (들) 있음을 보여줍니다 데이터베이스 그것은 그것의 청취자로 등록됩니다. TNSNAMES.ORA 파일에서 해당 항목을 찾을 수 있어야합니다.

4

TNSNAMES.ORA를 수정할 수없는 경우 Easy Connect syntax을 DB 링크에도 사용할 수 있습니다. 청취자 가정 가 기본 포트에, 다음 SQL은 conneection 문자열을

선택 utl_inaddr.get_host_address을 얻을 것이다 || ': 1521 /'|| SYS_CONTEXT ('USERENV', 'INSTANCE_NAME')를 이중

에서
+0

+1 똑똑한 해결책! – DCookie

1

"동일한 서버의 스키마"가 동일한 데이터베이스의 스키마를 의미하는 경우 문제가 발생할 수 있습니다. (예를 들어, 스크립트가 외부 데이터베이스로 스키마 외부의 모든 것을 처리하여 후속 SQL 조작을 병합하는 경우).

오라클은 루프백 링크를 다소 다르게 취급하며 링크에 데이터베이스 글로벌 이름을 사용하는 경우 ORA-02082 오류 ("루프백 데이터베이스 링크에는 연결 한정자가 있어야 함")가 표시 될 수 있습니다. 이 오류가 발생하면 "loopback"과 같이 링크 이름을 다르게 지정해야하지만 global_names 데이터베이스 매개 변수도 false로 설정해야합니다. 그렇지 않으면 "ORA-02085 : 데이터베이스 링크 someName이 someOtherName에 연결"을 받게됩니다.