반응형
오라클에서 외부 DB와 연결할 때 사용하는 DB LINK는
간편하지만 세션 부하 등 주의가 필요한 기능이다.
DB LINK란?
DB_LINK(Database Link)는 오라클 DB에서 다른 원격 DB의 객체(테이블, 뷰 등)를
로컬 DB에서 직접 접근할 수 있도록 만들어주는 기능이다.
운영 중 서로 다른 DB 인스턴스를 연결해야 할 상황이 생깁니다.
예를 들어 A 시스템에서 B 시스템의 테이블에 접근하거나 데이터를 쓰고 싶을 때
가장 간편한 방법 중 하나가 바로 DB LINK입니다.
사용 예시
✅ SELECT 예시
SELECT * FROM customer@ERP_LINK;
✅ INSERT 예시
INSERT INTO log_table@LOG_DB_LINK (id, message) VALUES (1, '처리 완료');
✅ DB_LINK 생성 예시
CREATE DATABASE LINK LOG_DB_LINK
CONNECT TO log_user IDENTIFIED BY log_password
USING 'LOG_TNS_ENTRY';
DB LINK의 장점
항목 | 설명 |
간편한 연동 | 외부 DB에 복잡한 설정 없이 SQL만으로 접근 가능 |
트랜잭션 공유 가능 | 로컬 트랜잭션과 외부 트랜잭션을 하나로 묶을 수 있음 |
데이터 조회,사입 가능 | SELECT뿐 아니라 INSERT/UPDATE등도 가능 |
DB LINK의 단점
항목 | 설명 |
트랜잭션 처리 복잡 | 외부 DB까지 트랜잭션이 퍼지면서 오류 시 Rollback 문제가 생길 수 있음 |
성능 이슈 | 외부 DB 응답 속도에 따라 전체 SQL이 느려질 수 있음 |
세션 누수 | 사용 후 세션이 INACTIVE 상태로 남는 롱 아이들 세션이 발생할 수 있음 |
장애 시 리스크 | 외부 DB 연결 문제로 우리 시스템까지 영향을 받을 수 있음 |
📌 DB LINK는 언제 왜 써야 할까?
🤔 위에서 보면 단점이 너무 큰 것 같은데 도데체 왜 쓰는걸까?
→ DB LINK는 아래와 같은 상황에서 간단하고 강력한 선택지가 된다
- 빠르게 다른 DB와 연동해야 할 때
- 예: 내부 시스템이 2개 DB로 나뉘어 있는데 데이터를 조인하거나 비교해야 할 경우
- JNDI 설정까지 시간이 없거나 단기간 데이터 조회만 필요할 때
- 운영 중인 타 시스템 DB에 직접 접근해야 할 때
- 다른 팀에서 운영하는 DB를 우리 쿼리에서 직접 조회해야 하는 경우
- REST API 또는 별도 연계 없이 빠르게 활용 가능
- 트랜잭션 공유가 필요한 경우
- 우리 DB와 외부 DB 모두 한 트랜잭션 내에서 처리되어야 할 때
- 예: insert(우리DB) → insert@link(외부DB) → commit 같이 일괄 처리
📌언제 쓰면 안 되는가?
반대로 아래 상황이라면 JNDI, API, 메시징 방식이 더 적합함
- TPS(초당 처리량)가 높은 시스템이라면
- DB LINK는 세션 관리가 어려워지고 병목이 발생할 가능성이 높음
- 외부 DB의 장애가 곧 우리 시스템에도 영향을 줄 수 있는 구조라면
- DB LINK는 그 장애를 그대로 전파시킬 수 있기 때문에 위험
- 장기적으로 유지보수나 이중화를 고려해야 하는 시스템이라면
- DB LINK는 연결 구조가 불투명하고 관리 포인트가 늘어나기 때문에 신중히 검토
🔚 결론
DB_LINK는 편리함과 유연함을 제공하지만 그만큼 리스크도 존재함
따라서 아래처럼 “간단한 연동”, “일시적인 조회”, “트랜잭션 동기 처리가 꼭 필요한 경우”에만 사용하는 것이 이상적임
✔️ 작고 단순한 연동에는 효율적
❌ 복잡하거나 고부하 시스템엔 신중히 검토할 것
반응형
'DataBase > Oracle' 카테고리의 다른 글
[Oracle] 오라클 시퀀스 초기화 3가지 방법 (0) | 2025.04.23 |
---|---|
[ Oracle SQL ] 계층형쿼리 (Hierarchy Query) (1) | 2022.06.07 |