본문 바로가기
Oracle/이관

Oracle Gateway를 활용한 Oracle -> Tibero DB LINK

by 취미툰 2020. 12. 28.
반응형

해당방법은 Oracle에서 Non-Oracle로 DBLINK를 생성할 수 있는 방법입니다.

Source DB와 Target DB는 동일 서버에 설치된 Oracle과 Tibero를 기준으로 테스트 후 작성하였습니다.

방법은 티베로가 가동중인 유저에 Oracle gateway 설치 후 설정하여 DBLINK를 사용하는 방법입니다.

 

#########################

Source DB 정보

IP : 192.168.56.58

Oracle SID : XE

 

Target DB 정보

IP : 192.68.56.58

TIBERO SID : tibero

#########################

 

 

1. tibero 유저의 profile에 Oracle gateway 환경설정 추가

 

$vi .bash_profile

 

##Oracle to Tibero env
export ORACLE_HOME=/home/tibero/oracle/app #oracle install directory
export PATH=$PATH:$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export DISPLAY=127.0.0.1:0.0

 

 

2.Oracle gateway 설치(11gR2)

현재 Oracle 사이트에서는 19c버전 파일들만 존재하고, 11gR2버전은 구할 수 없더라구요. 저는 제가 가지고 있는 gateway파일로 진행했습니다.

 

$linux.x64_11gR2_gateways.zip

...생략

 

 

$cd gateways

$./runInstaller

 

 

1) 시작화면입니다. NEXT를 클릭합니다.

NEXT 클릭

 

2 inventory 디렉토리와 OS group 확인 창입니다. 확인 후 NEXT를 클릭합니다.(저는 수정없이 NEXT 진행하였습니다)

Orainventory 디렉토리 확인 및 OS group 확인 후 NEXT

 

3) Oracle HOME 경로 확인후 NEXT를 클릭합니다.

 

4) 설치할 components 중 Oracle Database Gateway for ODBC 11.2.0.1.0 선택 후 NEXT를 클릭합니다.

 

5) 설치전 설정 요약창입니다. NEXT를 클릭합니다.

 

6) 설치 진행중입니다.

 

7) 설치완료전에 script 수행하는 창이 뜹니다. root유저로 차례대로 수행합니다.

더보기

# /home/tibero/oraInventory/orainstRoot.sh

Changing permissions of /home/tibero/oraInventory.

Adding read,write permissions for group.

Removing read,write,execute permissions for world.

 

Changing groupname of /home/tibero/oraInventory to tibero.

The execution of the script is complete.

# /home/tibero/oracle/app/root.sh

Running Oracle 11g root.sh script...

 

The following environment variables are set as:

    ORACLE_OWNER= tibero

    ORACLE_HOME=  /home/tibero/oracle/app

 

Enter the full pathname of the local bin directory: [/usr/local/bin]:

   Copying dbhome to /usr/local/bin ...

   Copying oraenv to /usr/local/bin ...

   Copying coraenv to /usr/local/bin ...

 

Entries will be added to the /etc/oratab file as needed by

Database Configuration Assistant when a database is created

Finished running generic part of root.sh script.

Now product-specific root actions will be performed.

 

8) 리스너 등록하는 NETCA창입니다. NEXT를 클릭합니다.

 

9)리스너 이름을 구성하는 창입니다. 이름 설정 후 NEXT를 클릭합니다.

(처음에는 이름을 임의대로 설정했습니다만, 나중에 Tibero SID와 동일하게 변경하였습니다. 이거 보시고 구성하는 분들은 이 부분에서 Tibero SID와 동일하게 설정후 넘어가시길 바랍니다.)

 

10) protocol 선택 창입니다. NEXT를 클릭합니다.

 

11) 리스너가 사용할 port입력창입니다. 2010으로 설정하였습니다. 설정 후 NEXT를 클릭합니다.

 

12) 다른 리스너를 구성할지 묻는 창입니다. NO 확인 후 NEXT를 클릭합니다.

13) 구성이 완료되었습니다. NEXT를 클릭합니다.

 

