相关说明
- 本方案直接使用19c的OCI连接达梦数据库,即便Oracle版本是11g也没有关系,因为oci版本是向下兼容的。如使用11g的OCI而达梦的版本是1.3.12及以后版本大概率会搭建不起来。
- 本方案操作之前请先确认oracle到dm的网络端口畅通并且orale的监听已经配置完成。
一、下载Oracle客户端驱动
以下的下载包已经放到资料包中,也可在官网直接下载
下载地址:Oracle Instant Client Downloads
目前Oracle Instant Client驱动包已经支持ARM架构平台环境。
选择对应平台的Basic和ODBC驱动包:
二、解压安装Oracle Instant Client包
## 上传安装包到服务器,然后创建目录并解压
[root@localhost ~]# mkdir -p /opt/dm_dblink
[root@localhost dm_dblink]# cd opt/dm_dblink
[root@localhost dm_dblink]# unzip instantclient-basic-linux.x64-19.19.0.0.0dbru.zip
[root@localhost dm_dblink]# unzip instantclient-sdk-linux.x64-19.19.0.0.0dbru.zip
[root@localhost dm_dblink]# unzip instantclient-sqlplus-linux.x64-19.19.0.0.0dbru.zip
#解压以后会在同级目录下生成instantclient_19_19目录
[root@localhost oracle]# cd instantclient_19_19/
[root@localhost instantclient_19_19]# pwd
/opt/oracle/instantclient_19_19
## 所有的驱动包都在/opt/oracle/instantclient_19_13目录下
## ls -l 如下图注意看下有没有下载的版本关系
## 这里注意下libclntsh.so文件有没有软连接
## 因为用的是19c的oci连11g的库,所以这个软连接特别重要
三、确认libclntsh.so的对应关系
#ldd查看依赖库的关系,缺一个都不行哦
[root@localhost instantclient_19_19]# ldd libclntsh.so
缺少libnnz19.so
[root@localhost instantclient_19_19]# ldd libclntsh.so
linux-vdso.so.1 (0x00007ffe047a2000)
libnnz19.so => not found
libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007f8c5c086000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007f8c5bf03000)
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007f8c5bee2000)
libnsl.so.1 => not found
librt.so.1 => /usr/lib64/librt.so.1 (0x00007f8c5bed7000)
libaio.so.1 => /usr/lib64/libaio.so.1 (0x00007f8c5bed0000)
libresolv.so.2 => /usr/lib64/libresolv.so.2 (0x00007f8c5beb7000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007f8c5bcff000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8c6020a000)
libclntshcore.so.19.1 => not found
## 发现在同级目录下确保已经存在 libnnz19.so 文件,但还是报错找不到依赖,可能是由于系统的动态链接器配置问题导致。
[root@localhost instantclient_19_19]# export LD_LIBRARY_PATH=/opt/dm_dblink/instantclient_19_19/
[root@localhost instantclient_19_19]# ldd libclntsh.so
linux-vdso.so.1 (0x00007fffe13a3000)
libnnz19.so => /opt/dm_dblink/instantclient_19_19/libnnz19.so (0x00007f36cbc1e000)
libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007f36cbbfe000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007f36cba7b000)
libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007f36cba5a000)
libnsl.so.1 => not found
librt.so.1 => /usr/lib64/librt.so.1 (0x00007f36cba4f000)
libaio.so.1 => /usr/lib64/libaio.so.1 (0x00007f36cba48000)
libresolv.so.2 => /usr/lib64/libresolv.so.2 (0x00007f36cba2f000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007f36cb877000)
/lib64/ld-linux-x86-64.so.2 (0x00007f36d03fb000)
libclntshcore.so.19.1 => /opt/dm_dblink/instantclient_19_19/libclntshcore.so.19.1 (0x00007f36cb2d2000)
libnsl.so.1 => not found
## (可选)为了让该配置永久生效,可以添加到/etc/ld.so.conf.d目录下,因为最后会在dmdba中配置环境变量 所以root配不配都行
[root@localhost instantclient_19_19]# echo /opt/dm_dblink/instantclient_19_19 > /etc/ld.so.conf.d/oracle-instantclient.conf
[root@localhost instantclient_19_19]# cat /etc/ld.so.conf.d/oracle-instantclient.conf
/opt/dm_dblink/instantclient_19_19
[root@localhost instantclient_19_13]# ldconfig
缺少libnsl.so.1
libnsl.so.1 是一个用于网络服务的动态链接库。该库提供了一些用于网络通信的函数和系统调用。它通常与网络相关的程序一起使用,例如服务器程序、网络客户端等。这个库是基于网络套接字编程的一部分,它提供了一些用于网络通信的函数和接口。
#方案一 yum安装 libnsl.so.1 库:
sudo yum install libnsl
#方案二 使用资料包中提供的so库 libnsl.so.1_qlv10
[root@localhost instantclient_19_19]# pwd
/opt/dm_dblink/instantclient_19_19
#修改下so名称
[root@localhost instantclient_19_19]# mv libnsl.so.1_qlv10 libnsl.so.1
四、将相关依赖库添加到/lib64下
DM8 1.3.12及以后版本,为避免缺少库依赖,所以将两个so 连接到/lib64下
## 配置libclntsh.so软连接
## 因为我这里是11g的库 所以我直接用的是libclntsh.so.11.1,其实用libclntsh.so也可以 都是同一个库
[root@localhost instantclient_19_19]# ln -s libclntsh.so.11.1 /lib64/libclntsh.so
[root@localhost instantclient_19_19]# ll /lib64/libclntsh.so
lrwxrwxrwx 1 root root 17 7月 17 13:19 /lib64/libclntsh.so -> libclntsh.so.11.1
## libocci.so软连接
[root@localhost instantclient_19_19]# ln -s libocci.so /lib64/libocci.so
[root@localhost instantclient_19_19]# ll /lib64/libocci.so
lrwxrwxrwx 1 root root 10 7月 17 13:19 /lib64/libocci.so -> libocci.so
五、配置dmdba环境变量
## 1. 将这个目录赋予dmdba用户权限
[root@localhost instantclient_19_19]# chown dmdba:dinstall /opt/dm_dblink* -R
## 2. 配置dmdba的环境变量
[root@iZ2zegdg3jn4k03ylt4m6rZ ~]# su - dmdba
[dmdba@iZ2zegdg3jn4k03ylt4m6rZ ~]$ vi ~/.bash_profile
##########内容如下##########
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/dmdbms_1_3_26/bin"
export DM_HOME="/opt/dmdbms_1_3_26"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/dmdbms_1_3_26/bin:/lib64:/opt/dm_dblink/instantclient_19_19
#这个编码设置需要看字符集的编码是什么,设置错了dblink查询可能会乱码
#export LANG=zh_CN.utf8
############################
[dmdba@iZ2zegdg3jn4k03ylt4m6rZ ~]$ source ~/.bash_profile
## 3.进行验证
[dmdba@iZ2zegdg3jn4k03ylt4m6rZ ~]$ env |grep LD_LIBRARY_PATH
## 4.需要重启DM数据库,重新加载dblink的库
六、DM端创建Dblink
上面配置成功完成后,达梦数据库可以使用Oracle OCI接口进行访问。创建语法以及使用方法可以参考《DM8 SQL语言使用手册》外部链接章节。Oracle OCI接口相关动态库文件在instantclient-basic包中,配置好上面的环境变量后可以直接创建DBLINK访问。
创建dblink连接
## DBLINK创建语句:
create public link "TEST1" connect 'ORACLE' with "SCOTT" identified by "password" using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 82.156.XXX.XXX)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = oracle )
)
)';
强烈不推荐使用这种方式创建DBLINK连接,因为如遇版本升级,该dblink写法可能会不生效从而报错。
问题1:DBLINK连接丢失
SQL> select * from TEST@TEST1;
select * from TEST@TEST1;
第1 行附近出现错误[-6033]:DBLINK连接丢失.
已用时间: 97.854(毫秒). 执行号:0.
#查看数据库实例日志,确认是账号密码错误
查看数据库实例日志报错
问题2:DBLINK加载库文件失败
使用DBLINK访问Oracle目的端报错"DBLINK加载库文件失败"
SQL> select * from t1@link1;
select * from t1@link1;
[-2245]:Error in line: 1
DBLINK load library fail.
原因
(1)第一种情况:检查是否将将相关依赖库添加到/lib64下
(2)第二种情况:DM DBLINK使用的是Oracle OCI方式创建,一般是由于DM数据库未加载Oracle OCI驱动,需要重启DM数据库。(前提是LD_LIBRARY_PATH或者ldconfig配置正确)
七、查询DBLINK
SQL> select * from TEST@TEST1;
行号 C1
---------- ----------------------------------------
1 .333333333333333333333333333333333333333
2 3.3333333333333331E-001
已用时间: 136.162(毫秒). 执行号:800.
踩坑提醒
TNS:could not resolve the connect identifier specified
新建dblink的时候,尽量采用这种下面这种写法。
如果数据库是从DM8 1.2.192之前的版本升级到1.3.12以后版本的话,下面创建的dblink方式会失效
文章来源:https://www.toymoban.com/news/detail-595840.html
资料包
链接:https://pan.baidu.com/s/1EsuaH39WjsXRSYxl0Bp1fQ?pwd=la5q
提取码:la5q文章来源地址https://www.toymoban.com/news/detail-595840.html
到了这里,关于最新DM8搭建dblink连接Oracle 11G_(19c的OCI)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!