注册
达梦dblink连接oracle
专栏/技术分享/ 文章详情 /

达梦dblink连接oracle

晚安 2023/12/08 3468 1 0
摘要

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

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

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

ADR_BASE_LISTENER = /opt/data/oracle

SID_LIST_LISTENER =
  (SID_LIST =
        (SID_DESC =
         (GLOBAL_DBNAME = orcl)
         (ORACLE_HOME = /opt/data/oracle/product/11.2.0)
         (SID_NAME = orcl11g)
      )
   )

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

​ 将远程Oracle端的$ORACLE_HOME/network/admin/tnsnames.ora文件scp到达梦主机上(单独存放到一个目录下/opt/dblink/network/admin),并修改成以下内容:

orcl11g =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.208.130)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
      (SID = orcl11g)
    )
  )

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

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

## 添加以下内容:
export ORACLE_HOME=/opt/oraclinet/instantclient_11_2         ## 本地端的$ORACLE_HOME;
export ORACLE_SID=orcl11g                     ## 本地SID;
export TNS_ADMIN=/opt/oraclinet/instantclient_11_2/network/admin    ## 服务名文件所在目录;
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ## 远程Oracle端的字符集;
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME:/home/dmdba/dmdbms/bin
export PATH=$PATH:$ORACLE_HOME:$DM_HOME/bin
export LANG=zh_CN.UTF8
unset USERNAME

5、重启达梦数据库和测试使用Oracle客户端:

[dmdba@qiqi221 bin]$ ./DmServiceSVR restart 

6、 重启达梦数据库目的是为了让达梦数据库能加载到dblink访问Oracle数据库所需要的动态库,否则在查询dblink时,会出现[-2245]:DBLINK加载库文件失败的报错。重启后,可以使用sqlplus命令测试远程连接Oracle数据库,看看是否能成功连接:

[dmdba@qiqi221 ~]$ sqlplus SCOTT/SCOTT123@orcl11g
 
SQL*Plus: Release 11.2.0.4.0 Production on Thu Jul 14 16:51:58 2022
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
 
SQL> 

6、达梦本地创建dblink:(三种方法)

(私有dblink:只有创建语句中标识的用户才可以访问远程数据库;公有dblink:本地数据的所有用户都可以访问远程数据库)

方式一:IP/服务名方式连接

-- 创建私有dblink;
CREATE LINK "DMTEST"."SCOTTLINK" CONNECT 'ORACLE' WITH "SCOTT" IDENTIFIED BY "SCOTT123" USING '192.168.222.223/orcl11g';
提示:
1、如果tnsnames.ora文件中已经配置了链接名直接这样写USING 'orcl11g';这里需要写配置的链接名
2、没有配置tnsnames.ora的话需要写USING '192.168.222.223/orcl11g'; ip加SERVICE_NAME
-- 创建公有dblink;
CREATE PUBLIC LINK "SCOTTLINK" CONNECT 'ORACLE' WITH "SCOTT" IDENTIFIED BY "SCOTT123" USING '192.168.222.223/orcl11g';
方式二:网络服务名方式连接(推荐)

-- 创建私有dblink;
CREATE LINK "DMTEST"."SCOTTLINK" CONNECT 'ORACLE' WITH "SCOTT" IDENTIFIED BY "SCOTT123" USING 'orcl11g';

-- 创建公有dblink;
CREATE PUBLIC LINK "SCOTTLINK" CONNECT 'ORACLE' WITH "SCOTT" IDENTIFIED BY "SCOTT123" USING 'orcl11g';
方式三:连接描述符连接

-- 创建私有dblink;
CREATE LINK "DMTEST"."SCOTTLINK" CONNECT 'ORACLE' WITH "SCOTT" IDENTIFIED BY "SCOTT123" USING 
'(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.222.223)(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME = orcl11g))
)';

-- 创建公有dblink;
CREATE PUBLIC LINK "SCOTTLINK" CONNECT 'ORACLE' WITH "SCOTT" IDENTIFIED BY "SCOTT123" USING 
'(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.222.223)(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME = orcl11g))
)';

​ 通过连接描述符连接的方式的优点是可以不用配置网络服务名文件tnsnames.ora,这种方式相当于把tnsnames.ora文件内容放到创建dblink语句上,其本质与上述两种方式无异,适用于需要创建dblink数量少的情形。

(注意:Oracle客户端一定要安装上,如果删除掉Oracle客户端,虽然对dblink的使用不影响,但如果重启达梦数据库后,dblink会出现报Can't match object[USER_OBJECTS] in dblink remote server错误)

7、遇到的问题

7.1、库文件未加载

配置完成以后需要重启达梦数据库,如果重启以后还是不行需要执行

ldd libclintsh.so加载依赖包

如果libclintsh.so报找不到该文件需要删除之前新建的软连接根据路径重新建

ln -s /opt/oraclinet/instantclient_19_19/libclntsh.so.11.1 libclintsh.so

7.2、链接丢失

1、信创环境下如果sqlplus链接正常,但是创建dblink后报链接丢失,首选确定oracle的用户名大小写敏感策略,确定用户名大小写,可以多试试,以及USING后配置的链接的编写方式。

2、环境变量问题,因为麒麟系统与缺少oracle的环境变量可以根据如下方法添加环境变量

vi /etc/ld.so.conf.d/oracle-instantclient.conf
添加orale客户端的路径
/opt/oraclinet/instantclient_19_19
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/oraclinet/instantclient_19_19"
env |grep LD_LIBRARY_PATH
echo $ORACLE_HOME
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服