혁신을 이룹니다, 오딘박스(OdinBOX)

언제나 어디서나 오딘박스와 함께!

오라클 DBLINK 사용방법

간지뽕빨리턴님 2025. 8. 23. 11:56
반응형

DBLINK의 개념과 필요성 이해하기

오라클 DBLINK에 대해서 알아봅시다!

실무에서 단일 오라클 데이터베이스만 사용하는 경우보다 여러 종류의 DBMS(ORACLE, MYSQL, POSTGRESQL 등)을 함께 사용하는 경우가 많습니다.

 

예를 들어, 현재 시스템에서 타 시스템과 연계하여 자료를 보여주어야 하는 경우가 흔히 많이 있습니다.

 

이때 DBLINK(Database Link)기능과 게이트웨이(Database Gateway, ODBC 연동)을 활용하면 서로 다른 DB간에도 데이터를 연계할 수 있습니다.

이번에는 오라클 DBLINK 개념과 설정 방법을 설명한 후 연결하는 방법등을 알아보려고 합니다.

목차

    DBLINK

    DBLINK란?

    오라클 DB에서 원격 DB(SQL 실행대상)에 접근할 수 있게 해주는 객체입니다.

    용도의 경우 원격 DB 테이블 조회 및 조작, 분산 트랜잭션 처리, 이기종 DB 통합 등의 용도가 있습니다.

    오라클에서 오라클 DBLINK

    --생성 방법 1
    CREATE DATABASE LINK remote_link
    CONNECT TO remote_user IDENTIFIED BY password
    USING 'tns_alias'; -- tnsnames.ora에 있는 이름과 맞춰야 함.
    
    -- 생성 방법 2
    CREATE DATABASE LINK remote_link
      CONNECT TO TEST
      IDENTIFIED BY "비밀이다"
      USING '(DESCRIPTION=
                (ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))
                (CONNECT_DATA=(SERVICE_NAME=TEST))
             )';
    
    --확인 및 삭제
    SELECT * FROM user_db_links;
    DROP DATABASE LINK remote_link;

    PUBLIC DBLINK vs PRIVATE DBLINK

    Private DBLINK : 생성한 사용자만 사용가능

    Public DBLINK : 모든 사용자가 사용 가능 (보안 위협증가)

    오라클에서 MYSQL DBLINK

    오라클은 MYSQL과 직접 DBLINK라는 것을 지원하지 않습니다. 대신 Oracle Database Gateway for ODBC(DG4ODBC) 또는 hsodbc를 이용합니다.

    1. ODBC 드라이버 설치

    MYSQL ODBC 드라이버(Connector/ODBC) 설치

    2. odbc.ini 등록 (Linux)

    [mysql_dsn]
    Driver=/usr/lib/libmyodbc5.so
    Description=MySQL ODBC Driver
    Server=127.0.0.1
    Port=3306
    Database=testdb
    User=testuser
    Password=testpwd

    3. tnsnames.ora 등록

    MYSQL_DBLINK =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))
        (CONNECT_DATA = (SID=dg4odbc))
        (HS=OK)
      )

    4. DBLINK 생성

    CREATE DATABASE LINK mysql_link
    CONNECT TO "testuser" IDENTIFIED BY "testpwd"
    USING 'MYSQL_DBLINK';

    5. 조회 & 삭제

    -- 조회
    SELECT * FROM dba_db_links;
    SELECT * FROM user_db_links;
    
    -- 삭제
    DROP DATABASE LINK remote_link;

    6. 사용예시

    SELECT * FROM customers@mysql_link;

    오라클에서 PostgreSQL 연결

    PostgreSQL도 동일하게 DG4ODBC또는 Oracle Gateway for ODBC를 활용합니다.

    1. PostgreSQL ODBC 드라이버 설치

    psqlODBC 설치

    2. odbc.ini 등록

    [pg_dsn]
    Driver=/usr/lib/psqlodbcw.so
    Description=PostgreSQL ODBC
    Servername=127.0.0.1
    Port=5432
    Database=pgdb
    Username=pguser
    Password=pgpwd

    3. tnsnames.ora 등록

    POSTGRES_DBLINK =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))
        (CONNECT_DATA = (SID=dg4odbc))
        (HS=OK)
      )

    4. DBLINK 생성

    CREATE DATABASE LINK pg_link
    CONNECT TO "pguser" IDENTIFIED BY "pgpwd"
    USING 'POSTGRES_DBLINK';

    5. 사용예시

    SELECT * FROM orders@pg_link;

    실제 운영 환경 문제

    성능저하 : 이기종 DB는 변환 오버헤드가 크므로 대량 데이터 전송 시 ETL 권장

    문자셋 문자 : MYSQL, POSTGRESQL에서 ORACLE 간 UTF-8에서 AL32UTF8 변환 오류 가능 -> HS_LANGUAGE 설정

    트랜잭션 문제 : 분산 트랜잭션은 안전성이 떨어지므로 단일 조회 용도로만 DBLINK 권장

    DBLINK 사용 시 주의사항

    성능 이슈

    - 네트워크 지연 발생 가능

    - 대량 데이터 전송 시 성능 저하

    - JOIN 시 원격 DB에서 실행계획 차이 발생

    보안 고려사항

    - PUBLIC DBLINK 사용 최소화

    - 비밀번호 암호화 문제 (12c 이후부터는 암호화 저장 지원)

    - 권한 분리 원칙 적용

    대안 기술

    - ORACLE GOLDENGATE - 실시간 복제

    - ORACLE DATA GUARD - 고가용성 환경

    - ETL 도구 - 대용량 데이터 이동

    DBLINK 대안 기술

    Oracle GoldenGate : 실시간 복제 (이기종 DB 지원)

    ETL 도구(Informatica, ODI 등) : 대용량 데이터 이동

    Kafka + CDC : 실시간 데이터 스트리밍

    마무리

    DBLINK는 오라클간 연결뿐 아니라 MYSQL, POSTGRESQL 같은 이기종 DB 연결에도 활용 가능합니다. 하지만 이기종 DB 연결은 성능 저하, 문자셋, 트랜잭션 제약이 있으므로 소규모 조회, 연계 용도에 적합합니다. 운영환경에서는 DBLINK를 남용하기보다 데이터복제-ETL-CDC 같은 전문 솔루션과 함께 고려하는 것이 바람직합니다.