본문 바로가기

DB/Tibero

[Tibero] DB Link 가이드

Tibero DB Link 가이드

JAVA 1.8 이상 설치 하고 진행해야함

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------제1장 DB Link 소개

 

1.1. 개요

DB Link는 현재의 데이터베이스에서 네트워크상의 다른 데이터베이스에 접속하기 위해 접속 설정을 정의하는 객체이다.

 

1.2. DB Link 장, 단점

● 장점

– 분산된 데이터를 다루기 편리하다.

– 데이터베이스에 한번만 접속해도 Link를 통해 다른 데이터베이스에 간편히 접속할 수 있다.

 

● 단점

– Link를 통해 접속된 데이터베이스의 세션과 Lock이 증가할 수 있으므로 실시간 트랜잭션이 많은 시스템에서 장애가 발생할 수 있다.

– 배치작업과 같은 큰 트랜잭션을 DB Link를 통해 직접 작업할 경우 장애 발생 가능성이 증가한다.

– DB 운영자의 경우 데이터베이스간 DB Link에 대해 사용현황 관리가 필요하다.

– 장애가 발생할 경우 개발, 시스템 운영, 네트워크, DB 업무 담당자간 확인이 필요하다.

– Long Type, CLOB, BLOB 타입을 Link를 통해 DML 작업할 경우 오류가 발생할 가능성이 있다.

 

참고 : Link 사용을 지양하며 AP에서 각각 별도로 처리하는 것을 권장한다.

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

제2장 Tibero to Tibero

 

2.1. Tibero to Tibero DB Link 설정

Tibero의 동일한 기종 간에는 특별한 Gateway 모듈 없이 접근이 가능하다. 간단한 설정 방법을 통해 Tibero 간의 DB Link를 생성할 수 있다

 

2.1.1. 제약사항

다음은 Tibero 간의 호환성에 대한 설명이다.

● Source에 해당하는 Tibero에서 Target에 해당하는 Tibero에 연결할 수 없다면 Link 구성을 할 수 없다.

● Tibero 5 버전의 경우 Tibero 3 SP2에 연결할 수 없고 Tibero 4 SP1 또는 Tibero 5에는 연결할 수 있다. 단, 아래와 같은 경우는 연결할 수 없다. 하지만 Target 버전의 리비전 패치 이후에 연결이 가능하다.

– Source 버전이 Tibero 5 r55824 이후 버전이고, Target 버전이 Tibero 5 r55824 이전 버전일 경우

– Source 버전이 Tibero5 r55824 이후 버전이고, Target 버전이 Tibero 4 SP1 r55825 이전 버전일 경우

 

2.1.2. Tibero 클라이언트 설정

접속하려는 Tibero(Tibero_A라고 함)의 IP 주소, 포트 번호, DB NAME 내용을 확인하고, DB Link를 생성 할 Tibero(Tibero_B라고 함)의 네트워크 설정 파일(tbdsn.tbr)에 설정한다. Tibero_A는 설정이 필요없고, Tibero_B가 설치되어 있는 서버의 tbdsn.tbr 파일을 아래와 같이 설정한다.

tibero_a=(
   (INSTANCE=(HOST=192.168.70.185)
             (PORT=8629)
             (DB_NAME=t5)
   )
)

참고

Tibero 4 SP1 이전 버전의 설정 파일은 tbnet_alias.tbr이며, 사용 문법이 다르므로 해당 버전의 매뉴 얼을 참고한다.

 

2.1.3. 대상 서버 연결 확인.

다음과 같이 실행해서 Tibero_B Instance에 tbdsn.tbr 파일의 설정을 확인한다.

$ tbsql sys/tibero@tibero_a

tbSQL 5

Copyright (c) 2008, 2009, 2011, 2012 Tibero Corporation. All rights reserved.

Connected to Tibero using tibero_a.

SQL> select * from v$instance;

INSTANCE_NUMBER INSTANCE_NAME DB_NAME HOST_NAME PARALLEL
--------------- -------------- --------- --------- ----------
HREAD# VERSION STARTUP_TIME STATUS SHUTDOWN_PENDING
---------- -------- ------------- -------- ----------------
0                  t5           t5     tsteam    NO
0        5       2013/04/01 NORMAL       NO

1 row selected.

2.2. DB Link 생성 및 사용

Tibero to Tibero DB Link를 생성할 계정(Tibero_B)으로 접속하여 DB Link 생성 작업을 수행한다.

 

2.2.1. tbsql에 접속하여 DB Link Object 생성

아래와 같은 문법을 사용하여 DB Link Object를 생성한다.

SQL> create database link <DB Link명> connect to <접속 사용자 ID>
identified by <접속 패스워드> 2 using <접속에 사용할 alias>
항목 설명
<DB 링크명> 생성할 DB Link Object 이름이다
<접속 사용자 ID> 대상 DB 서버에 접속할 사용자 이름이다.
<접속 패스워드> 대상 DB 서버에 접속할 패스워드이다.
<접속에 사용할 alias> Source DB의 tbdsn.tbr에 설정된 Alias 이름이다.

다음은 tbsql에 접속하여 DB Link Object 생성에 대한 예이다.

SQL> create database link t5link connect to dbtech identified by 'dbtech'
2 using 'tibero_a';

Database Link 'T5LINK' created.

참고

DB Link를 생성하기 위해서는 CREATE DATABASE LINK 또는 CREATE PUBLIC DATABASE LINK 권한이 필요하다.

 

