본문 바로가기
공부방/DataBase

[Oracle] DB링크를 통한 원격 테이블 조회 방법

by SmartCow 2025. 2. 1.

Oracle DB 링크를 통한 원격 테이블 조회

Oracle 데이터베이스에서 원격 테이블의 정보를 조회할 때 DB 링크를 사용할 수 있다. 그러나 데이터 사전 뷰(ALL_TAB_COMMENTS, ALL_TAB_COLUMNS 등)는 직접 DB 링크를 통해 조회할 수 없다.

DB 링크를 통한 원격 테이블 조회 방법

1. 원격 테이블 직접 조회

DB 링크(디비링크주소)를 통해 원격 테이블을 조회

SELECT * FROM 테이블명@디비링크주소;
    

2. 원격 데이터 사전 정보 조회 (테이블 생성)

데이터 사전 뷰는 직접 조회할 수 없으므로 원격 데이터베이스에서 테이블을 생성한 후 조회해야 한다.

CREATE TABLE tab_comments_backup AS 
SELECT * FROM ALL_TAB_COMMENTS;
    

이후 로컬 DB에서 조회할 수 있다

SELECT * FROM tab_comments_backup@디비링크주소 WHERE TABLE_NAME = '테이블명';
    

3. 뷰를 사용하여 원격 데이터 조회

원격 DB에서 데이터를 쉽게 접근할 수 있도록 뷰를 생성하는 방법

CREATE VIEW remote_tab_comments AS 
SELECT * FROM ALL_TAB_COMMENTS;
    

이후 로컬에서 다음과 같이 조회할 수 있다

SELECT * FROM remote_tab_comments@디비링크주소 WHERE TABLE_NAME = '테이블명';
    

4. 동적 SQL을 사용한 원격 조회

PL/SQL을 활용하여 원격 데이터 사전 정보를 조회할 수 있다

DECLARE
    v_sql VARCHAR2(4000);
    v_result VARCHAR2(4000);
BEGIN
    v_sql := 'SELECT COMMENTS FROM ALL_TAB_COMMENTS WHERE TABLE_NAME = "테이블명"';
    
    EXECUTE IMMEDIATE v_sql INTO v_result;
    
    DBMS_OUTPUT.PUT_LINE('Result: ' || v_result);
END;
    

5. DBMS_SQL을 사용하여 원격 조회

DBMS_SQL 패키지를 이용하여 원격 데이터 조회 가능

DECLARE
    cur INTEGER;
    v_result VARCHAR2(4000);
    v_sql VARCHAR2(4000) := 'SELECT COMMENTS FROM ALL_TAB_COMMENTS WHERE TABLE_NAME = "테이블명"';
BEGIN
    cur := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(cur, v_sql, DBMS_SQL.NATIVE);
    DBMS_SQL.DEFINE_COLUMN(cur, 1, v_result, 4000);
    DBMS_SQL.EXECUTE(cur);
    IF DBMS_SQL.FETCH_ROWS(cur) > 0 THEN
        DBMS_SQL.COLUMN_VALUE(cur, 1, v_result);
        DBMS_OUTPUT.PUT_LINE('Result: ' || v_result);
    END IF;
    DBMS_SQL.CLOSE_CURSOR(cur);
END;
    

정리

  • DB 링크를 통해 원격 테이블을 직접 조회 가능.
  • 데이터 사전 뷰는 직접 조회 불가능하므로 원격 DB에서 테이블을 생성 후 접근해야 함.
  • 뷰를 활용하면 원격 테이블을 보다 쉽게 조회할 수 있음.
  • PL/SQL을 사용하면 동적으로 원격 데이터를 조회 가능.
  • DBMS_SQL을 사용하여 보다 세밀한 제어가 가능.