MARIADB에서 ORACLE의 DB LINK 구현(CONNECT STORAGE ENGINE 사용)

MARIADB에서 ORACLE의 DB LINK 구현(CONNECT STORAGE ENGINE 사용)

DB LINK 란 다음과 같은 것이다.
ora_database_link_1

즉, 로컬 DB에서 원격의 DB를 select/update 쿼리를 실행할 수 있다.
MySQL 진영에서 Federated 엔진을 사용해 오라클의 DB LINK과 비슷한 기능을 구현할 수 있지만 이기종의 DBMS에서는 불가능하다는 단점이 있다.
MariaDB 10.x.x 이후 버전에서 CONNECT STORAGE ENGINE 을 이용하면 구현이 가능하다(이기종의 DBMS는 odbc 드라이버를 통해 접속해야 한다)
자세한 내용은 아래를 참조한다.

시놉시스
– 로컬 PC(windows 7, 192.168.0.118)에 MariaDB 10.1.10 설치.
– 내부망(windows 2003, 192.168.0.7)에 oracle 11g 설치되어 있다고 가정한다.

1. MariaDB 10.x.x 설치
알아서 잘 설치한다.
my.ini 파일은 다음과 같다.
[mysqld]
datadir=C:/Program Files/MariaDB 10.1/data
port=3307
sql_mode=”STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION”
default_storage_engine=innodb
#default_storage_engine=connect
innodb_buffer_pool_size=1021M
innodb_log_file_size=50M
character-set-server=utf8
character-set-client=utf8
[client]
port=3307
대충 봐보자.
engine

2. oracle odbc 드라이버 설치
알아서 잘 설치한다(인터넷에 문서 많음)
단, windows에서 사용자DSN 설정만 하면 안됨.
create table 구문 사용시 아래와 같은 로그가 쌓임.
/* 2016-02-24 14:48:43 [MariaDB] */ /* SQL 오류 (1105): SQLDriverConnect: [Microsoft][ODBC 블라블라블라…(한글이 깨져 못알아먹음) */
시스템DSN설치하니 정상적으로 사용가능했음.

3. oracle 테이블을 MariaDB에 생성
오라클의 BOARD라는 테이블을 MariaDB의 tblBoard라는 이름으로 생성(?)한다.
이때, 생성은 DB는 데이터를 생성하는게 아니고 단순히 해당 테이블의 명세나 접속정보, 경로 따위만 저장한다.
링크이기 때문이다.
MariaDB [test]> show tables;
+—————-+
| Tables_in_test |
+—————-+
| _keypad_info |
+—————-+
1 rows in set (0.00 sec)
MariaDB [test]> CREATE TABLE tblBoard ENGINE=CONNECT TABLE_TYPE=ODBC tabname=’BOARD’ CONNECTION=’DSN=orcl;UID=scott;PWD=1212′;
Query OK, 0 rows affected (0.65 sec)
MariaDB [test]> show tables;
+—————-+
| Tables_in_test |
+—————-+
| _keypad_info |
| board |
+—————-+
2 rows in set (0.00 sec)
MariaDB [test]> select * from board;
+——-+———+———+———-+————-+———————+
| BD_ID | BD_NAME | BD_PASS | BD_TITLE | BD_CONTENTS | BD_DATE |
+——-+———+———+———-+————-+———————+
| 2 | kim | 1111 | good bbs | hello hello | 2016-02-24 18:15:45 |
| 1 | yoon | 1313 | thank you| hi hi hi hi | 2016-02-24 18:13:06 |
+——-+———+———+———-+————-+———————+
2 rows in set (0.17 sec)
MariaDB [test]> update board set BD_PASS = ‘0000’ where BD_ID = ‘1’;
MariaDB [test]> select * from board;
+——-+———+———+———-+————-+———————+
| BD_ID | BD_NAME | BD_PASS | BD_TITLE | BD_CONTENTS | BD_DATE |
+——-+———+———+———-+————-+———————+
| 2 | kim | 1111 | good bbs | hello hello | 2016-02-24 18:15:45 |
| 1 | yoon | 0000 | thank you| hi hi hi hi | 2016-02-24 18:13:06 |
+——-+———+———+———-+————-+———————+
2 rows in set (0.17 sec)
오라클 DB의 내용은 다음과 같다.
oracle

즉, MariaDB에서 쿼리작업을 한게 oracle 서버에도 반영이 됨을 알 수있다.


그외..
oracle charset과 MariaDB charset 차이가 나서 그런지 한글이 깨지는 문제 발생(아직 해결못함)
oracle에서 update 쿼리를 실행하면 MariaDB에서 select 했을때 적용되어 있지않음(원래 그런가?)

“MARIADB에서 ORACLE의 DB LINK 구현(CONNECT STORAGE ENGINE 사용)”에 대한 3개의 생각

  1. mariadb 와 oracle간의 odbc로 데이터 조회할 때 한글 깨짐 현상을 해결하셨나요?
    오라클 db서버의 설정 중 NLS_LANG 값, locale 값과..
    mariadb 서버의 설정 중 NLS_LANG값, locale 값이 다르면 한글이 깨지는 건지.. 궁금합니다!
    1. 아뇨. 해결하지 못했습니다.
      현재 테스트환경이 바뀌어 그 전상태로 테스트가 불가능하네요.
      지금까지의 경험상 이기종간 DB의 한글깨짐 문제는 삽질을 수반하는 작업이더라구요ㅠㅠ

댓글 쓰기

0 댓글