DB링크(Database Link)는 한 데이터베이스에서 다른 데이터베이스의 객체(테이블, 뷰 등)에 접근하기 위해 사용되는 연결 메커니즘이다. 주로 Oracle Database와 같은 RDBMS에서 많이 사용된다. 이를 통해 분산된 데이터베이스 환경에서 서로 다른 데이터베이스 간에 데이터를 공유하거나 쿼리를 실행할 수 있다.
DB링크를 사용하면 로컬 데이터베이스에서 원격 데이터베이스의 데이터를 마치 로컬 데이터처럼 액세스할 수 있다.
원격 데이터베이스의 테이블이나 뷰에 대해 일반 SQL 문장을 실행할 수 있습니다.
SELECT * FROM 테이블명@DB링크명;
개발자나 사용자 입장에서는 원격 데이터베이스에 대한 복잡한 연결 설정을 신경 쓸 필요 없이 DB링크 이름만 사용하면 됩니다.
CREATE DATABASE LINK 링크명
CONNECT TO 사용자명 IDENTIFIED BY 비밀번호
USING '원격데이터베이스';
HR 계정을 통해 원격 데이터베이스에 연결CREATE DATABASE LINK hr_link
CONNECT TO hr IDENTIFIED BY hr_password
USING '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA = (SERVICE_NAME = orcl))
)';
SELECT * FROM employees@hr_link;
INSERT INTO employees@hr_link (id, name) VALUES (1, 'John');
원격 데이터베이스에 자주 액세스하면 네트워크 트래픽과 쿼리 성능에 영향을 줄 수 있다. 필요한 데이터만 가져오도록 최적화된 쿼리를 사용하는 것이 중요.
DB링크를 생성할 때 원격 데이터베이스의 사용자 계정 정보가 포함되므로, 권한 관리와 보안에 신경 써야 함. 예를 들어, DB링크에 사용되는 계정은 최소한의 권한만 부여받아야 한다.
보안 문제때문에 내가 겪은 현업에서는 되도록 API로 값을 주고 받으려고 했다.
oracle의 경우는 기본 DB링크를 제공한다. 하지만 다른 DB의 경우는 기본적으로 제공하지 않는다. MySQL은 FEDERATED 방식, MariaDB는 CONNECT, PostgreSQL의 경우는 FDW를 사용해야 한다.
위 기능들을 사용 하더라도, oracle은 모든 DB에 접근 가능한 반면, 다른 DB들은 특정 DB들만 접근 가능하다.