(Instant Client)DM8使用dblink连接oracle
./sqlplus SCOTT/oracle@82.156.213.133:1521/oracle
一、下载Oracle客户端驱动
下载地址:Oracle Instant Client Downloads
目前Oracle Instant Client驱动包已经支持ARM架构平台环境。
选择对应平台的Basic和ODBC驱动包:
Basic Package(instantclient-basic) *必须

二、查看系统环境
## 1. 检查glibc版本[root@localhost ~]# rpm -qi glibcName : glibcVersion : 2.17[root@localhost ~]# ldd --versionldd (GNU libc) 2.17## 2. 检查是否有安装libaio包[root@localhost ~]# rpm -qa|grep libaiolibaio-0.3.109-13.el7.x86_64
三、解压安装Oracle Instant Client包
## 上传安装包到服务器,然后创建目录并解压[root@localhost ~]# mkdir -p /opt/oracle[root@localhost ~]# unzip instantclient-basic-linux.x64-19.13.0.0.0dbru.zip -d /opt/oracle[root@localhost ~]# unzip instantclient-odbc-linux.x64-19.13.0.0.0dbru.zip -d /opt/oracle[root@localhost oracle]# cd instantclient_19_13/[root@localhost instantclient_19_13]# pwd/opt/oracle/instantclient_19_13## 所有的驱动包都在/opt/oracle/instantclient_19_13目录下## ls -l 如下图注意看下有没有下载的版本关系