14) Naming 방법 설정창입니다. NO 확인 후 NEXT 클릭합니다.

15) Finish 클릭합니다.

 

16) 모든 설치가 완료되었습니다. Exit를 클릭합니다.

 

 

3.Oracle서버의 tnsnames파일에 Tibero 서버 접속정보 등록

아래의 설정을 참고하여 추가합니다.

HOST = Oracle Gateway가 설치된 Tibero 서버 IP

PORT = Oracle Gateway에서 설정한 Port

SID = Tibero SID

 

$vi /u01/app/oracle/product/11.2.0/xe/network/admin/tnsnames.ora

 

tibero = 
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.58)(PORT = 2010))
    (CONNECT_DATA = (SID =tibero)) 
   (HS = OK)
)

 

 

4.Tibero서버에서 리스너를 등록합니다.

아래의 정보를 참고해서 listener.ora에 추가해줍니다.

/*
디비링크용리스너 Alias = 
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 리스너기동할 서버IP)(PORT = 리스너포트))
    )
  )
SID_LIST_디비링크용 리스너 Alias =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = 디비링크 대상 Tibero SID)
      (ORACLE_HOME = .bash_profile에 등록한 $ORACLE_HOME경로)             
      (PROGRAM=dg4odbc) --10g일경우 hsodbc
    )
)
*/

$vi /home/tibero/oracle/app/network/admin/listener.ora

 

 

tibero = 
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.58)(PORT = 2010))
    )
  )
SID_LIST_tibero =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = tibero)
      (ORACLE_HOME = /home/tibero/oracle/app)             
      (PROGRAM=dg4odbc)  ##10g일 경우 hsodbc
    )
)

 

 

5.티베로 서버의 리스너 기동

 

$ lsnrctl start tibero

 

LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 27-DEC-2020 20:11:42

Copyright (c) 1991, 2009, Oracle.  All rights reserved.

Starting /home/tibero/oracle/app/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.1.0 - Production

System parameter file is /home/tibero/oracle/app/network/admin/listener.ora

Log messages written to /home/tibero/oracle/app/log/diag/tnslsnr/ysbae/tibero/alert/log.xml

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.58)(PORT=2010)))

 

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.58)(PORT=2010)))

STATUS of the LISTENER

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

Alias                     tibero

Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production

Start Date                27-DEC-2020 20:11:42

Uptime                    0 days 0 hr. 0 min. 0 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /home/tibero/oracle/app/network/admin/listener.ora

Listener Log File         /home/tibero/oracle/app/log/diag/tnslsnr/ysbae/tibero/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.58)(PORT=2010)))

Services Summary...

Service "tibero" has 1 instance(s).

  Instance "tibero", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

 

6.Tibero서버 init$TB_SID.ora 파일 생성 및 수정

붉은색부분으로 된 부분은 반드시 추가해주어야 합니다. 트러블 슈팅에서 설명하겠지만 해당 내용이 없었을때 에러가 발생하였습니다.

 

$cd /home/tibero/oracle/app/hs/admin

 

$cp initdg4odbc.ora inittibero.ora

 

$vi inittibero.ora

 

HS_FDS_CONNECT_INFO = TIBERO

HS_FDS_TRACE_LEVEL = OFF

HS_FDS_SHAREABLE_NAME = /home/tibero/tibero6/client/lib/libtbodbc.so

 

HS_LANGUAGE=AMERICAN_AMERICA.KO16MSWIN949

 

 

7.Tibero서버의 tbdsn.tbr 확인

$ cat /home/tibero/tibero6/client/config/tbdsn.tbr

 

tibero=(
    (INSTANCE=(HOST=localhost)
              (PORT=8629)
              (DB_NAME=tibero)
    )
)

 

 

8.Oracle 서버에서 링크 생성 및 확인

 

SQL>  create public database link tibero connect to test identified by "test" using 'tibero';

Database link created.

 

SQL> select * from dual@tibero;

 

DUM

---

X

 

끝.

 

 

**트러블 슈팅

ORA-28500 발생

 

SQL> select * from dual@tibero;

 

ERROR at line 1:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:

 

