(Instant Client)DM8使用dblink连接oracle

  1. ./sqlplus SCOTT/oracle@82.156.213.133:1521/oracle

一、下载Oracle客户端驱动

下载地址:Oracle Instant Client Downloads
目前Oracle Instant Client驱动包已经支持ARM架构平台环境。
选择对应平台的Basic和ODBC驱动包:
Basic Package(instantclient-basic) *必须
image.png
image.png

二、查看系统环境

  1. ## 1. 检查glibc版本
  2. [root@localhost ~]# rpm -qi glibc
  3. Name : glibc
  4. Version : 2.17
  5. [root@localhost ~]# ldd --version
  6. ldd (GNU libc) 2.17
  7. ## 2. 检查是否有安装libaio包
  8. [root@localhost ~]# rpm -qa|grep libaio
  9. libaio-0.3.109-13.el7.x86_64

三、解压安装Oracle Instant Client包

  1. ## 上传安装包到服务器,然后创建目录并解压
  2. [root@localhost ~]# mkdir -p /opt/oracle
  3. [root@localhost ~]# unzip instantclient-basic-linux.x64-19.13.0.0.0dbru.zip -d /opt/oracle
  4. [root@localhost ~]# unzip instantclient-odbc-linux.x64-19.13.0.0.0dbru.zip -d /opt/oracle
  5. [root@localhost oracle]# cd instantclient_19_13/
  6. [root@localhost instantclient_19_13]# pwd
  7. /opt/oracle/instantclient_19_13
  8. ## 所有的驱动包都在/opt/oracle/instantclient_19_13目录下
  9. ## ls -l 如下图注意看下有没有下载的版本关系

image.png

  1. ## 如果Instant Client安装包是18.3 之前的版本,还需要创建几个动态库的软链接。如下:
  2. cd /opt/oracle/instantclient_12_2
  3. ln -s libclntsh.so.12.1 libclntsh.so
  4. ln -s libocci.so.12.1 libocci.so