## 如果Instant Client安装包是18.3 之前的版本,还需要创建几个动态库的软链接。如下:cd /opt/oracle/instantclient_12_2ln -s libclntsh.so.12.1 libclntsh.soln -s libocci.so.12.1 libocci.so
四、配置dmdba环境变量
## 1. 添加到/etc/ld.so.conf.d目录下[root@localhost instantclient_19_13]# echo /opt/oracle/instantclient_19_13 > /etc/ld.so.conf.d/oracle-instantclient.conf[root@localhost instantclient_19_13]# cat /etc/ld.so.conf.d/oracle-instantclient.conf/opt/oracle/instantclient_19_13[root@localhost instantclient_19_13]# ldconfig## 2. 将instantclient_19_13目录的.so文件拷贝到达梦数据库的bin目录[root@localhost #]# cd /opt/oracle[root@localhost #]# cp ./instantclient_19_13/*.so /opt/dmdbms/bin[root@localhost #]# chown dmdba:dinstall -R /opt/dmdbms/bin## 3. 配置dmdba的环境变量[root@iZ2zegdg3jn4k03ylt4m6rZ ~]# su - dmdba[dmdba@iZ2zegdg3jn4k03ylt4m6rZ ~]$ vi ~/.bash_profile##########内容如下##########export DM_HOME="/opt/dmdbms"export LD_LIBRARY_PATH=/opt/dmdbms/bin:/lib64:/opt/instantclient/instantclient_11_2export LANG=zh_CN.utf8##########内容如下##########[dmdba@iZ2zegdg3jn4k03ylt4m6rZ ~]$ source ~/.bash_profile## 4.进行验证[dmdba@iZ2zegdg3jn4k03ylt4m6rZ ~]$ env[dmdba@iZ2zegdg3jn4k03ylt4m6rZ ~]$ env |grep LD_LIBRARY_PATH
五、dm创建Dblink
上面配置成功完成后,达梦数据库可以使用Oracle OCI接口进行访问。创建语法以及使用方法可以参考《DM8 SQL语言使用手册》外部链接章节。Oracle OCI接口相关动态库文件在instantclient-basic包中,配置好上面的环境变量后可以直接创建DBLINK访问。
## DBLINK创建语句:create public link "TEST1" connect 'ORACLE' with "SCOTT" identified by "oracle" using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 82.156.213.133)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SID = oracle )))';
六、oracle添加测试数据
---Oracle数据库,创建测试表sqlplus / as sysdbacreate user scott identified by oracle;grant dba to scott;conn scott/oraclecreate table scott.T1(name VARCHAR2(20),age INTEGER,sex VARCHAR2(3),grade INTEGER);insert into scott.t1 values('丽丽',18,'女',1000);commit;---DM数据库测试---重启数据库加载Oracle OCI驱动[dmdba@localhost ~]$ cd $DM_HOME/bin[dmdba@localhost bin]$ ./DmServiceDMSERVER restart[dmdba@localhost bin]$ ./disqldisql V8username:password:Server[LOCALHOST:5236]:mode is normal, state is openlogin used time : 17.706(ms)/***创建访问Oracle数据库的DBLINK***/SQL> create link "LINKORA" connect 'oracle' with "SCOTT" identified by "oracle" using '192.168.15.10:1521/orcl';executed successfullyused time: 224.920(ms). Execute id is 53700./***测试***/SQL> select * from v$version@linkora;LINEID BANNER---------- ----------------------------------------------------------------------------1 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production2 PL/SQL Release 11.2.0.4.0 - Production3 CORE 11.2.0.4.0 Production4 TNS for Linux: Version 11.2.0.4.0 - Production5 NLSRTL Version 11.2.0.4.0 - Productionused time: 38.224(ms). Execute id is 54000.SQL> SELECT * FROM t1@linkora;LINEID NAME AGE SEX GRADE---------- ------ --- --- -----1 丽丽 18 女 1000used time: 11.281(ms). Execute id is 54004.SQL> select * from emp@linkora;LINEID EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ----- ------ --------- ---- ------------------- ------- ------- ------1 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800.00 NULL 202 7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600.00 300.00 303 7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250.00 500.00 304 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975.00 NULL 205 7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250.00 1400.00 306 7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850.00 NULL 307 7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450.00 NULL 108 7839 KING PRESIDENT NULL 1981-11-17 00:00:00 5000.00 NULL 109 7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500.00 0 3010 7900 JAMES CLERK 7698 1981-12-03 00:00:00 950.00 NULL 3011 7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000.00 NULL 20LINEID EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ----- ------ ----- ---- ------------------- ------- ---- ------12 7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300.00 NULL 1012 rows gotused time: 7.949(ms). Execute id is 54005.
七、常见问题处理
问题1:DBLINK加载库文件失败
使用DBLINK访问Oracle目的端报错”DBLINK加载库文件失败”
SQL> select * from t1@link1;select * from t1@link1;[-2245]:Error in line: 1DBLINK 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驱动包是否缺少依赖库文件。如下:
[root@localhost instantclient_19_13]# ldd libsqora.so.19.1linux-vdso.so.1 => (0x00007ffeef3cd000)libdl.so.2 => /lib64/libdl.so.2 (0x00007ffafac45000)libm.so.6 => /lib64/libm.so.6 (0x00007ffafa943000)libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffafa727000)libnsl.so.1 => /lib64/libnsl.so.1 (0x00007ffafa50d000)librt.so.1 => /lib64/librt.so.1 (0x00007ffafa305000)libaio.so.1 => /lib64/libaio.so.1 (0x00007ffafa103000)libresolv.so.2 => /lib64/libresolv.so.2 (0x00007ffaf9ee9000)libclntsh.so.19.1 => /opt/oracle/instantclient_19_13/libclntsh.so.19.1 (0x00007ffaf5d76000)libclntshcore.so.19.1 => /opt/oracle/instantclient_19_13/libclntshcore.so.19.1 (0x00007ffaf57d2000)libodbcinst.so.2 => not found ###这里缺少依赖libc.so.6 => /lib64/libc.so.6 (0x00007ffaf5404000)/lib64/ld-linux-x86-64.so.2 (0x00007ffafb103000)libnnz19.so => /opt/oracle/instantclient_19_13/libnnz19.so (0x00007ffaf4d92000)
然后,使用find命令查找系统上对应的动态库文件,查找到之后加入到LD_LIBRARY_PATH系统环境变量,或者添加到 /etc/ld.so.conf.d目录下指定的配置文件中。如下:
[root@localhost ~]# echo /usr/local/lib > /etc/ld.so.conf.d/libodbc.conf[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的分享
