达梦数据库 DBLINK 的分类
按照访问权限, 达梦数据库 DBLINK可以分为普通 DBLINK 和公用 DBLINK 两类:
普通 DBLINK :只有创建语句中标识的用户才可以访问远程数据库
公用 DBLINK :本地数据的所有用户都可以访问远程数据库
按照源库和目标库的类型,达梦数据库常用的 DBLINK 又可以分为同构 DBLINK(DM-DM) 和异构 DBLINK( DM - ORACLE) 两类:
同构 DBLINK(DM - DM) :源端和目标端使用的数据库均为达梦数据库;
异构 DBLINK(DM -ORACLE) :源端数据库为DM,目标端数据库为ORACLE
同构DBLINK的配置
达梦数据库DBLINK支持3种连接方式创建,分别是:dmmal、dpi、odbc。
其中dpi、odbc属于第三方接口,dmmal属于原生接口。
达梦数据库目前和oracle兼容性还是比较可以的,本文介绍如下三种dblink的方法:
1、达梦与达梦之间的DBLINK配置
要求具备条件1:
两台服务器之间能通,且将两台数据库服务器之间防火墙,SELINUX 关闭。(本人在实验的时候做了一次蠢事,防火墙使用service iptable stop 停掉后,后面有重启主机忘记再次停了,之后做DBLINK的测试,死活不行,建议在开始就将防火墙给禁掉。chkconfig iptables off)
要求具备条件2:
两台数据库的实例名不能一致,如果一致则配置MAL时会报错,达梦数据库无法启动。
要求具备条件3:
达梦数据库安装需要用dm.key 否则DBLINK配置开启MAL不成功,必须进行安全功能设置,如果不配置dm.key就无法进行安全功能配置。
2、达梦与Oracle之间的DBLINK配置
3、Oracle与达梦之间的DBLNK配置
实施步骤
1、环境配置
达梦数据库1:192.168.137.101 DMSERVER CentOS Linux 7.6.1810 64位
达梦数据库2:192.168.137.102 DMSERVER01 CentOS Linux 7.6.1810 64位
达梦数据库版本:
disql V8.1.0.147-Build(2019.03.27-104581)ENT
2、数据库信息
(2)数据库信息
本地:端口 5236,实例名DBSERVER,字符集GB18030
远端:端口 5239,实例名DBSERVER01,字符集GB18030
3、配置dm.ini 开启MAL
修改MAL_INI=1
vi dm.ini
#configuration file
MAL_INI = 1 #dmmal.ini
ARCH_INI = 1 #dmarch.ini
REP_INI = 0 #dmrep.ini
LLOG_INI = 0 #dmllog.ini
TIMER_INI = 0 #dmtimer.ini
MPP_INI = 0 #dmmpp.ini
4、创建并配置dmmal.ini文件,(dmmal.ini文件路径为dm.ini中的CONFIG_PATH值,默认与系统库目录相同)
vi dmmal.ini 内容如下:
[dmdba@pgdb DMDB]$ cat dmmal.ini
[MAL_INST1]
MAL_INST_NAME=DBSERVER
MAL_HOST=192.168.137.101
MAL_PORT=62141
MAL_INST_PORT=5236
MAL_INST_HOST=192.168.137.101
[MAL_INST2]
MAL_INST_NAME=DBSERVER01
MAL_HOST=192.168.137.102
MAL_PORT=62142
MAL_INST_PORT=5239
MAL_INST_HOST=192.168.137.102
参数说明
[mal_inst1] :表示达梦实例1,
[mal_inst2] :表示达梦实例2,下面配置对于该实例的一些配置。
mal_inst_name :主机的实例名,和dm.ini中的INSTANCE_NAME保持一致
mal_inst_port :主机的实例端口,和dm.ini中的PORT_NUM保持一致
mal_inst_name:MAL实例名与数据库实例保持一致
mal_host :数据库实例服务器地址
mal_port :数据库定义mal端口,不能配置为5236,需配置其他的端口名。系统监听TCP连接端口(自定义)
两台数据库均配置一样,配置后需要重启达梦数据库。
[dmdba@pgdb dmdbms]$ cd bin
[dmdba@pgdb bin]$ ./D
DmAPService DmInstanceMonitorService DM_PIPE_DMAP_LSNR_RD DmServiceDMSERVER
DmAuditMonitorService DmJobMonitorService DM_PIPE_DMAP_LSNR_WR
[dmdba@pgdb bin]$ ./DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
[dmdba@pgdb bin]$ pwd
/home/dmdba/dmdbms/bin
[dmdba@pgdb bin]$
5、远端创建用户
[dmdba@oradb bin]$ pwd
/home/dmdba/dmdbms/bin
[dmdba@oradb bin]$ disql sysdba/SYSDBA@127.0.0.1:5239
服务器[127.0.0.1:5239]:处于普通打开状态
登录使用时间: 5.632(毫秒)
disql V8.1.0.147-Build(2019.03.27-104581)ENT
SQL> create tablespace TBS_TEST datafile 'TEST.DBF' size 1024 autoextend on ;
SQL>create user TEST identified by "TEST2023" default tablespace TBS_TEST default index tablespace TBS_TEST;
SQL> grant PUBLIC,RESOURCE to TEST;
操作已执行
已用时间: 7.392(毫秒). 执行号:10.
SQL> create table tt (id int);
操作已执行
已用时间: 8.946(毫秒). 执行号:5.
SQL> insert into tt values (1);
影响行数 1
已用时间: 1.039(毫秒). 执行号:6.
SQL> commit;
操作已执行
已用时间: 1.609(毫秒). 执行号:7.
创建DBLINK
本地库访问远端库,在本地库中创建dblink。
[dmdba@pgdb bin]$ disql sysdba/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 3.306(毫秒)
disql V8.1.0.147-Build(2019.03.27-104581)ENT
SQL> CREATE or replace PUBLIC LINK LINK_TT connect 'DAMENG' with "test" identified by "test12345" using '192.168.137.102/5239';
操作已执行
已用时间: 3.975(毫秒). 执行号:
SQL> select * from tt@LINK_TT;
行号 ID
1 1
已用时间: 8.379(毫秒).
第二种方法:
SQL> CREATE or replace PUBLIC LINK LINK_t2 connect 'DAMENG' with "test" identified by "test12345" using '192.168.137.102/62142';
操作已执行
已用时间: 6.571(毫秒). 执行号:4.
SQL> select * from tt@LINK_t2;
行号 ID
1 1
已用时间: 7.299(毫秒).
可以用port端口也可以用MAL_PORT端口。
报错及注意事项
1、数据库的实例名一致报如下错误
[dmdba@pgdb bin]$ ./DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ FAILED ]
file dm.key not found, use default license!
MAL_INST_NAME:[DBSERVER] is duplicated in [/home/dmdba/dmdbms/data/DMDB/dmmal.ini]!
Read ini file(/home/dmdba/dmdbms/data/DMDB/dmmal.ini) error in line 8, code(-801)
MAL sys initialization failed!
dmserver startup failed, code = -801 [Duplicate ini config option]
nsvr_ini_file_read failed, [code: -801]
CREATE or replace PUBLIC LINK LINK_T1 connect 'dameng' with "test" identified by "test12345" using '192.168.137.102/5239';
2、INSTANCE_NAME与dmmal.ini文件中的MAL_INST_NAME不一致。
MAL sys initialization failed!
dmserver startup failed, code = -9501 [MAL sys has not configured or server is not enterprise version]
nsvr_ini_file_read failed, [code: -9501]
文章
阅读量
获赞