一、 DBLINK 的概念:

DBLINK(Database Link) 数据库链接:顾名思义就是数据库的链接,就像电话线一样,是一个通道。当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须创建远程数据库的 DBLINK。 本地数据库通过 DBLINK 可以像访问本地数据库一样访问远程数据库表中的数据。

二、达梦数据库 DBLINK 的分类:

1. 按照访问权限, 达梦数据库 DBLINK可以分为普通 DBLINK 和公用 DBLINK 两类:

  • 普通 DBLINK :只有创建语句中标识的用户才可以访问远程数据库
  • 公用 DBLINK :本地数据的所有
    用户都可以访问远程数据库

2. 按照源库和目标库的类型,达梦数据库常用的 DBLINK 又可以分为同构 DBLINK(DM-DM) 和异构 DBLINK( DM - ORACLE) 两类:

  • 同构 DBLINK(DM - DM) :源端和目标端使用的数据库均为达梦数据库;
  • 异构 DBLINK(DM - ORACLE) :源端数据库为DM,目标端数据库为ORACLE

三、配置过程

1. 同构DBLINK的配置

1.1 前置条件

  • 准备两台数据库服务器 源端A(I:192.168.100.169 ,实例:DMSERVER01), 和数据库服务器 目的端B(IP:192.168.100.170 ,实例:DMSERVER02)
  • 两个服务器间网络互通
  • 两个服务器都已安装好达梦数据库。且 A 和 B 的实例名不能相同

1.2 配置过程

1.2.1 修改两台达梦数据库dm.ini配置文件参数MAL_INI值为1

达梦数据库和db2数据的区别 达梦数据库dblink使用_bc

1.2.2 在两台达梦数据库中新建dmmal.ini,两台数据库上的dmmal.ini文件内容要一致;dmmal.ini配置项中的MAL_INST_NAM是实例名,两边的实例名不能相同;为得到dblink的使用效果,在测试环境下,选择关闭防火墙

达梦数据库和db2数据的区别 达梦数据库dblink使用_DM_02

1.2.3 分别重启两个数据库服务
1.2.4 源端创建dblink
create link "SYSDBA"."LINK_TEST01" connect 'DAMENG' with "SYSDBA" identified by "SYSDBA" using '192.168.100.170/5237';
1.2.5 查询测试
SELECT * FROM TEST@LINK_TEST01;

2. 异构DBLINK的配置(DM-ORACLE 19c)

2.1 配置过程

2.1 达梦本地端安装oracle客户端(必须)

将intantclient的三个压缩包basic、sdk、sqlplus解压:解压后将linstantclient包里的所有lib拷贝到$DM_HOME/bin目录下(主要是libclntsh.so.19.1和libnnz19.so这两个动态库,可以ldd查看一下这两个动态库的依赖包有哪些,为了方便起见,建议将instantclient包里的全部lib库cp到达梦bin目录下,顺便将libclntsh.so.19.1建立软连接名为libclntsh.so):

[root@localhost ~]# cp /home/instantclient_19_17/lib* /home/dmdba/dmdbms/bin
[root@localhost bin]# ln -s libclntsh.so.19.1 libclntsh.so
2.2 配置达梦端监听文件

在instantclient_19_17\network\admin中新建listener.or和tnsnames.ora文件。
配置listener.or文件:

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = E:\WINDOWS.X64_193000_db_home)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:E:\WINDOWS.X64_193000_db_home\bin\oraclr19.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.170)(PORT = 1521))
    )
  )

配置tnsnames.ora文件:

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.170)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
2.3 修改达梦端环境变量

登录dmdba用户

[dmdba@localhost ~]$  vi ~/.bashrc
 
## 添加以下内容:
export ORACLE_HOME=/home/instantclient_21_8        ## 远程Oracle端的$ORACLE_HOME;
export ORACLE_SID=orcl                     ## 远程Oracle端的SID;
export TNS_ADMIN=/home/instantclient_21_8/network/admin    ## 服务名文件所在目录;
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ## 远程Oracle端的字符集;
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
export PATH=$PATH:$ORACLE_HOME:$DM_HOME/bin
export LANG=zh_CN.UTF8
unset USERNAME

 
[dmdba@localhost ~]$ source ~/.bashrc
2.4 重启达梦数据库和测试使用Oracle客户端
[dmdba@localhost bin]$ ./DmServiceSVR restart

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

正常效果:

达梦数据库和db2数据的区别 达梦数据库dblink使用_数据库_03

2.5 达梦本地创建dblink,测试连接
CREATE LINK "SYSDBA"."ORCLLINK" CONNECT 'ORACLE' WITH root IDENTIFIED BY root USING '192.168.100.170/orcl';
select * from v$version@ORCLLINK;

如果报错误[-6010]:连接丢失,检查sql中的大小写以及用户名密码是否使用了双引号。

达梦数据库和db2数据的区别 达梦数据库dblink使用_达梦数据库和db2数据的区别_04