暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

最新DM8搭建dblink连接Oracle 11G_(19c的OCI)

原创 手机用户5683 2023-07-17
3235

相关说明

  1. 本方案直接使用19c的OCI连接达梦数据库,即便Oracle版本是11g也没有关系,因为oci版本是向下兼容的。如使用11g的OCI而达梦的版本是1.3.12及以后版本大概率会搭建不起来。
  2. 本方案操作之前请先确认oracle到dm的网络端口畅通并且orale的监听已经配置完成。

一、下载Oracle客户端驱动

以下的下载包已经放到资料包中,也可在官网直接下载
下载地址:Oracle Instant Client Downloads
目前Oracle Instant Client驱动包已经支持ARM架构平台环境。
选择对应平台的Basic和ODBC驱动包:
Basic Package(instantclient-basic) *必须
image.png
instantclient-basic-linux-19.19.0.0.0dbru.zip
image.png
instantclient-sqlplus-linux-19.19.0.0.0dbru.zip
image.png
instantclient-sdk-linux-19.19.0.0.0dbru.zip
image.png

二、解压安装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的库,所以这个软连接特别重要

image.png

三、确认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

image.png

缺少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

image.png

四、将相关依赖库添加到/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写法可能会不生效从而报错。
image.png

问题1:DBLINK连接丢失

SQL> select * from TEST@TEST1; select * from TEST@TEST1; 第1 行附近出现错误[-6033]:DBLINK连接丢失. 已用时间: 97.854(毫秒). 执行号:0. #查看数据库实例日志,确认是账号密码错误

image.png
查看数据库实例日志报错
image.png

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

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

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

b68dffebbdb83abfcbad588969764a3.jpg

原因

(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

image.png
新建dblink的时候,尽量采用这种下面这种写法。
image.png
如果数据库是从DM8 1.2.192之前的版本升级到1.3.12以后版本的话,下面创建的dblink方式会失效
image.png

资料包

链接:https://pan.baidu.com/s/1EsuaH39WjsXRSYxl0Bp1fQ?pwd=la5q
提取码:la5q

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论