一、 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
1.2.2 在两台达梦数据库中新建dmmal.ini,两台数据库上的dmmal.ini文件内容要一致;dmmal.ini配置项中的MAL_INST_NAM是实例名,两边的实例名不能相同;为得到dblink的使用效果,在测试环境下,选择关闭防火墙
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数据库,看看是否能成功连接.
正常效果:
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中的大小写以及用户名密码是否使用了双引号。