一. 使用场景:
部链接对象(LINK)是 DM 中的一种特殊的数据库实体对象,它记录了远程数据库的连接和路径信息,用于建立与远程数据的联系。通过多台数据库主库间的相互通讯,用户可以透明地操作远程数据库的数据,使应用程序看起来只有一个大型数据库。用户远程数据库中的数据请求,都被自动转换为网络请求,并在相应结点上实现相应的操作。用户可以建立一个数据库链接,以说明一个对象在远程数据库中的访问路径。这个链接可以是公用的(数据库中所有用户使用),也可以是私有的(只能被某个用户使用)。
用户可以通过外部链接对远程数据库的表进行查询和增删改操作,以及本地调用远程的存储过程。
二 前置条件:
准备两台数据库服务器 A、B(目前只支持同平台,不支持跨平台建数据库连接),均安装了 DM 数据库,网络必须互通。
两个服务器间网络互通
两个服务器都已安装好达梦数据库。且 A 和 B 的实例名不能相同。两台数据库字符集要一致。
三 配置:
[dmdba@10-8-148-9 DAMENG1]$ vi dmmal.ini
[dmdba@10-8-148-9 DAMENG1]$ cat dmmal.ini
[DMSERVER1] #自定义
MAL_INST_NAME = DMSERVER1 #实例名和dm.ini中的INSTANCE_NAME保持一致
MAL_INST_HOST = 10.8.148.9 #对外开放的服务IP地址
MAL_INST_PORT = 52336 #对外开放的服务端口和dm.ini中的PORT_NUM保持一致
MAL_HOST = 10.8.148.9 #系统监听TCP连接IP地址
MAL_PORT = 15252 #系统监听TCP连接端口
[DMSERVER] #自定义
MAL_INST_NAME = DMSERVER
MAL_INST_HOST = 10.8.148.7
MAL_INST_PORT = 52336
MAL_HOST = 10.8.148.7
MAL_PORT = 15253
[dmdba@10-8-148-7 DAMENG]$ vi dmmal.ini
[dmdba@10-8-148-7 DAMENG]$ cat dmmal.ini
[DMSERVER1] #自定义
MAL_INST_NAME = DMSERVER1 #实例名和dm.ini中的INSTANCE_NAME保持一致
MAL_INST_HOST = 10.8.148.9 #对外开放的服务IP地址
MAL_INST_PORT = 52336 #对外开放的服务端口和dm.ini中的PORT_NUM保持一致
MAL_HOST = 10.8.148.9 #系统监听TCP连接IP地址
MAL_PORT = 15252 #系统监听TCP连接端口
[DMSERVER] #自定义
MAL_INST_NAME = DMSERVER
MAL_INST_HOST = 10.8.148.7
MAL_INST_PORT = 52336
MAL_HOST = 10.8.148.7
MAL_PORT = 15253
[dmdba@10-8-148-7 DAMENG]$
[dmdba@10-8-148-9 DAMENG1]$ more /home/dmdba/data/DAMENG1/dm.ini|grep -E "INSTANCE_NAME|MAL_INI"
INSTANCE_NAME = DMSERVER1 #Instance name
MAL_INI = 1 #dmmal.ini
[dmdba@10-8-148-9 DAMENG1]$
[dmdba@10-8-148-7 bin]$ more /data/DAMENG/dm.ini|grep -E "INSTANCE_NAME|MAL_INI"
INSTANCE_NAME = DMSERVER #Instance name
MAL_INI = 1 #dmmal.ini
[dmdba@10-8-148-7 bin]$
[dmdba@10-8-148-9 bin]$ ./DmServiceDMSERVER1 restart
DmServiceCATHY_S service is stopped.
Starting DmServiceCATHY_S: [ OK ]
[dmdba@10-8-148-9 bin]$
[dmdba@10-8-148-7 bin]$ ./DmServiceDMSERVER2 restart
DmServiceDMSERVER2 service is stopped.
Starting DmServiceDMSERVER2: [ OK ]
[dmdba@10-8-148-9 bin]$ ./disql SYSDBA/SYSDBA@LOCALH
服务器[LOCALHOST:52336]:处于普通打开状态
登录使用时间 : 1.677(ms)
disql V8
SQL> Create table test(c1 int,c2 int);
操作已执行
已用时间: 16.136(毫秒). 执行号:55200.
SQL>
在B主机建立外部连接操作A主机
create public link 外部连接名 connect with A主机登录用户 identified by A主机登录用户密码 using ‘A主机ip/a主机系统监听TCP连接端口’
disql V8
SQL> create public link dmlink1 connect with "SYSDBA" identified by "SYSDBA" using '10.8.148.9/52336';
操作已执行
已用时间: 11.755(毫秒). 执行号:501.
SQL> insert into test@dmlink1 values(1,1)
2 ;
insert into test@dmlink1 values(1,1);
操作已执行
SQL> commit;
操作已执行
在A服务器上查询数据,测试成功:
[dmdba@10-8-148-9 bin]$ ./disql SYSDBA/SYSDBA@LOCALHOST:52336
服务器[LOCALHOST:52336]:处于普通打开状态
登录使用时间 : 1.203(ms)
disql V8
SQL> select * from test;
行号 C1 C2
---------- ----------- -----------
1 1 1
已用时间: 0.889(毫秒). 执行号:55400.
SQL>
————————————————
版权声明:本文为CSDN博主「qq_37829708」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37829708/article/details/128494726
两台服务器,其中一个为目的主机 A,另一个为测试机 B;分别在这两台服务器上进入数据库安装目录下的库目录里修改 dm.ini 文件:MAL_INI=1,实例名 INSTANCE_NAME 要对应,且配置 dmmal.ini(如无此文件,新建此文件)如下所示