2.2.2. SQL 실행

생성이 완료되면 아래와 같이 <@Link명>을 붙여 사용한다.

SQL> select * from dual@t5link;

DUMMY
-----
X

1 row selected.

사용 중인 Link의 이름으로 알 수 없는 경우 다음과 같이 View를 조회한다.

SQL> select * from user_db_links;

OWNER DB_LINK USERNAME HOST CREATED
----------- ----------- ----------- ----------- -----------
TIBERO T5LINK DBTECH tibero_a 2013/04/01

1 row selected.

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

제3장 Tibero to Oracle

본 장에서는 Tibero에서 DB Link Object를 만들어 Oracle의 데이터를 가져오는 방법을 설명한다.

 

3.1. 개요

DB Link를 통해 질의를 수행할 때 DB Link 대상이 Tibero가 아닌 다른 DBMS라면 각각의 DBMS를 위한 Gateway를 통해 DB Link를 생성하거나 수행할 수 있다.

 

3.1.1. Gateway

Tibero 서버는 다른 DBMS에 필요한 질의를 해당 Gateway에 전달하고, Gateway는 다른 DBMS에 접속하여 Tibero 서버로부터 전달 받은 질의를 수행한 후 결과를 Tibero 서버로 전송한다. 다른 DBMS의 DB Link 기능을 사용하려는 경우 해당 DBMS에 대한 Gateway 바이너리와 환경설정 파일이 필요하다.

3.1.2. Gateway 디렉터리 구조

Gateway는 기본적으로 TBGW_HOME 환경변수를 통해 설정 파일을 읽고 로그 파일을 기록한다.

 

TBGW_HOME 환경변수가 설정되어 있지 않은 경우 디폴트 값은 '$TB_HOME/client/gateway'이며 Windows 환경에서는 '%TB_HOME%\client\gateway'로 설정된다.

 

Gateway가 사용하는 설정 파일과 로그 파일이 존재하는 디렉터리 구조는 다음과 같다.

다음은 디렉터리와 파일의 설명이다.

<DBMS Vender명>/config

Gateway 설정 파일이 생성되는 위치이다.

 

다음은 해당 디렉터리에 있는 파일의 설명이다.

파일 설명
tbgw.cfg Gateway 설정 파일로 사용자가 Gateway와 관련된 설정값을 변경하는 경우 생성한다.

<DBMS Vender명>/log

Gateway와 관련된 로그 파일이 생성되는 위치이다.

 

3.1.3. 확인사항

 

Tibero to Oracle DB Link를 구성하는 경우 다음의 사항을 확인한다.

● 기본 바이너리 위치

– Gateway for Oracle 바이너리 파일은 Tibero 버전 및 OS에 따라 위치 및 파일명이 다르다.

Tibero 버전 OS 위치 및 파일명
Tibero 4 SP1 및 이전 버전 UNIX 계열 $TB_HOME/client/bin/gw4orcl
Windows 계열 %TB_HOME%\client\bin\gw4orcl.exe
Tibero 5 이상 UNIX 계열 $TB_HOME/client/bin/gw4orc
Windows 계열 %TB_HOME%\bin\gw4orcl.exe

– 내부적으로 Oracle 클라이언트 라이브러리를 사용하며 Windows 계열 바이너리는 Oracle 9i, 10g, 11g 모두 호환이 가능하다.

– UNIX 계열 바이너리는 Oracle 10g 라이브러리에 맞추어져 있으며, Oracle 9i 또는 11g 라이브러리를 이용할 경우 (주)TmaxData 기술지원팀 또는 QM 팀에 해당 버전용 바이너리를 요청한다.

 

● Oracle 클라이언트 라이브러리

– Gateway for Oracle인 경우 내부적으로 Oracle 클라이언트 라이브러리를 사용하여 Oracle에 접속한 다. (Oracle 서버 바이너리 안에 있는 라이브러리, Instant 클라이언트 라이브러리도 가능)

– Gateway가 설치된 곳에 Oracle 클라이언트 라이브러리가 존재해야 한다.

– Oracle 클라이언트 라이브러리가 Oracle 서버에 연결되지 않는다면 DB Link 역시 연결될 수 없다.

 

3.1.4. 제약사항

● LONG RAW, NCLOB을 지원하지 않는다.

● LOB, LONG의 경우 아래와 같은 형태를 일부 지원한다.

– insert into (local) ~ select from (dblink)

– insert into (dblink) ~ select from (local)

● Multi Threaded Agent를 지원하지 않는다. 단, Windows 환경에서 Listener 방식을 사용하는 경우에는 Multi Threaded Agent를 지원한다.

● DB Link를 통한 UDF(User Defined Function) 사용은 PSM(=PL/SQL) 내부에서 가능하다.

– Select 절에 직접적으로 DB Link를 통한 UDF 사용은 지원하지 않는다.

– PSM(=PL/SQL) 내부에서 DB Link UDF를 사용하고 해당 PSM을 Select 절에서 간접 사용하는 구조는 가능하다.

 

3.2. Gateway for Oracle 설정

본 절에서는 Gateway for Oracle의 구성 방식과 설정 방법에 대해서 설명한다.

 

Gateway for Oracle은 다음의 방식으로 구성한다.

● Local 방식

Gateway를 미리 기동하지 않고 DB Link를 사용할 경우 Gateway 프로세스가 기동되는 방식으로, Tibero 서버와 Gateway for Oracle이 동일 서버에 존재할 경우에 Local 방식으로 구성이 가능하다.