Gateway관련 에러가 발생하면 log를 확인하여야 합니다.

관련 로그 생성 방법은 아래와 같습니다.

 1./home/tibero/oracle/app/hs/admin/inittibero.ora의 아래 파라미터를 DEBUG로 변경합니다.

HS_FDS_TRACE_LEVEL = DEBUG

 

2.다시 DBLINK를 수행합니다.

SQL> select * from dual@tibero;

 

ERROR at line 1: 
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:

 

3.LOG를 확인합니다.

 

home/tibero/oracle/app/hs/log 경로에 Gateway리스너이름_agent_숫자.trc형식으로 로그가 쌓이게됩니다.

 

 

$ ls -alrt

total 124

drwxr-xr-x 5 tibero tibero    41 Dec 23 01:47 ..

-rw-rw-r-- 1 tibero tibero 10060 Dec 23 02:50 tibero_agt_27109.trc

-rw-rw-r-- 1 tibero tibero 10060 Dec 23 02:51 tibero_agt_29675.trc

-rw-rw-r-- 1 tibero tibero  2720 Dec 23 02:58 tibero_agt_6499.trc

-rw-rw-r-- 1 tibero tibero  2720 Dec 23 02:58 tibero_agt_6620.trc

-rw-rw-r-- 1 tibero tibero  2720 Dec 23 02:58 tibero_agt_6645.trc

-rw-rw-r-- 1 tibero tibero  2720 Dec 23 03:00 tibero_agt_9030.trc

-rw-rw-r-- 1 tibero tibero 10060 Dec 23 03:00 tibero_agt_9814.trc

-rw-rw-r-- 1 tibero tibero 10060 Dec 27 18:43 tibero_agt_22386.trc

-rw-rw-r-- 1 tibero tibero 10060 Dec 27 18:43 tibero_agt_22699.trc

-rw-rw-r-- 1 tibero tibero   308 Dec 27 18:44 tibero_agt_23971.trc

-rw-rw-r-- 1 tibero tibero 17619 Dec 27 19:24 tibero_agt_12392.trc

drwxr-xr-x 2 tibero tibero  4096 Dec 27 19:24 .

-rw-rw-r-- 1 tibero tibero 17619 Dec 27 20:05 tibero_agt_14256.trc

 

$vi tibero_agt_14256.trc

 

...생략

Exiting hgocont, rc=28500 at 2020/12/23-02:43:03 with error ptr FILE:hgocont.c LINE:2772 FUNCTION:hgocont() ID:Something other than invalid authorization
Exiting hgolgon, rc=28500 at 2020/12/23-02:43:03 with error ptr FILE:hgolgon.c LINE:781 FUNCTION:hgolgon() ID:Calling hgocont

...생략

 

관련 SR 확인은 아래 Document를 확인하면 됩니다.

 

Document 756186.1.pdf
0.10MB

위의 SR확인 결과, 저의 상황과 동일하지는 않지만 CHARACTERSET관련된 파라미터를 추가하라는 이야기가 있었습니다.

Gateway log도 제가 보고 내용을 확인할 수는 없었습니다만, log에 찍힌 내용을 토대로 검색하여 Characterset결과 일 수 있다라고 추측할 수 있게 되었습니다. 따라서 log를 확인하여 정확한 원인과 결과를 알지는 못했지만 방향을 알 수도 있는 중요한 방법이라고 생각되어 위의 에러 뿐만아니라 다른 에러 발생시에도 log를 debug로 확인하여 해결하시길 바랍니다.

 

해결:

$vi /home/tibero/oracle/app/hs/admin/inittibero.ora에 아래 파라미터 추가

HS_LANGUAGE=AMERICAN_AMERICA.KO16MSWIN949

 

SQL> select * from dual@tibero;

 

DUM

---

X

 

 

ORA-02063 발생

ORA-02063: preceding line from tibero

 

원인 : DB링크 생성구문에 오류가 발생할 가능성 있음.

해결 : 

DBLINK 생성 구문을 다시 확인 후에 재생성

create public database link tibero connect to test identified by "test" using 'tibero'; 

 

반응형

댓글