티스토리 뷰

반응형

안녕하세요. ProDBA에서 MariaDB에서 ODBC를 사용해서 다른 데이터베이스를 참조할 수 있는 기능이 있다고해서 테스트해봤습니다. 제가 테스트한 환경은 CentOS 6.10와 MariaDB 10.2.32 입니다.

우선 MariaDB는 설치되어 있다고 가정하겠습니다. CONNECT Engine을 설치하는 방법은 아래 블로그를 참고했습니다.

cirius.tistory.com/1609

 

CONNECT Engine을 설치하는 과정은 위의 블로그에 잘 소개되어 있어서 저의 시행착오를 공유하고자 합니다.

 

1. isql에서 'Can't open lib 'libsqora.so.11.1' : file not found' 메시지가 발생하는 경우

[root@db1 client64]# isql -v myora
[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' : file not found
[ISQL]ERROR: Could not SQLConnect
[root@db1 client64]# ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
ldd: warning: you do not have execution permission for `/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1'
        linux-vdso.so.1 =>  (0x00007ffcbbf72000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f41203a6000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f4120121000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f411ff04000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f411fceb000)
        libclntsh.so.11.1 => /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 (0x00007f411d37b000)
        libodbcinst.so.1 => not found
        libc.so.6 => /lib64/libc.so.6 (0x00007f411cfe7000)
        /lib64/ld-linux-x86-64.so.2 (0x000055a938934000)
        libnnz11.so => /usr/lib/oracle/11.2/client64/lib/libnnz11.so (0x00007f411cc19000)
        libaio.so.1 => /lib64/libaio.so.1 (0x00007f411ca18000)

libsqora.so.11.1 파일은 존재하지만 ldd명령으로 살펴보면 libodbcinst.so.1 파일이 실제로 없어서 오류가 발생하는 것을 알 수 있습니다. 임시방편으로 libodbcinst.so.2 파일을 사용해서 libodbcinst.so.1 이름으로 소프트링크를 만들어주면 해결됩니다.

bugzilla.redhat.com/show_bug.cgi?id=498311

 

498311 – Package unixODBC is missing shared library libodbcinst.so.1

CC List: 5 users (show) hhorak nalayil stefan.walter tgl yundtj

bugzilla.redhat.com

2. mysql 클라이언트에서 'Can't open lib 'libsqora.so.11.1' : file not found' 메시지가 발생하는 경우

MariaDB [test]> CREATE TABLE emp_oracle ENGINE=CONNECT CONNECTION='DSN=MYORA;UID=scott;PWD=tiger' `TABLE_TYPE`=ODBC `tabname`='SCOTT.EMP' ;
ERROR 1105 (HY000): SQLDriverConnect: [unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1' : file not found
MariaDB [test]> quit
Bye
[root@db1 yum.repos.d]# ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
ldd: warning: you do not have execution permission for `/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1'
        linux-vdso.so.1 =>  (0x00007ffcd8db5000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fbc8b7a7000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fbc8b523000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fbc8b305000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fbc8b0ec000)
        libclntsh.so.11.1 => not found
        libodbcinst.so.1 => /usr/lib64/libodbcinst.so.1 (0x00007fbc8aeda000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fbc8ab46000)
        /lib64/ld-linux-x86-64.so.2 (0x0000559d8ce90000)
        libltdl.so.7 => /usr/lib64/libltdl.so.7 (0x00007fbc8a93d000)

역시 ldd명령으로 확인해보면 libclntsh.so.11.1 파일을 찾지못해 오류가 발생하는 것을 알 수 있습니다. 

이 경우는 라이브러리 경로 (리눅스의 경우 LD_LIBRARY_PATH 환경변수)에 오라클 클라이언트 위치를 지정하고 MariaDB 서버를 재시작해야합니다.

 

CONNECT Engine설치가 완료된 후, CREATE TABLE 명령을 수행할 때 tabname과 dbname을 지정하거나 tabname에 스키마명을 같이 써도 됩니다.

MariaDB [test]> CREATE TABLE emp_oracle ENGINE=CONNECT CONNECTION='DSN=MYORA;UID=scott;PWD=tiger' `TABLE_TYPE`=ODBC `tabname`='emp' ;
ERROR 1105 (HY000): Cannot get columns from emp
MariaDB [test]> CREATE TABLE emp_oracle ENGINE=CONNECT CONNECTION='DSN=MYORA;UID=scott;PWD=tiger' `TABLE_TYPE`=ODBC `tabname`='EMP' ;
ERROR 1105 (HY000): Several EMP tables found, specify DBNAME
MariaDB [test]> CREATE TABLE emp_oracle ENGINE=CONNECT CONNECTION='DSN=MYORA;UID=scott;PWD=tiger' `TABLE_TYPE`=ODBC `tabname`='SCOTT.EMP' ;
Query OK, 0 rows affected (1.86 sec)

MariaDB [test]> select * from emp_oracle;
+-------+--------+-----------+------+---------------------+---------+---------+--------+
| EMPNO | ENAME  | JOB       | MGR  | HIREDATE            | SAL     | COMM    | DEPTNO |
+-------+--------+-----------+------+---------------------+---------+---------+--------+
|  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 00:00:00 |  800.00 |    NULL |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 00:00:00 | 1600.00 |  300.00 |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 00:00:00 | 1250.00 |  500.00 |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 00:00:00 | 2975.00 |    NULL |     20 |
|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 00:00:00 | 1250.00 | 1400.00 |     30 |
|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 00:00:00 | 2850.00 |    NULL |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 00:00:00 | 2450.00 |    NULL |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 00:00:00 | 3000.00 |    NULL |     20 |
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 00:00:00 | 5000.00 |    NULL |     10 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 00:00:00 | 1500.00 |    0.00 |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 00:00:00 | 1100.00 |    NULL |     20 |
|  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 00:00:00 |  950.00 |    NULL |     30 |
|  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 00:00:00 | 3000.00 |    NULL |     20 |
|  7934 | MILLER | CLERK     | 7782 | 1982-01-23 00:00:00 | 1300.00 |    NULL |     10 |
+-------+--------+-----------+------+---------------------+---------+---------+--------+

 

참고되시길 바랍니다.

반응형
댓글