오라클에서 ODBC를 이용한 MySQL으로 DB LINK 설정

오라클에서 ODBC를 이용한 MySQL으로 DB LINK 설정

 

테스트 환경

 

오라클 DB 서버

Oracle Linux 6.9

Oracle 11gR2 – 11.2.0.4

ODBC Driver 8.0.11 (홈페이지에서 받아서 설치, https://dev.mysql.com/downloads/connector/odbc/)

캐릭터셋 – KO16MSWIN949

ip – 192.168.0.55

 

MySQL DB 서버

CentOS 7.2

MySQL 5.7 (yum 설치)

Oracle Gateway 11gR2 – 11.2.0.4

캐릭터셋 – euckr

ip – 192.168.0.44

Database – MYSQL

 

오라클 서버에서 설정

버전에 맞는 ODBC 드라이버를 받아서 yum으로 설치하면 /etc/odbc.ini, /etc/odbcinst.ini 파일이 보입니다.

vi로 odbcinst.ini 열어보면

[MySQL ODBC 8.0 Unicode Driver]
Driver = /usr/lib64/libmyodbc8w.so
UsageCount = 1
 
[MySQL ODBC 8.0 ANSI Driver]
Driver = /usr/lib64/libmyodbc8a.so
UsageCount = 1

이 것이 MySQL 연결에 사용될 드라이버 인데, 주의할점은 각 DB의 캐릭터 셋에 맞춰 드라이버를 설정해줘야 합니다.

UTF8를 사용할 것이라면 Unicode 드라이버를, EUCKR을 사용할 것 이라면 ANSI를 선택해야 합니다.

# vi /etc/odbc.ini
 
[MYSQL]
Driver = /usr/lib64/libmyodbc8a.so
trace = off
port = 3306
server = 192.168.0.44
database = MYSQL
option = 2
user = DEMO
password = PASSWORD
charset = euckr
$ vi tnsnames.ora
 
MYSQL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.0.44)(PORT = 1521))
      (CONNECT_DATA = (SID = MYSQL))
      (HS = OK)
  )
$ isql -v MYSQL 
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

이렇게 나오면 일단 MySQL DB로 원격접속이 되는겁니다.

※ 사전에 MySQL 서버의 방화벽을 내린다거나, MySQL 계정에 원격접속 가능한 권한을 줘야 합니다.

 

MySQL 서버에서의 설정

MySQL은 기호에 맞게 설치하면 되고, 오라클 Gateway를 설치합니다. 오라클 GUI 설치 할때와 같은 환경으로 맞춰서 설치합니다.

# groupadd oinstall
# groupadd dba
# useradd -g oinstall -G dba oracle
# su - oracle
$ vi .bash_profile
 
export ODBCINI=/etc/odbc.ini
export ORACLE_HOME=/oracle/product/11.2.0/tg_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/lib64:/lib
export PATH=$ORACLE_HOME/bin:$PATH
GUI에서 gateway를 설치할때 

ODBC 부분을 체크 해서 설치 해줍니다. (해당 스샷은 설치 후 캡처를 위해 다시 창을 띄운거라 reinstall 이라고 나옴)

Gateway 설치 후 HS 파라미터를 설정해야 합니다.

$ cd $ORACLE_HOME/hs/admin
$ vi initMYSQL.ora (initXXXX.ora)    <-- [아래 HS_FDS_CONNECT_INFO = XXXX 의 XXXX 부분과 동일 하게 설정]
 
# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
 
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = MYSQL      <-- [해당부분은 접속 하고자하는 MySQL DB 명 입력]
HS_FDS_SHAREABLE_NAME = /usr/lib64/libmyodbc8a.so      <-- [사용하고자 하는 ODBC 드라이버]
HS_FDS_TRACE_LEVEL = OFF                <--[접속은 되는데 결과값이 안나온다면 255 로 설정해 trace 확인]
HS_FDS_SUPPORT_STATISTICS = FALSE
HS_LANGUAGE=AMERICAN_AMERICA.KO16MSWIN949     <--[Oracle 서버쪽 DB의 캐릭터셋]
HS_RPC_FETCH_REBLOCKING = OFF
HS_KEEP_REMOTE_COLUMN_SIZE = ALL
HS_NLS_LENGTH_SEMANTICS = VARCHAR                  <-- [VARCHAR or CHAR 등으로 환경에 맞게 설정 가능]
HS_FDS_TIMESTAMP_MAPPING = DATE
HS_NLS_NCHAR=UCS2
 
#
# ODBC specific environment variables
#
set ODBCINI=/etc/odbc.ini
 
#
# Environment variables required for the non-Oracle system
#
Oracle Gateway를 이용해서 MySQL 서버에 오라클 Listener를 띄웁니다.
$ vi $ORACLE_HOME/network/admin/listener.ora
 
# listener.ora Network Configuration File: /oracle/product/11.2.0/tg_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME=MYSQL)
      (ORACLE_HOME=/oracle/product/11.2.0/tg_1)
      (PROGRAM=/oracle/product/11.2.0/tg_1/bin/dg4odbc)
      (ENVS=LD_LIBRARY_PATH = /usr/lib:/usr/lib64:/oracle/product/11.2.0/tg_1/lib:/oracle/product/11.2.0/tg_1/hs/lib)
    )
  )
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.44)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
 
 
ADR_BASE_LISTENER = /oracle/product/11.2.0/tg_1
$ lsnrctl start
 
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 27-JUL-2018 11:35:58
 
Copyright (c) 1991, 2013, Oracle.  All rights reserved.
 
Starting /oracle/product/11.2.0/tg_1/bin/tnslsnr: please wait...
 
TNSLSNR for Linux: Version 11.2.0.4.0 - Production
System parameter file is /oracle/product/11.2.0/tg_1/network/admin/listener.ora
Log messages written to /oracle/product/11.2.0/tg_1/diag/tnslsnr/MYSQL/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=1192.168.0.44)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.44)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                27-JUL-2018 11:35:58
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/product/11.2.0/tg_1/network/admin/listener.ora
Listener Log File         /oracle/product/11.2.0/tg_1/diag/tnslsnr/MYSQL/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.44)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "MYSQL" has 1 instance(s).
  Instance "MYSQL", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
 
 

오라클 서버에서 tnsping을 실행 했을때

$ tnsping mysql
 
TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 27-JUL-2018 11:19:40
 
Copyright (c) 1997, 2013, Oracle.  All rights reserved.
 
Used parameter files:
/app/oracle/product/11.2.0.4/db_1/network/admin/sqlnet.ora
 
 
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.0.44)(PORT = 1521)) (CONNECT_DATA = (SID = MYSQL)) (HS = OK))
OK (10 msec)

나오면 접속 준비가 완료

 

ORACLE DB의 SCOTT 계정에서 DB LINK TEST

DB LINK 생성 

※ DB Link를 생성하고자하는 계정에 create database link 권한을 주고 작업합니다.

$ sqlplus scott/tiger
 
SQL> create database link mysql
connect to DEMO
IDENTIFIED BY "<password>"
USING 'MYSQL';

MySQL DB에 미리 만들어 놓은 DEMO 테이블을 조회해봅니다.

※ 테스트용 계정과 테이블은 알아서 만드시길… DEMO 유저의 DEMO 테이블을 조회 했습니다.

SQL> select * from "demo"@mysql_test;
 
      col1 col2       col3 col4     col5
---------- ---------- ---------- ---------- --------------------
1 24-JUL-18  0123456789 0123456789 30313233343536373839
2 25-JUL-18  0123456788 0123456788 30313233343536373838

결과 값이 나오면 성공입니다.

소셜 미디어로 공유하기

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

 

새 블로그로 이사갑니다.

 

rastalion.dev

 

도메인 변경했어요. 현재 지속적으로 개선 중입니다.

 

This will close in 10 seconds