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 테이블명@링크명;