본문 바로가기
데이터베이스/오라클

DB링크 생성 및 조회

by cbwstar 2021. 9. 3.
728x90
반응형

'A' DB   --- DB Link --→ 'B' DB

 (로컬)                          (원격지)

 

1. 로컬 'A' DB 의 tnsnames.ora 파일에 원격지 'B' DB 접속 정보 추가

ex)

B_DB =

  (DESCRIPTION =

    (ADDRESS_LIST =

       (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.0.1) (PORT = 1521))

    )

    (CONNECT_DATA =

       (SID = ORA9)

    )

  )

※ 'B' DB 접속 정보가 올바르게 입력되었는지 확인 : tnsping 명령으로 확인할 수 있다.

tnsping B_DB

 

2. DB Link 설정 명령

CREATE [PUBLIC] DATABASE LINK DB LINK 이름

CONNECT TO 유저명

IDENTIFIED BY 비밀번호

USING '서비스 이름'

 

ex)

CREATE DATABASE LINK DBLK_B_DB

CONNECT TO SCOTT

IDENTIFIED BY TIGER

USING 'B_DB' 

 

CREATE PUBLIC DATABASE LINK NPQS_TEST

    CONNECT TO PQS_OWN IDENTIFIED BY qlalfqjsgh

  USING 'NEWNPQS';

 

 

※ tnsnames.ora 추가 없이 DB Link 설정하기

tnsnames.ora 에 원격지 'B' DB 정보 추가 없이 아래와 같이 CREATE DATABASE LINK 명령에 직접 기술함으로 추가할 수도 있다.

ex)

 

    CREATE PUBLIC DATABASE LINK DBLK_TEST

    CONNECT TO PQS_OWN IDENTIFIED BY qlalfqjsgh

    USING '(DESCRIPTION =

             (ADDRESS_LIST =

                (ADDRESS = (PROTOCOL = TCP) (HOST=192.168.0.100)(PORT = 1521))

             )

             (CONNECT_DATA =

                (SID = NEWNPQS)

            )

        )';

 

※ DB Link 설정하기 위해서는 권한이 필요하다. 만약 권한이 없다면 다음으로 권한 설정을 해준다.

    GRANT CREATE PUBLIC DATABASE LINK, DROP PUBLIC DATABASE LINK TO user_id;

 

3. DB Link 사용

SELECT * FORM TABLE명@DBLK_B_DB

 

4. DB Link 삭제

DROP DATABASE LINK DB LINK 이름

 

ex)

DROP DATABASE LINK DBLK_B_DB

 

※ DB Link 생성 시 GLOBAL_DB_NAME - REGRESS.RDBMS.DEV.US.ORACLE.COM 이 붙는 현상

DB Link 생성 시 DBLK_B_DB.REGRESS.RDBMS.DEV.US.ORACLE.COM 와 같이 사용자가 정한 DB Link DBLK_B_DB 이름 뒤에 GLOBAL_DB_NAME 이 붙을 때는 GLOBAL_DB_NAME 을 DB_NAME 으로 변경하고 DB_LINK 를 생성하면 된다.

DB Link 이름 뒤에 붙어 있는 GLOBAL_DB_NAME 일반적으로 DB Link 사용 시에 크게 문제되지 않는다.

(그저 보기 지저분할 뿐...)

단, 원격 DB 의 SHOW PARAMETERS GLOBAL_NAMES 의 값(Value) 이 TRUE 인 경우 GLOBAL_DB_NAME 까지 일치해야 한다.

(일반적으로 디폴트 SHOW PARAMETERS GLOBAL_NAME 의 값은 FALSE 이다.)

 

  • GLOBAL_DB_NAME 확인
    SELECT  *  FROM PROPS$ WHERE NAME = 'GLOBAL_DB_NAME' (VALUE$ 컬럼 값이 GLOBAL_DB_NAME 이다)
  • DB_NAME 확인
    SHOW PARAMETERS DB_NAME
  • GLOBAL_DB_NAME 의 변경
    UPDATE PROPS$ SET VALUE$ = '<DB_NAME>' WHERE NAME = 'GLOBAL_DB_NAME';
    <DB_NAME> 은 SHOW PARAMETERS DB_NAME 으로 확인한 이름값을 넣어준다.

GLOBAL_DB_NAME 변경 후 DB 인스턴스를 재기동 해주어야 반영된다.!!! (shutdown immediate / Startup)

 

 

 

- DB Link 란 ? 

: 데이터베이스 링크는 클라이언트 또는 현재의 데이터베이스에서 네트워크상의 다른 데이터베이스에 접속하기 위한 접속 설정

- DB Link 생성방법

  CREATE [PUBLIC] DATABASE LINk <link_name>

  CONNECT TO <username> IDENTIFIED BY <password>

  USING <원격 db alias>

  - PUBLIC : PUBLIC 옵션을 사용하면 공용 데이터베이스 링크를 생성하고, PUBLIC 옵션을 사용하지 않으면 링크를 생성한 자신만 사용 할 수 있다.

  - link_name : 데이터베이스 링크의 이름 지정

  - 원격 db alias : 네트워크 접속에 사용할 오라클 데이터베이스 네트워크 서비스명을 지정 한다.

  - username, password : 오라클 사용자명과 비밀번호를 지정 한다.

===========예제==========

 

"A" ---DB Link---> "B"

 

-- 데이터베이스 링크 생성

SQL> CREATE DATABASE LINK test_server

     CONNECT TO scott IDENTIFIED BY tiger USING 'B_DB';

 

-- USING다음에 B_DB는 tnsnames.ora파일에 정의되어 있어야 한다.

======== tnsnames.ora =======

 B_DB =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 211.109.12.123)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = oracle)

    )

  )

=========================

 

tnsping B_DB로 확인

: tnsping B_DB

 

-- 데이터베이스 링크를 통한 데이터의 조회..

SQL> SELECT ename FROM <테이블명>@test_server;

 

 

-- 데이터베이스 링크의 삭제..

SQL> DROP DATABASE LINK test_server;

-- DB Link 리스트 조회

SQL> SELECT * from DBA_DB_LINKS;

728x90
반응형

댓글



"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

loading