Oracle DB Link

.·2023년 1월 19일
0

개념

클라이언트나 한 데이터베이스에서 네트워크 상의 다른 데이터베이스에 접속하기 위한 설정을 해주는 오라클 객체

종류

PUBLIC

  • 모든 사용자가 사용 가능
  • 보안에 취약하지만 편리하다.

PRIVATE

  • 특정 사용자만 사용 가능
  • PUBLIC LINK보다 보안적으로 우수하다.
  • 원격지 서버로 연결을 원하는 각 사용자마다 DB LINK를 생성해주어야 한다.

설정 방법

  1. 두 DB 간 기본 포트 1521가 열려 있어야 한다.
    • 접속 확인 방법: telnet 111.111.111.111 1521
  2. 'A' DB에서 'B' DB로 DB Link를 걸고 싶다면 'A' DB tnsnames.ora 파일에 'B' DB 접속 정보를 추가해준다.
  3. 'A' DB의 SYSTEM 계정에 로그인해서 'A' DB에게 DB Link를 걸 수 있는 권한을 준다.
    • PRIVATE
      - 부여: GRANT CREATE DATABASE LINK TO A_DB_ID;
      - 회수: REVOKE CREATE DATABASE LINK FROM A_DB_ID;
    • PUBLIC
      - 부여: GRANT CREATE PUBLIC DATABASE LINK TO A_DB_ID;
      - 회수: GRANT DROP PUBLIC DATABASE LINK TO A_DB_ID;
  4. 링크 생성 권한을 부여받은 계정(A_DB_ID)로 접속 후 DB Link를 생성한다.
    CREATE [PUBLIC] DATABSE LINK 링크이름
    CONNECT TO 상대유저네임 IDENTIFIED BY "비밀번호"
    USING '연결한 DB의 TNS'
-- tnsnames.ora
B_DB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 111.111.111.111)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = oracle)
    )
  )
  • CREATE DATABASE LINK TEST_LINK CONNECT TO B_DB_ID IDENTIFIED BY "PASSWORD" USING 'B_DB';
    - TEST_LINK: LINK 이름
    - B_DB_ID, PASSWORD: 'B' DB 접속 아이디(username)와 패스워드
    - 'B_DB': 'A' DB의 tnsnames.ora에 등록된 'B' DB의 name
  1. DB Link가 걸렸는지 확인한다.
    • SELECT * FROM REMOTE_TABLE@TEST_LINK;
      - REMOTE_TABLE: 원격지 오라클 DB의 테이블명
      - B_DB_ID의 권한으로 조회가 가능한 테이블만 컨트롤 가능
    • SELECT * FROM ALL_DB_LINKS;

주의사항

  • 2개 이상의 ORACLE INSTANCE
    - 각각 다른 HOST NAME과 ORACLE_SID
    - 동일한 NLS_CHARACTER_SET
    - 다를 경우 DATA 입출력시 ???로 나타남.
  • DB LINK로 연결되는 서버에 LISTENER가 반드시 띄어져 있어야 한다.

출처

0개의 댓글