[오라클] DB링크

조하영·2022년 12월 22일

oracle

목록 보기
6/7

DB Link 란?

  • 말그대로 다른 데이터베이스에 접속할 수 있는 링크를 말한다.

  • DML문에서 "FROM 테이블명@DB링크" 형식으로 사용하여, 다른 DB에 쿼리를 날릴 수 있다.

  • 다른 DB에 특정 유저에 대한 링크를 만들어 해당 스키마에 테이블들을 접근하는 기술이다.

쉽게 말하자면 'A' DB에서 'B' DB로 DB Link 를 걸고자 한다면 우선 'A' DB의 TNSNAMES.ORA파일에 'B' DB 접속정보를 추가해 줍니다.

물론 그 전에 두 DB 간에 1521(기본 포트)가 열려 있어야 합니다.
접속이 가능한지는 한 DB에서 다른 DB로 > telnet IP PORT 로 접속 테스트를 해주시면 됩니다.
ex> telnet 192.168.0.1 1521

실제 DB Link를 걸기 위해서는 'B' DB의 서비스 네임과 link걸 table의 user/passwd를 알아야 합니다.
그리고 'A' DB에서 DB Link를 걸기 위해선 권한이 필요합니다.

'A' DB 의 System 계정으로 들어가서

GRANT CREATE PUBLIC DATABASE LINK, DROP PUBLIC DATABASE LINK TO A DB_ID;

'A' DB에 권한을 주고, 아래와 같이 DB Link를 생성합니다.

CREATE DATABASE LINK TEST_LINK CONNECT TO B DB_ID IDENTIFIED BY PASSWORD USING 'B DB'

  TEST_LINK  -> Link 이름 
  B DB_ID -> B DB 접속 아이디 
  PASSWORD  -> B DB 접속 패스워드 
'B DB'  -> B DB 의 TNSNAMES.ORA에 등록된 Name 

마지막으로 아래의 명령어로 DB Link 가 걸렸는지 확인해 줍니다.

SELECT * FROM Table@TEST_LINK

  • 모든 DB Link 를 확인하는 SQL
    select * from all_db_links;

  • DB Link 삭제
    drop database link TEST_LINK

CREATE DATABASE LINK 원하는 링크이름

CONNECT TO 계정 IDENTIFIED BY 비번
USING '연결할 DB의 TNS';

이래저래 안걸리면 직접넣기

CREATE DATABASE LINK 링크이름
CONNECT TO 아이디 IDENTIFIED BY 비번
USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=호스트명)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=SID)))';

접근제한자
접근제한자(PUBLIC / PRIVATE)가 존재한다

  • PUBLIC 모든 유저가 사용가능한 공용링크를 만들때 지정한다.

  • PRIVATE 특정 유저만 사용가능 한 DB링크를 만들때 지정한다.

DB 링크의 필요성
제한된 환경에서 확장이 필요할때, 다른 서버의 DB를 링크를 통해 접속하게 해주므로 확장성을 가진다.

DB 링크 CRUD문
조회

SELECT * FROM DBA_DB_LINKS
생성

TNS에 해당 DB가 서로 명시되어있어야하며, 통신을 위해 각각 서버에 1521 포트개방은 필수입니다.

CREATE DATABASE LINK [링크로 사용할 명칭]
CONNECT TO [원격지 로그인 유저명]
IDENTIFIED BY "[원격지 유저 패스워드]"
USING [로컬서버의 tnsnames.ora에 설정된 접속할 매칭이름]
삭제

DROP DATABASE LINK 링크명;

DROP PUBLIC DATABASE LINK 링크명;

PUBLIC 삭제시는 위와같이 명시해주셔야 합니다.

링크 사용문

SELECT * FORM 테이블명@링크명;

profile
공부하는 개발자

0개의 댓글