实际生产环境中,往往会遇到跨库访问和抽取数据。可以利用的工具举不胜数,如ETL,DBLINK等工具,本文介绍在DM7中利用DBLINK实现数据库之间相互访问。

一、什么是DBLINK

DBLINK(DatabaseLink)数据库链接,可以理解成是一个通道,如果想通过本地数据库去访问另一个数据库中表的数据时,本地数据库中要创建远程数据库的DBLINK,通过DBLINK本地数据库可以访问远程数据库中表的数据,DM7的DBLINK借助达梦自身的MAL系统实现。

二、测试环境

实例名

IP地址

操作系统版本

数据库版本

DM1

192.168.10.61

NeoKylin Linux General Server release 6.0 64

DM Database Server x64 V7.1.5.132-Build ENT

DM2

192.168.10.62

NeoKylin Linux General Server release 6.0 64

DM Database Server x64 V7.1.5.132-Build ENT

三、修改数据库的配置文件

修改192.168.10.61服务器的配置:

vim/dm7/data/DAMENG/dm.ini

INSTANCE_NAME                   = DM1

PORT_NUM                        = 5236             

MAL_INI                         = 1

 

vim/dm7/data/DAMENG/dmmal.ini

[MAL_INST1]

MAL_INST_NAME= DM1

MAL_HOST= 192.168.10.61

MAL_PORT= 5256

MAL_INST_HOST= 192.168.10.61

MAL_INST_PORT= 5236

 

[MAL_INST2]

MAL_INST_NAME= DM2

MAL_HOST= 192.168.10.62

MAL_PORT= 5256

MAL_INST_HOST= 192.168.10.62

MAL_INST_PORT= 5236

 

修改192.168.10.62服务器的配置:

vim/dm7/data/DAMENG/dm.ini

INSTANCE_NAME                   = DM2

PORT_NUM                        = 5236              

MAL_INI                         = 1

 

vim/dm7/data/DAMENG/dmmal.ini

[MAL_INST1]

MAL_INST_NAME= DM1

MAL_HOST= 192.168.10.61

MAL_PORT= 5256

MAL_INST_HOST= 192.168.10.61

MAL_INST_PORT= 5236

 

[MAL_INST2]

MAL_INST_NAME= DM2

MAL_HOST= 192.168.10.62

MAL_PORT= 5256

MAL_INST_HOST= 192.168.10.62

MAL_INST_PORT= 5236

 

四、重启数据库服务

192.168.10.61服务器:/etc/rc.d/init.d/DmServiceDM1restart

192.168.10.62服务器:/etc/rc.d/init.d/DmServiceDM2restart

五、在192.168.10.62服务器创建DBLINK

SQL>CREATE PUBLIC LINK LINK1 CONNECT 'DAMENG' WITH SYSDBA IDENTIFIED BY"dameng123" USING '192.168.10.61/5256';

注意端口号哦!

创建完成可以利用V$DBLINK查看。

六、在192.168.10.61服务器创建测试表

SQL>create table test (id int);

SQL>insert into test values (1);

SQL>commit;

七、在192.168.10.62服务器测试访问

SQL>select * from test@link1;

行号     ID        

---------------------

1          1

八、把192.168.10.61服务器dmhr.employee的数据抽到192.168.10.62的sysdba.t1表中。

SQL>create table sysdba.t1 as select * from dmhr.employee@link1