四、配置dmdba环境变量

  1. ## 1. 添加到/etc/ld.so.conf.d目录下
  2. [root@localhost instantclient_19_13]# echo /opt/oracle/instantclient_19_13 > /etc/ld.so.conf.d/oracle-instantclient.conf
  3. [root@localhost instantclient_19_13]# cat /etc/ld.so.conf.d/oracle-instantclient.conf
  4. /opt/oracle/instantclient_19_13
  5. [root@localhost instantclient_19_13]# ldconfig
  6. ## 2. 将instantclient_19_13目录的.so文件拷贝到达梦数据库的bin目录
  7. [root@localhost #]# cd /opt/oracle
  8. [root@localhost #]# cp ./instantclient_19_13/*.so /opt/dmdbms/bin
  9. [root@localhost #]# chown dmdba:dinstall -R /opt/dmdbms/bin
  10. ## 3. 配置dmdba的环境变量
  11. [root@iZ2zegdg3jn4k03ylt4m6rZ ~]# su - dmdba
  12. [dmdba@iZ2zegdg3jn4k03ylt4m6rZ ~]$ vi ~/.bash_profile
  13. ##########内容如下##########
  14. export DM_HOME="/opt/dmdbms"
  15. export LD_LIBRARY_PATH=/opt/dmdbms/bin:/lib64:/opt/instantclient/instantclient_11_2
  16. export LANG=zh_CN.utf8
  17. ##########内容如下##########
  18. [dmdba@iZ2zegdg3jn4k03ylt4m6rZ ~]$ source ~/.bash_profile
  19. ## 4.进行验证
  20. [dmdba@iZ2zegdg3jn4k03ylt4m6rZ ~]$ env
  21. [dmdba@iZ2zegdg3jn4k03ylt4m6rZ ~]$ env |grep LD_LIBRARY_PATH

五、dm创建Dblink

上面配置成功完成后,达梦数据库可以使用Oracle OCI接口进行访问。创建语法以及使用方法可以参考《DM8 SQL语言使用手册》外部链接章节。Oracle OCI接口相关动态库文件在instantclient-basic包中,配置好上面的环境变量后可以直接创建DBLINK访问。

  1. ## DBLINK创建语句:
  2. create public link "TEST1" connect 'ORACLE' with "SCOTT" identified by "oracle" using '(DESCRIPTION =
  3. (ADDRESS_LIST =
  4. (ADDRESS = (PROTOCOL = TCP)(HOST = 82.156.213.133)(PORT = 1521))
  5. )
  6. (CONNECT_DATA =
  7. (SERVER = DEDICATED)
  8. (SID = oracle )
  9. )
  10. )';

六、oracle添加测试数据

  1. ---Oracle数据库,创建测试表
  2. sqlplus / as sysdba
  3. create user scott identified by oracle;
  4. grant dba to scott;
  5. conn scott/oracle
  6. create table scott.T1
  7. (
  8. name VARCHAR2(20),
  9. age INTEGER,
  10. sex VARCHAR2(3),
  11. grade INTEGER
  12. );
  13. insert into scott.t1 values('丽丽',18,'女',1000);
  14. commit;
  15. ---DM数据库测试
  16. ---重启数据库加载Oracle OCI驱动
  17. [dmdba@localhost ~]$ cd $DM_HOME/bin
  18. [dmdba@localhost bin]$ ./DmServiceDMSERVER restart
  19. [dmdba@localhost bin]$ ./disql
  20. disql V8
  21. username:
  22. password:
  23. Server[LOCALHOST:5236]:mode is normal, state is open
  24. login used time : 17.706(ms)
  25. /***创建访问Oracle数据库的DBLINK***/
  26. SQL> create link "LINKORA" connect 'oracle' with "SCOTT" identified by "oracle" using '192.168.15.10:1521/orcl';
  27. executed successfully
  28. used time: 224.920(ms). Execute id is 53700.
  29. /***测试***/
  30. SQL> select * from v$version@linkora;
  31. LINEID BANNER
  32. ---------- ----------------------------------------------------------------------------
  33. 1 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
  34. 2 PL/SQL Release 11.2.0.4.0 - Production
  35. 3 CORE 11.2.0.4.0 Production
  36. 4 TNS for Linux: Version 11.2.0.4.0 - Production
  37. 5 NLSRTL Version 11.2.0.4.0 - Production
  38. used time: 38.224(ms). Execute id is 54000.
  39. SQL> SELECT * FROM t1@linkora;
  40. LINEID NAME AGE SEX GRADE
  41. ---------- ------ --- --- -----
  42. 1 丽丽 18 1000
  43. used time: 11.281(ms). Execute id is 54004.
  44. SQL> select * from emp@linkora;
  45. LINEID EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  46. ---------- ----- ------ --------- ---- ------------------- ------- ------- ------
  47. 1 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800.00 NULL 20
  48. 2 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600.00 300.00 30
  49. 3 7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250.00 500.00 30
  50. 4 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975.00 NULL 20
  51. 5 7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250.00 1400.00 30
  52. 6 7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850.00 NULL 30
  53. 7 7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450.00 NULL 10
  54. 8 7839 KING PRESIDENT NULL 1981-11-17 00:00:00 5000.00 NULL 10
  55. 9 7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500.00 0 30
  56. 10 7900 JAMES CLERK 7698 1981-12-03 00:00:00 950.00 NULL 30
  57. 11 7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000.00 NULL 20
  58. LINEID EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  59. ---------- ----- ------ ----- ---- ------------------- ------- ---- ------
  60. 12 7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300.00 NULL 10
  61. 12 rows got
  62. used time: 7.949(ms). Execute id is 54005.

七、常见问题处理

问题1:DBLINK加载库文件失败

使用DBLINK访问Oracle目的端报错”DBLINK加载库文件失败”

  1. SQL> select * from t1@link1;
  2. select * from t1@link1;
  3. [-2245]:Error in line: 1
  4. DBLINK load library fail.

原因

(1)第一种情况:DM DBLINK使用的是ODBC方式创建,一般是由于Oracle odbc驱动包缺少依赖库文件导致。
(2)第二种情况:DM DBLINK使用的是Oracle OCI方式创建,一般是由于DM数据库未加载Oracle OCI驱动,需要重启DM数据库。(前提是LD_LIBRARY_PATH或者ldconfig配置正确)

解决办法

(1)第一种情况的解决办法
首先,使用ldd命令检查Oracle odbc驱动包是否缺少依赖库文件。如下:

  1. [root@localhost instantclient_19_13]# ldd libsqora.so.19.1
  2. linux-vdso.so.1 => (0x00007ffeef3cd000)
  3. libdl.so.2 => /lib64/libdl.so.2 (0x00007ffafac45000)
  4. libm.so.6 => /lib64/libm.so.6 (0x00007ffafa943000)
  5. libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffafa727000)
  6. libnsl.so.1 => /lib64/libnsl.so.1 (0x00007ffafa50d000)
  7. librt.so.1 => /lib64/librt.so.1 (0x00007ffafa305000)
  8. libaio.so.1 => /lib64/libaio.so.1 (0x00007ffafa103000)
  9. libresolv.so.2 => /lib64/libresolv.so.2 (0x00007ffaf9ee9000)
  10. libclntsh.so.19.1 => /opt/oracle/instantclient_19_13/libclntsh.so.19.1 (0x00007ffaf5d76000)
  11. libclntshcore.so.19.1 => /opt/oracle/instantclient_19_13/libclntshcore.so.19.1 (0x00007ffaf57d2000)
  12. libodbcinst.so.2 => not found ###这里缺少依赖
  13. libc.so.6 => /lib64/libc.so.6 (0x00007ffaf5404000)
  14. /lib64/ld-linux-x86-64.so.2 (0x00007ffafb103000)
  15. libnnz19.so => /opt/oracle/instantclient_19_13/libnnz19.so (0x00007ffaf4d92000)

然后,使用find命令查找系统上对应的动态库文件,查找到之后加入到LD_LIBRARY_PATH系统环境变量,或者添加到 /etc/ld.so.conf.d目录下指定的配置文件中。如下:

  1. [root@localhost ~]# echo /usr/local/lib > /etc/ld.so.conf.d/libodbc.conf
  2. [root@localhost ~]# ldconfig

(2)第二种情况的解决办法
需要重启DM数据库服务,重启服务后数据库会加载Oracle OCI驱动,然后可以正常使用DBLINK访问Oracle数据库。

八、引用

【达梦DBLINK之DM访问Oracle配置步骤】https://eco.dameng.com/community/article/4ec1678763ac996d86ab74f74492de5f

【达梦DBLINK之DM访问Oracle问题处理】https://cdn.modb.pro/db/150303

九、文档+资料

达梦到oracle_dblink.docx
DM-Oracle dblink搭建手册.docx

链接:https://pan.baidu.com/s/1d8citcJwTB9-ndxt8j8ogA
提取码:5gfj
—来自百度网盘超级会员V3的分享