[DB] DB Link

limchard·2024년 12월 13일

database

목록 보기
2/2

DB링크란?

DB링크(Database Link)는 한 데이터베이스에서 다른 데이터베이스의 객체(테이블, 뷰 등)에 접근하기 위해 사용되는 연결 메커니즘이다. 주로 Oracle Database와 같은 RDBMS에서 많이 사용된다. 이를 통해 분산된 데이터베이스 환경에서 서로 다른 데이터베이스 간에 데이터를 공유하거나 쿼리를 실행할 수 있다.

주요 특징

분산 데이터 액세스

DB링크를 사용하면 로컬 데이터베이스에서 원격 데이터베이스의 데이터를 마치 로컬 데이터처럼 액세스할 수 있다.

SQL 문을 통한 접근

원격 데이터베이스의 테이블이나 뷰에 대해 일반 SQL 문장을 실행할 수 있습니다.

SELECT * FROM 테이블명@DB링크명;

투명한 사용

개발자나 사용자 입장에서는 원격 데이터베이스에 대한 복잡한 연결 설정을 신경 쓸 필요 없이 DB링크 이름만 사용하면 됩니다.

DB링크 생성하기(Oracle 기준)

1. DB링크 생성

CREATE DATABASE LINK 링크명
CONNECT TO 사용자명 IDENTIFIED BY 비밀번호
USING '원격데이터베이스';

2. 예시

  • 로컬 데이터베이스에서 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))
       )';

3. 사용방법

  • 원격 테이블 조회
SELECT * FROM employees@hr_link;
  • 원격 테이블에 데이터 insert
INSERT INTO employees@hr_link (id, name) VALUES (1, 'John');

사용시 주의사항

1. 성능문제

원격 데이터베이스에 자주 액세스하면 네트워크 트래픽과 쿼리 성능에 영향을 줄 수 있다. 필요한 데이터만 가져오도록 최적화된 쿼리를 사용하는 것이 중요.

2. 보안

DB링크를 생성할 때 원격 데이터베이스의 사용자 계정 정보가 포함되므로, 권한 관리와 보안에 신경 써야 함. 예를 들어, DB링크에 사용되는 계정은 최소한의 권한만 부여받아야 한다.

보안 문제때문에 내가 겪은 현업에서는 되도록 API로 값을 주고 받으려고 했다.


추가사항

oracle의 경우는 기본 DB링크를 제공한다. 하지만 다른 DB의 경우는 기본적으로 제공하지 않는다. MySQL은 FEDERATED 방식, MariaDB는 CONNECT, PostgreSQL의 경우는 FDW를 사용해야 한다.
위 기능들을 사용 하더라도, oracle은 모든 DB에 접근 가능한 반면, 다른 DB들은 특정 DB들만 접근 가능하다.

profile
java를 잡아...... 하... 이게 맞나...

0개의 댓글