이기종 간 데이터를 주고받는 경우 보통의 경우라면 REST1)와 같이 중간에 API2)를 만들어 통신합니다. 하지만 서로 다른 호스트의 데이터베이스를 직접 연결하여 통신하는 경우도 있는데 이때 DB Link라는 것을 사용하여 직접 다른 데이터베이스를 액세스할 수 있습니다.

💡 Tips : A database link is a connection between two physical database servers that allows a client to access them as one logical database. A database link connection is one-way in the sense that a client connected to local database A can use a link stored in database A to access information in remote database B, but users connected to database B cannot use the same link to access data in database A. If local users on database B want to access data on database A, then they must define a link that is stored in the data dictionary of database B.- ORACLE

DB Link는 두 개의 데이터베이스 서버 사이의 커넥션을 의미하고 단방향이라고 합니다. 따라서 두 개의 데이터베이스에서 서로 접속할 수 있는 객체를 생성해야 합니다.

이기종 간 연결

이 글에서 ORACLE과 MS-SQL에 DB Link 객체를 설정하고 접속해 보도록 하겠습니다.

드라이버 설정

ODBC3)를 이용하기 위해 아래 그림과 같이 설정합니다.

  1. ODBC 설정 제어판 → 관리도구 → ODBC 데이터 원본(설치 된 DB Architecture)
  2. DSN 만들기 -
  3. DSN 설정0 -
  4. DSN 설정1 -
  5. DSN 설정2 반드시 테스트 원본 테스트를 눌러 연결이 되는지 확인해주세요!
  6. DSN 설정3 -

tnsnames.ora 설정

ORACLE이 설치된 곳\(%ORACLE_HOME%\\\)_에 _network\admin\tnsnames.ora 파일이 있습니다. 이 파일을 메모장으로 열어 아래와 같이 추가해 주세요.

1
2
3
4
5
6
7
8
9
#tnsnames.ora
Alias(ODBC 설정 때 사용했던 별칭) =
    (DESCRIPTION =
        (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
        (CONNECT_DATA = (SID = Alias(ODBC 설정 때 사용했던 별칭)) )
        (HS=OK)
    )

listener.ora 설정

같은 경로에 listener.ora 파일을 메모장으로 열어 아래와 같이 추가해 주세요.

1
2
3
4
5
6
7
8
# Oracle 11.2.0 기준
PROGRAM "dg4odbc" SID_LIST_LISTENER =
    (SID_LIST =
        (SID_DESC =
            (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
            (SID_NAME = (ODBC 별칭)) (PROGRAM = dg4odbc)
        )
    )

Alias 파일 생성

%ORACLE_HOME%\hs_ 디렉터리에 _init\(Alias\).ora 파일을 만들고 아래와 같이 기입 후 저장해주세요. Alias는 DSN을 만들 때 정의 되었던 별칭입니다!

1
2
3
4
HS_FDS_CONNECT_INFO = Alias(ODBC설정 때 사용한 별칭)
HS_FDS_TRACE_LEVEL = 1
HS_DB_DOMAIN = Alias(ODBC설정 때 사용한 별칭)
HS_DB_NAME = Alias(ODBC설정 때 사용한 별칭)

DB Link를 만들기 위해 Admin 계정이 필요하고, 만약 사용자가 링크를 만들 수 있게 해주려면 grant 쿼리로 설정해 주면 됩니다.

이제 아래 쿼리를 이용해서 DB Link를 추가해보세요!

1
2
3
4
CREATE PUBLIC DATABASE LINK Alias(ODBC 설정에 사용한 이름) -- 권한 애러가 나올 시 PUBLIC 제거
CONNECT TO (MSSQL 접속 계정 ID)
IDENTIFIED BY "Password"
USING 'Alias(ODBC 설정에 사용한 이름)';

테스트

이제 만들어진 DB Link를 이용해서 MS-SQL에 직접 접속하여 쿼리를 날릴 수 있습니다. 사용 방법은 테이블 이름 뒤에 @Alias를 붙여 직접 조회할 수 있습니다.

1
SELECT * FROM TABLE@ALIAS WHER 1=1

참조

Oracle ® Database Administrator’s Guide - Database links

각주

  1. REST(Representational State Transfer)는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식 wikipedia ↩
  2. API(application programming interface 애플리케이션 프로그래밍 인터페이스, 응용 프로그램 프로그래밍 인터페이스)는 컴퓨터나 컴퓨터 프로그램 사이의 연결 wikipedia↩
  3. ODBC(Open DataBase Connectivity)는 마이크로소프트가 만든, 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격 wikipedia↩