이기종 간 데이터를 주고받는 경우 보통의 경우라면 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는 두 개의 데이터베이스 서버 사이의 커넥션을 의미하고 단방향이라고 합니다. 따라서 두 개의 데이터베이스에서 서로 접속할 수 있는 객체를 생성해야 합니다.

이기종 간 연결

이 글에서 ORACLEMS-SQLDB 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 파일을 만들고 아래와 같이 기입 후 저장해주세요. AliasDSN을 만들 때 정의 되었던 별칭입니다!

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