当前位置:   article > 正文

《国产数据库达梦通过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)

  1. [root@qiqi223 ~]# mkdir -p /opt/dblink/instantclient
  2. [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
  3. [root@qiqi223 instantclient]# cp lib* /opt/dmdbms/bin
  4. [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用户环境变量添加一下内容:

  1. [dmdba@qiqi221 ~]$ vim .bash_profile
  2. ## 添加以下内容:
  3. export ORACLE_HOME=/u02/app/oracle11g ## 远程Oracle端的$ORACLE_HOME;
  4. export ORACLE_SID=orcl11g ## 远程Oracle端的SID;
  5. export TNS_ADMIN=/opt/dblink/network/admin ## 服务名文件所在目录;
  6. export NLS_LANG=AMERICAN_AMERICA.ZHS32GB18030 ## 远程Oracle端的字符集;
  7. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME:/opt/dmhs/bin
  8. export PATH=$PATH:$ORACLE_HOME:$DM_HOME/bin
  9. export LANG=zh_CN.UTF8
  10. unset USERNAME
  11. 文件生效
  12. [dmdba@qiqi221 ~]$ source .bash_profile
  13. 权限配置: 把instantclient下的文件和 达梦bin下的文件 把权限交给dmdba用户
  14. chown -R dmdba:dinstall /home/dblink/instantclient/

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

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

执行 ldd libclntsh.so

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

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

  1. 执行
  2. rpm -Uvh libnsl-2.28-208.el8.x86_64.rpm --nodeps –force
  3. 1. -U:升级软件,若未软件尚未安装,则安装软件。
  4. 2. -v:表示显示详细信息。
  5. 3. -h:以"#"号显示安装进度。
  6. 4. --force:强制安装
  7. 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缺失的依赖包和系统兼容的问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/880845
推荐阅读
相关标签
  

闽ICP备14008679号