● Listener 방식

Gateway를 미리 기동해서 Listening하는 방식으로 모든 경우에 설정이 가능하다.

 

참고

Local 방식은 UNIX 계열에만 해당하며 Windows 계열은 Listener 방식으로 구성한다.

 

3.2.1. Gateway 설정(UNIX 계열)

Local 또는 Listener 방식 중 하나의 방식을 선택하여 설정한다. 설정이 다른 경우 개별적으로 설명하며 동일할 경우는 구분하지 않고 제목에 '공통'이라는 문구를 사용한다.

 

다음은 UNIX 계열에서 Gateway를 설정하는 과정이다.

1. profile 설정(공통)

2. Oracle 라이브러리 관련 권한 변경(공통)

3. Gateway 바이너리 복사(공통)

4. Network Alias 설정

5. Gateway 환경설정(공통)

6. DB Link 생성 및 확인

 

각 과정에 대한 상세한 설명은 해당 절의 내용을 참고한다.

1. profile 설정(공통)

Gateway for Oracle이 기동되는 사용자의 OS 환경 파일(.profile, .bash_profile 등)에 다음과 같이 환경변수를 설정한다.

● 설정 방법

export TBGW_HOME=$TB_HOME/client/gateway
export ORACLE_HOME=<Oracle Home>
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export ORACLE_SID=<Oracle SID>
export PATH=$ORACLE_HOME/bin:$PATH

● 설정 예

# Gateway for Oracle 11g
export TBGW_HOME=/home/tibero/gateway
export ORACLE_HOME=/home/ora11/app/oracle/product/11.2.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH

주의

1. Local 방식의 경우 Tibero 서버가 기동하기 전에 위 환경변수 설정을 가지고 기동이 되어야 한다. 만약, 환경변수 설정 및 Local 방식을 새롭게 구성한다면 Tibero 서버 재기동이 필요하며 재기동이 힘들다면 Listener 방식을 고려한다.

2. OS에 맞게 환경변수 LD_LIBRARY_PATH(Linux), LIBPATH(AIX), SHLIB_PATH(HP)를 설정한다.

3. TBGW_HOME은 Tibero 바이너리 폴더 밖으로 설정할 것을 권장한다.

(예 : $TB_HOME=/home/tibero/tibero5, $TBGW_HOME=/home/tibero/gateway)

 

2. Oracle 라이브러리 관련 권한 변경(공통)

Oracle 라이브러리를 설치한 사용자 또는 root 계정에서 다음과 같이 권한을 부여한다.

