《国产数据库达梦通过DBlINK连接Oracle》

        客户要求国产化,数据库由原来的oracle变更到达梦数据库,服务器由centos变更麒麟v10 x86;由于系统的定时任务数据拉去ERP数据原来采用的是Oracle到Oracle的dblink,所以考虑采用达梦到Oracle的DBLINK。

        参考达梦数据库配置dblink_咀个栗子的博客-CSDN博客_达梦dblink
以下是我的在此之上做的总结和遇到的问题;和参考文档的不同之处是我的服务器也是国产的麒麟

最大的问题是创建dblink进行使用时会提示库文件缺失;
1.达梦本地端安装oracle客户端(必须)

        oracle官网上下载对应数据库版本的intantclient包(11.2.0.4.0 版),版本跟目标端Oracle版本一致即可,将intantclient的三个压缩包basic、sdk、sqlplus解压:解压后将linstantclient包里的所有lib拷贝到$DM_HOME/bin目录下(主要是libclntsh.so.11.1和libnnz11.so这两个动态库,可以ldd查看一下这两个动态库的依赖包有哪些,为了方便起见,建议将instantclient包里的全部lib库cp到达梦bin目录下,顺便将libclntsh.so.11.1建立软连接名为libclntsh.so)

[root@qiqi223 ~]# mkdir -p /opt/dblink/instantclient
[root@qiqi223 opt]# unzip instantclient-basic-linux.x64-11.2.0.4.0 && unzip instantclient-sdk-linux.x64-11.2.0.4.0 && unzip instantclient-sqlplus-linux.x64-11.2.0.4.0 
[root@qiqi223 instantclient]# cp lib* /opt/dmdbms/bin
[root@qiqi223 bin]# ln -s libclntsh.so.11.1 libclntsh.so

这里跟参照的一样,intantclient包的basic、sdk、sqlplus三个压缩包可以现在本地解压何必到一个文件夹下面,再压缩传到服务器进行解压,并且可以提前创建 network/admin/snames.ora 达梦Oracle客户端监听远端服务端配置文件,或者在部署的服务器上后创建。

2.远程Oracle端静态注册监听:

        进入到$ORACLE_HOME/network/admin目录下,添加或修改listener.ora监听文件内容(如果原本在创建Oracle数据库时已经注册,则不需要改动):

文件内容:

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = CLRExtProc)

      (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)

      (PROGRAM = extproc)

      (ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")

    )

  )

3.达梦本地端配置服务名:

        这里一定要对照远端Oracle监听snames.ora进行配置;我这里的远端Oracle是windows服务器

       单独存放到一个目录下/opt/dblink/instantclient/network/admin/ tnsnames.ora),并修改成以下内容:

相关指令:vim /home/dblink/instantclient/network/admin/tnsnames.ora

修改完成后ESC :WQ进行保存

  SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = CLRExtProc)

      (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)

      (PROGRAM = extproc)

      (ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")

    )

  )

4.达梦本地端修改环境变量:

        dmdba用户环境变量添加一下内容:

[dmdba@qiqi221 ~]$ vim .bash_profile
 
## 添加以下内容:
export ORACLE_HOME=/u02/app/oracle11g         ## 远程Oracle端的$ORACLE_HOME;
export ORACLE_SID=orcl11g                     ## 远程Oracle端的SID;
export TNS_ADMIN=/opt/dblink/network/admin    ## 服务名文件所在目录;
export NLS_LANG=AMERICAN_AMERICA.ZHS32GB18030 ## 远程Oracle端的字符集;
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME:/opt/dmhs/bin
export PATH=$PATH:$ORACLE_HOME:$DM_HOME/bin
export LANG=zh_CN.UTF8
unset USERNAME
 
文件生效
[dmdba@qiqi221 ~]$ source .bash_profile


权限配置: 把instantclient下的文件和 达梦bin下的文件 把权限交给dmdba用户
chown -R dmdba:dinstall /home/dblink/instantclient/

以下是问题的关键!!!!!!!!!

上面基本配置已经完成,但是创建dblink进行使用时会提示库文件缺失;

执行 ldd libclntsh.so

现在安装确实依赖;但是但是现在的问题是如果安装依赖重启达梦服务会报错,需要把达梦相关的配置都配置好!!!

rpm包下载地址:RPM resource cloud-utils

执行
rpm -Uvh libnsl-2.28-208.el8.x86_64.rpm --nodeps –force

1.	-U:升级软件,若未软件尚未安装,则安装软件。
2.	-v:表示显示详细信息。
3.	-h:以"#"号显示安装进度。
4.	--force:强制安装
5.	--nodeps:不考虑相依属性的关系

 按照上边的执行,然后就可以使用dblink了
创建dblink;

create or replace link EDWLINK connect 'ORACLE' with 账号 identified by "密码" using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = xxx.xxx.xx.xxx)(PORT = 1522)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';

这里连接地址 后面的SERVICE_NAME = orcl 就是数据库url后面的一般都是orcl

跟远端Oracle监听文件里的SERVICE_NAME无关;

现在dblink可以使用了

但是如果重启dm服务会出现:

这时候卸载安装的依赖在重启就又成功了,然后再重新安装步骤再进行安排依赖又可以使用dblink了
 

我们的客户买了达梦的服务,这个问题请教了他们的技术专家,他们怀疑是麒麟系统的问题,麒麟系统本身没问题,但是他们没遇到过用麒麟系统又用DBLINK的,可能下载BDLINK缺失的依赖包和系统兼容的问题。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值