chmod o+rx $HOME
chmod o+rx $ORACLE_HOME
chmod o+rx $ORACLE_HOME/lib
chmod o+r $ORACLE_HOME/lib/*

chmod o+rx $ORACLE_HOME/bin
chmod o+rx $ORACLE_HOME/bin/sqlplus
chmod o+x $ORACLE_HOME/network
chmod o+x $ORACLE_HOME/network/admin
chmod o+r $ORACLE_HOME/network/admin/tnsnames.ora

3. Gateway 바이너리 복사(공통)

지정된 경로에 바이너리 복사를 수행한다.

● 설정 방법

$ mkdir $TBGW_HOME
$ cp <Gateway Binary명> $TBGW_HOME/gw4orcl
$ chmod u+x $TBGW_HOME/gw4orcl

● 설정 예

$ mkdir $TBGW_HOME
$ cp $TB_HOME/client/bin/gw4orcl $TBGW_HOME/gw4orcl
$ chmod u+x $TBGW_HOME/gw4orcl

주의

profile 설정과 라이브러리 권한을 설정한 후 ldd gw4orcl를 수행했을 때 Oracle 라이브러리에 대해 서 not found 부분이 없어야 한다

 

4. Network Alias 설정

Tibero 클라이언트의 Network Alias 설정 파일에 Gateway 정보를 설정한다.

Network Alias 설정 파일명은 Tibero 버전에 따라 각각 다음과 같다.

– Tibero 4 SP1 이후 : $TB_HOME/client/config/tbdsn.tbr

– Tibero 4 이전 : $TB_HOME/client/config/tbnet_alias.tbr

 

다음은 각 구성 방식별 설정 방법이다.

● Local 방식

– tbdsn.tbr 설정 방법

<Gateway Alias명>=(
  (GATEWAY=
    (PROGRAM=<Gateway Binary 경로 및 파일명>)
    (TARGET=<tnsnames.ora에 설정된 Alias>)
    (TX_MODE={GLOBAL | LOCAL})
  )
)
항목 설명
PROGRAM Gateway 바이너리(gw4orcl)의 경로를 반드시 절대 경로로 입력한다.
TARGET Oracle 클라이언트의 tnsnames.ora에 설정한 Alias 이름으로 대소문자 수준까지 일치해야 하며, 단위 테스트로 sqlplus를 이용해 해당 Alias로 접속이 되는지 확인 한다.
TX_MODE 처리 방식을 글로벌 트랜잭션(Global Transaction)과 로컬 트랜잭션(Local Trans action) 중에서 설정한다. Commit을 요청할 경우 글로벌 트랜잭션만 Two-phase Commit으로 동작한다.

TX_MODE의 값은 처리 여부에 따라 다음과 같이 설정할 수 있다.
– GLOBAL : 글로벌 트랜잭션인 경우 설정값이다.
– LOCAL : 로컬 트랜잭션인 경우 설정값이다.

– tbdsn.tbr 설정 예

gw_local=(
  (GATEWAY=
     (PROGRAM=/home/tibero/gateway/gw4orcl)
     (TARGET=orcl)
     (TX_MODE=GLOBAL)
  )
)

– tbnet_alias.tbr 설정 방법

<Gateway Alias명>=(
  IP=localhost
  DB_NAME=<tnsnames.ora에 설정된 Alias>
  GW=LOCAL:<Gateway Binary 경로 및 파일명>
)
항목 설명
IP Gateway가 존재하는 IP 주소이다.
DB_NAME Oracle 클라이언트의 tnsnames.ora에 설정한 Alias 이름으로 대소문자 수준까지 일치해야 하며, 단위 테스트로 sqlplus를 이용해 해당 Alias로 접속이 되는지 확인 한다.
GW 트랜잭션 모드 및 Gateway 바이너리(gw4orcl)의 경로를 반드시 절대 경로로 입력 한다.

– tbnet_alias.tbr 설정 예

gw_local=(
  IP=localhost
  DB_NAME=orcl
  GW=LOCAL:/home/tibero/gateway/gw4orcl
)

● Listener 방식

– tbdsn.tbr 설정 방법

<Gateway Alias명>=(
        (GATEWAY=
                (LISTENER=
                        (HOST=<Gateway IP>)
                        (PORT=<Gateway PORT>)
                )
                (TARGET=<tnsnames.ora에 설정된 Alias>)
                (TX_MODE= {GLOBAL | LOCAL })
        )
)
항목 설명
LISTENER Listener가 기동되어 있는 서버에 대한 정보를 입력한다.
– HOST : Gateway가 기동되어 있는 서버 IP 주소이다.
– PORT : Gateway가 Listening 하는 포트 번호이다. (기본값 : 9999)
TARGET Oracle 클라이언트의 tnsnames.ora에 설정한 Alias 이름으로 대소문자 수준까지 일치해야 하며, 단위 테스트로 sqlplus를 이용해 해당 Alias로 접속이 되는지 확인 한다.
TX_MODE 처리 방식을 글로벌 트랜잭션(Global Transaction)과 로컬 트랜잭션(Local Trans action) 중에서 설정한다. Commit을 요청할 경우 글로벌 트랜잭션만 Two-phase Commit으로 동작한다.

TX_MODE 값은 처리 여부에 따라 다음과 같이 설정할 수 있다.
– GLOBAL : 글로벌 트랜잭션인 경우 설정값이다.
– LOCAL : 로컬 트랜잭션인 경우 설정값이다.

– tbdsn.tbr 설정 예

gw_listen=(
        (GATEWAY=
                (LISTENER=
                         (HOST=192.168.70.185)
                         (PORT=9999)
                )
                (TARGET=orcl)
                (TX_MODE=GLOBAL)
        )
)

- tbnet_alias.tbr 설정 방법

<Gateway Alias명>=(
  IP=<Gateway IP>
  PORT=<Gateway Port>
  DB_NAME=<tnsnames.ora에 설정된 alias>
  GW=INET
)
항목 설명
IP Gateway가 기동되어 있는 서버 IP 주소이다.
PORT Gateway가 Listening 하는 포트 번호이다. (기본값 : 9999)
DB_NAME Oracle 클라이언트의 tnsnames.ora에 설정한 Alias 이름으로 대소문자 수준까지 일치해야 하며, 단위 테스트로 sqlplus를 이용해 해당 Alias로 접속이 되는지 확인 한다.
GW INET으로 설정한다.

– tbnet_alias.tbr 설정 예

gw_orcl=(
  IP=192.168.70.185
  PORT=9999
  DB_NAME=orcl
  GW=INET
)

5. Gateway 환경설정(공통)

tbgw.cfg 파일에 초기화 파라미터의 설정값을 명시함으로써 Gateway와 관련된 설정을 변경할 수 있다. Gateway를 설치한 서버에서 $TBGW_HOME/oracle/config/tbgw.cfg 파일을 설정한다.

● 설정 방법

LISTENER_PORT = <port-no>
LOG_DIR = <log-dir>
LOG_LVL = <log_lvl>
MAX_LOG_SIZE = <max-log-size>
MAX_LOG_BAKCUP_SIZE = <max-log-backup-size>
FETCH_SIZE = <fetch-size>
SKIP_CHAR_CONV = <skip-char-conv>
항목 설명
LISTENER_PORT Listening 포트 번호로 로컬방식의 경우 필요하지 않다. (기본값 : 9999)
LOG_DIR 로그가 생성될 디렉터리이다. (기본값 :$TBGW_HOME/$VENDER/log)
LOG_LVL 로그레벨을 설정한다. (기본값 : 2)
0-6 까지 설정 가능하며 높을수록 많은 로그를 생성한다.
– 운영인 경우 : 1 또는 2를 설정한다.
– 문제 대응인 경우 : 5 또는 6을 설정한다.
MAX_LOG_SIZE 로그 파일의 최대 크기를 설정한다. (단위 : Byte)
MAX_LOG_BAKCUP_SIZE 백업 폴더의 최대 크기를 설정한다.
백업 폴더의 크기가 MAX_LOG_BACKUP_SIZE보다 커지면 오래된 파 일 순으로 약 1/3 가량의 백업 파일이 삭제된다.

백업이 이루어지는 시점은 2가지 경우가 있다.
– 로그를 쓰려 할 때 쓰고 있던 로그 파일 크기가 MAX_LOG_SIZE보다 크다는 것이 감지될 때
– 로그 파일을 쓰던 세션이 종료될 때
FETCH_SIZE fetch일 경우 사용하는 사이즈로 최대 64KB이다. (기본값 : 32K)
대용량 fetch일 경우 설정값을 높이면 네트워크 부하를 줄일 수 있다.
SKIP_CHAR_CONV 일반적으로 해당 설정은 필요하지 않으며 특수한 상황(US7ASCII 캐릭터 셋에 한글이 들어있는 경우)에만 적용한다.

– Y : Gateway가 Oracle로부터 데이터를 받아올 때 환경변수 NLS_LANG 을 사용하고 전달받은 데이터를 그대로 Tibero 서버에 보낸다.
– N : Tibero에서 사용하는 캐릭터 셋에 맞추어 Oracle 서버에 데이터 요청을 한다. 이럴경우 Oracle에서 해당 캐릭터 셋에 맞게 처리하여 Gateway로 데이터를 보낸다. (기본값)

● 설정 예

LISTENER_PORT=9999
LOG_DIR=/home/tibero/gateway/oracle/log
LOG_LVL=2
MAX_LOG_SIZE=502400000

6. DB Link 생성 및 확인

DB Link 생성 방법은 Local과 Listener 방식이 동일하다. 단, Listener 방식은 먼저 Gateway 프로세스의 기 동이 필요하다.

 

Listener 방식에서 Gateway 프로세스의 기동 방법은 다음과 같다. Windows 계열은 [시작] > [제어판] > [관리도구] > [서비스]에서 Gateway 서비스를 시작한다.

$ ./gw4orcl

다음은 지정 포트 번호가 9999일 경우 Listening 포트 번호를 확인하는 예제이다.

$ netstat -na| grep 9999
tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN

다음은 Local과 Listener 방식에서 DB Link 생성과 확인 방법에 대한 설명이다.

● DB Link 생성 방법

create database link <DB Link명> connect to <user명> identified by '<password>'
using '<Network Alias명>';

Link를 생성할 경우 권한 에러가 발생하면 아래와 같은 권한을 부여한다.

GRANT CREATE DATABASE LINK TO USER_NAME;
GRANT CREATE PUBLIC DATABASE LINK TO USER_NAME;

● DB Link 생성 예

SQL> create database link olink connect to scott identified by 'tiger'
using 'gw_local';

Database Link 'OLINK' created.

● DB Link 생성 확인 예

DB Link 생성을 확인할 때 select 문을 'Table명@'으로 설정하면 DB Link를 사용할 수 있다.

SQL> select * from dual@olink;

DUMMY
-----
X

1 row selected.

******************************************************************************************************************************************

3.2.2. Gateway 설정(Windows 계열)

Windows 계열은 Listener 방식으로만 구성 가능하며, 본 절에서는 UNIX 계열과 다른 내용만 언급한다. Gateway 바이너리의 경우 UNIX 계열과 달리 Oracle 버전에 따라 구분되지 않으며 9i, 10g, 11g 모두 공통 바이너리로 사용 가능하다.

 

다음은 Windows 계열에서 Gateway를 설정하는 과정이다.

1. Windows 환경변수 설정

2. Gateway 바이너리 복사 및 서비스 등록

3. Gateway 실행

4. Network Alias 설정(UNIX 계열의 Listener 방식 참고)

5. Gateway 환경설정(UNIX 계열 참고)

6. DB Link 생성 및 확인(UNIX 계열 참고)

 

각 과정에 대한 상세한 설명은 해당 절의 내용을 참고한다.

 

1. Windows 환경변수 설정

1. [내컴퓨터]에서 오른쪽 마우스 버튼을 클릭한 뒤 [속성] > [고급] > [환경변수]를 선택한다.

2. [시스템 변수]에 Gateway를 설정한다.

 

● 설정 방법

TBGW_HOME = <Gateway Binary 경로>

● 설정 예

TBGW_HOME = C:\tibero\gateway

2. Gateway 바이너리 복사 및 서비스 등록

1. Gateway 바이너리를 위에서 설정한 '%TBGW_HOME%' 경로에 'gw4orcl.exe' 이름으로 저장한다.

2. 명령 프롬프트(Windows [시작] > [실행]에 cmd.exe를 입력)를 실행한다.

3. sc create 명령을 실행한다. 만약, Windows 7의 경우 관리자 권한으로 실행한다

● 설정 방법

sc create <서비스 이름> binPath= %TBGW_HOME%\gw4orcl.exe

.● 설정 예

sc create tibero_gw binPath= C:\tibero\gateway\gw4orcl.exe

4. [시작] > [제어판] > [관리도구] > [서비스]에 위에서 설정한 <서비스 이름>이 있는지 확인한다.

 

참고

1. 'binPath=' 다음에 공백이 들어가는 것에 주의한다.

2. 서비스 등록 취소를 할 경우 sc delete <서비스 이름> 명령어를 수행한다.

 

3. Gateway 실행

다음은 Gateway를 실행하는 과정에 대한 설명이다.

1. [시작] > [제어판] > [관리도구] > [서비스]에서 등록한 <서비스 이름>을 선택한다.

2. 오른쪽 마우스 버튼을 클릭하여 컨텍스트 메뉴에 [시작]을 선택한다.

3. 오른쪽 마우스 버튼을 클릭하여 [속성] > [시작유형]을 '자동'으로 선택한 후 [확인] 버튼을 클릭한다. 만약 자동으로 하지 않는다면 수동으로 시작해야 한다.

4. 설정 후 '상태" 항목이 '시작됨'으로 '시작유형' 항목이 '자동'으로 되어있는지 확인한다.

 

참고

Windows 서버를 재부팅할 경우 등록된 Gateway 서비스를 시작하지 않으면 DB Link가 정상 동작하지 않는다.

******************************************************************************************************************************************

3.3. Oracle 클라이언트

본 절에서는 Oracle 서버와 클라이언트 호환성 확인과 Instant 클라이언트 설정 방법에 대해서 설명한다.

 

3.3.1. 호환성 확인

Tibero to Oracle DB Link의 경우 Gateway가 내부적으로 Oracle 클라이언트를 사용하므로 Oracle 클라이언트와 서버가 호환되지 않으면 DB Link를 연결할 수 없다.

 

아래의 호환성 도표를 참고하여 연결 가능 여부를 확인한다.

3.3.2. Instant 클라이언트 설정

Gateway for Oracle의 경우 내부적으로 Oracle 클라이언트 라이브러리 또는 서버 라이브러리를 이용하여 Oracle에 연결한다. Oracle 클라이언트 또는 서버를 설치하기가 어려운 경우 Instant 클라이언트를 이용한 DB Link 설정이 가능하다.

 

다음은 Oracle Instant 클라이언트를 설정하는 과정에 대한 설명이다.

1. Instant 클라이언트 다운로드 및 압축 해제

2. profile 설정

3. tnsnames.ora 생성 및 설정

4. Network Alias 설정(UNIX 계열 참고)

5. Gateway 환경설정(UNIX 계열 참고)

6. DB Link 생성 및 확인(UNIX 계열 참고) 각 과정에 대한 상세한 설명은 해당 절의 내용을 참고한다.

 

각 과정에 대한 상세한 설명은 해당 절의 내용을 참고한다.

 

1. Instant 클라이언트 다운로드 및 압축 해제

Oracle 홈페이지 접속한 후 Gateway가 설치된 서버의 OS와 bit에 맞는 Instant 클라이언트를 다운로드하 여 압축을 해제한다.

다음은 Linux 버전의 실행 결과이다.

$ unzip instantclient-basic-linux.x64-11.2.0.3.0.zip

Archive: instantclient-basic-linux.x64-11.2.0.3.0.zip
inflating: instantclient_11_2/BASIC_README
inflating: instantclient_11_2/adrci
inflating: instantclient_11_2/genezi
inflating: instantclient_11_2/libclntsh.so.11.1
inflating: instantclient_11_2/libnnz11.so
inflating: instantclient_11_2/libocci.so.11.1
inflating: instantclient_11_2/libociei.so
inflating: instantclient_11_2/libocijdbc11.so
inflating: instantclient_11_2/ojdbc5.jar
inflating: instantclient_11_2/ojdbc6.jar
inflating: instantclient_11_2/uidrvci
inflating: instantclient_11_2/xstreams.jar

2. profile 설정

다음은 profile 설정 예이다. TNS_ADMIN의 경우 tnsnames.ora 파일의 위치를 설정한다.

# Instanct client

export TBGW_HOME=/home/tibero/gateway
export ORACLE_HOME=/home/tibero/oracle/instantclient_11_2
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=.:$ORACLE_HOME:$PATH
export TNS_ADMIN=$ORACLE_HOME

주의

1. LD_LIBRARY_PATH 설정에 해당 경로의 모든 라이브러리가 존재하므로 $ORACLE_HOME의 설정에 주의한다.

 

2. OS에 맞게 환경변수 LD_LIBRARY_PATH(Linux), LIBPATH(AIX), SHLIB_PATH(HP)를 설정한다.

 

3. profile 설정 후 ldd gw4orcl를 수행했을 때 Oracle 라이브러리에 대해서 not found 부분이 없어 야 한다.

 

3. tnsnames.ora 생성 및 설정

$TNS_ADMIN으로 설정된 경로에 tnsnames.ora 파일을 생성한다.

 

● 설정 방법

$ cd $TNS_ADMIN
$ vi tnsnames.ora

<Alias명> =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <Oracle 서버 접속 IP>)
    (PORT = <Oracle 서버 접속 Port>))
    (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = <Oracle 서버의 SID>)
    )
  )
항목 설명
<Alias명> tbdsn.tbr 설정의 TARGET 부분과 대소문자 수준까지 일치해야한다.
ADDRESS 대상 Oracle에 대한 접속 정보를 설정한다.

– PROTOCOL : 프로토콜을 설정한다.
– HOST : 대상 Oracle 서버의 접속 IP 주소 정보이다.
– PORT : 대상 Oracle 서버의 접속 포트 번호 정보이다.
CONNECT_DATA 대상 Oracle 서버의 연결 방식 및 SID를 설정한다.

– SERVER : 서버의 연결 방식이다.
– SERVICE_NAME : 대상 Oracle 서버의 SID이다.

● 설정 예

다음은 Oracle 11g에 해당하는 설정으로 각 Oracle 버전마다 문법이 일부 달라질 수 있다. 만약 $TNS_ADMIN으로 경로를 설정하지 않았다면 기본 경로는 "$ORACLE_HOME/network/admin" 이다.

$ cd $TNS_ADMIN
$ vi tnsnames.ora

ORCL =
   (DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.70.158)(PORT = 1521))
     (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl)
     )
   )

******************************************************************************************************************************************

3.4. 문제 해결

본 절에서는 Tibero to Oracle DB Link 설정 후 발생할 수 있는 문제와 해결 방법에 대해서 설명한다.

 

3.4.1. 데이터 조회

 

글자 깨짐 현상

DB Link를 통하여 Oracle의 데이터를 조회할 때 글자가 깨지는 현상이 발생한다.

다음은 글자 깨짐 현상이 발생할 때 확인해야 할 항목을 나타내는 그림으로 상황에 맞게 각 항목의 적절한 설정이 필요하다.

● 클라이어언트 환경(①)

– 터미널창으로 접속하여 tbsql을 통해 확인할 경우

OS 언어 설정(LANG, LC_ALL 등), 접속하는 SSH 또는 텔넷의 언어 설정, TB_NLS_LANG 환경변수 값을 확인한다.

– 클라이언트 Tool을 사용하여 확인할 경우

구분 설명
tbAdmin을 사용할 경우 접속할 때 지정하는 캐릭터 셋 설정 확인이 필요하다. 만약, 미지정의 경우 접 속하는 Tibero 서버의 캐릭터 셋으로 설정된다.
ODBC를 사용할 경우(Orange For Tibero 등) TB_NLS_LANG 환경변수 값을 확인한다.

● Tibero 캐릭터 셋(②)

Oracle 캐릭터 셋이 Tibero에서 호환이 되는 캐릭터 셋인지 확인한다. 예를 들어 Tibero의 캐릭터 셋이 MSWIN949(한글), Oracle 캐릭터 셋이 JA16SJIS(일본어)일 경우 호환되지 않는다.

 

● Gateway(③)

Gateway는 Oracle에서 Tibero로 데이터를 가지고 올 때 아래와 같은 2개의 환경변수의 영향을 받는다.

환경변수 설명
TB_NLS_LANG Gateway에서 Tibero로 접속할 때 영향을 받는다.
NLS_LANG Gateway에서 Oracle로 접속할 때 영향을 받는다

참고

TB_NLS_LANG의 기본값은 MSWIN949(한글)이므로 Tibero의 환경이 한글이 아닌 다른 환경일 경 우 TB_NLS_LANG 설정을 고려한다.

 

● Oracle(④)

Oracle 자체에서 깨진 글자가 아닌지 확인한다.

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

제4장 Oracle to Tibero

본 장에서는 Oracle에서 DB Link Object를 만들어 Tibero의 데이터를 가져오는 DB Link 생성을 설명한다.

 

4.1. 개요

Oracle에서는 이(異)기종 분산 데이터베이스 환경에서 Non-Oracle 시스템 데이터에 접근하기 위해 Het erogeneous Services(HS)와 Database Gateway(DG) 모듈을 지원하고 있으며, 해당 모듈과 타 DB의 Generic ODBC Driver 연동작업을 통해 DB Link를 생성할 수 있다.

 

[그림 4.1] Oracle to Tibero 구조도

4.1.1. Oracle Gateway

Oracle 버전에 따라 사용하는 Gateway가 다르며 Oracle to Tibero의 경우 Oracle에서 제공하는 Gateway 를 이용한다.

분류 설명
HSODBC Oracle 10g에서 사용한다. Oracle 10g 클라이언트 바이너리에는 존재하지 않으며 Oracle 10g 서버 바이너리에만 존재한다.
DG4ODBC Oracle 11g에서 사용한다. Oracle 11g 클라이언트 바이너리에는 존재하지 않으며 Oracle 11g Gateway 바이너리 또는 11g 서버 바이너리에 존재한다.

참고

여러개의 Oracle Database Gateway를 설치할 경우 제품 구성요소를 Oracle Database Gateway for ODBC로 선택한다.

 

제약사항

다음은 Oracle에서 제공하는 Gateway인 HSODBC와 DG4ODBC의 제약사항이다.

● Database Gateway for ODBC Limitations

– BLOB/CLOB data cannot be read through pass-through queries.

– Updates or deletes that include unsupported functions within a WHEREclause are not allowed.

– Stored procedures are not supported.

– Cannot participate in distributed transactions

– they support single-sitetransactions only.Gateways are an integral component of the overall hetero geneous connectivity solution. Specifically, they provide: SQL and Data Dictionary Translation infor mation

– Datatype Translation

– Callback link is not supported.

 

참고

위 내용은 Oracle에 대한 제약 사항으로 Tibero 제약사항은 아니다. 내용의 자세한 설명은 Oracle 홈페이지(http://www.oracle.com)를 참고한다.

 

4.1.2. DB Link 연결방식

연결방식은 OS에 따라 다르다.

분류 설명
UNIX 계열 아래 2가지 방법이 가능하다.
– HSODBC(10g) 또는 DG4ODBC(11g)에서 Tibero ODBC Driver 직접 연결 방식의 경우 별도의 Manager의 설치가 필요하지 않다.
– Driver Manager 사용 연결방식 또는 iodbc, unixodbc 사용의 경우 별도의 Manager의 설치가 필요하다.
Windows 계열 데이터 원본 관리자를 이용하여 연결한다. (Windows가 설치된 경우 기본으 로 설치되어 있다)

참고

1. Tibero ODBC Driver 직접 연결방식은 Tibero 4 r51830 이후부터 가능하나 Tibero 5 r71828 이전 까지 컬럼 타입 중 DATE, TIME, TIMESTAMP의 제약이 존재한다. 자세한 내용은 “4.4. 문제 해결”를 참고한다.

2. Tibero 3 SP2 또는 4 이전 버전의 경우 Driver Manager 사용방식으로 구성해야 한다.

 

4.2. DB Link 설정

Tibero ODBC Driver 직접 연결방식의 경우 Oracle to Tibero 호출 흐름은 다음과 같다. Oracle 서버와 Gateway 서버가 분리될 경우 다음의 설정으로 수행되지만 분리되지 않는다면 모든 설정을 Oracle 서버에 서 한다.

 

[그림 4.2] Oracle to Tibero 호출 흐름

 

 

 

제 5장 Tibero to MS-SQL DBLink

1. MS-SQL DBLink 개요

Tibero RDBMS에서 제공하는 DBLink기능은 원격 MS-SQL 서버의 Table 조회 및 입력, 수정, 삭제 등의 작업을 가능하게 한다. MS-SQL DBLink는 Java Gateway를 통해 연결되며 아래와 같은 루트를 거쳐 사용자가 요청한 쿼리결과를 출력한다.

2. Java Gateway 설치 및 설정

 

2.1. Java Gateway 설치

Java Gateway 파일위치: $TB_HOME/client/bin/tbJavaGW.zip

 

1) Java Gateway

압축해제 Java Gateway를 원하는 디렉토리에 복사 후 압축을 해제한다.

압축해제 시, tbJavaGW 디렉토리가 생성되며 디렉토리 내 파일은 다음과 같다.

2) Sql Server의 JDBC관련 jar 파일(sqljdbc.jar) 다운로드

https://learn.microsoft.com/ko-kr/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-linux-2017 

 

다운로드 - JDBC Driver for SQL Server

Microsoft JDBC Driver for SQL Server를 다운로드하여 SQL Server 및 Azure SQL Database에 연결하는 Java 애플리케이션을 개발합니다.

learn.microsoft.com

tbJavaGW/lib경로 아래에 복사

3) tbgw파일 권한 부여

chown -R tibero:dba /tibero_*

[tbgw.cfg 파일 내용]

# 대상 DB명 DATABASE=tbTest
# listener port LISTENER_PORT=9093
# 초기 thread pool size INIT_POOL_SIZE=10
# 최대 thread pool size MAX_POOL_SIZE=1000
# 게이트웨이 인코딩
# ASCII, EUC-KR, MSWIN949, UTF-8, UTF-16, SHIFT-JIS
ENCODING=MSWIN949
# max length for Types.LONGVARCHAR MAX_LONGVARCHAR=4K
# max length for Types.LONGRAW MAX_LONGRAW=4K
# 게이트웨이 로그 파일 경로 LOG_DIR=($TB_HOME)/client/bin/tbJavaGW/log
# 게이트웨이 로그레벨 LOG_LVL=2
# 최대 로그파일 크기 (0이면 무제한) MAX_LOG_SIZE=0
# 최대 로그파일 개수 MAX_LOG_CNT=0
# 쿼리 시 한 번에 Fetch해오는 데이터의 크기(최대 64K) FETCH_SIZE=32K

4) Java Gateway 실행

- . tbgw 명령을 통해서 자바게이트웨이를 시작한다.

- 이 후 자바게이트웨이가 정상적으로 실행되었는지 확인한다.

참고)

자바게이트웨이 실행 시 log폴더가 함께 생성된다. 장애발생 시 자바게이트웨이 log 를 통해 장애 원인을 분석할 수 있다.

 

5) Java Gateway 설치완료 (참고: Java gateway 사용 전, 부록에 첨부된 MSSQL서버 사전접속테스트를 권장한다.)

 

2.2. tbnet_alias.tbr 설정

DB Link를 생성하기 위한 MSSQL 접속정보를 tbnet_alias.tbr파일에 설정한다.

 

1) $TB_HOME/client/config/tbdsn.tbr 파일을 열어 아래와 같이 내용 추가

# MSSQL DB 링크 추가내용
msgate=(
	(GATEWAY=(LISTENER=(HOST=localhost)(PORT=9093))
			 (TARGET=MSSQLSERVER) 
			 (TX_MODE=LOCAL)
    )
)

[설정내용 설명]

(1) 자바게이트웨이의 IP, PORT, DB_NAME, TX_MODE를 설정한다.

(2) DB_NAME의 경우, 실제 연결을 맺을 SQL server의 IP, PORT, DB명을 명시한다.

(3) GW_TX_MODE의 경우, LOCAL과 GLOBAL을 명시할 수 있으며, GLOBAL이 기본 값이다.

- GLOBAL일 경우, 2 Phase Commit형태

- LOCAL의 경우, Local Commit형태

(4) TX_MODE 를 GLOBAL모드로 설정할 경우

- MSSQL서버의 DTC(분산 트랜잭션)서비스가 가능한지 우선 확인해야한다.

 

3. MS-SQL DBLink 생성 및 사용

 

3.1. MS-SQL DBLink 생성

1) Gateway를 통해 직접 MS-SQL로 접속되는지 확인

- Gateway가 준비 완료되면, DBLink 생성 전 tbSQL을 통해 정상 실행여부가 확 인 가능하다.

- MS-SQL계정에 접속하여 select 등의 DML작업을 짂행할 수 있다.

tbsql TEST01/tibero@msgate