数据库链接对象 (LINK) 是 DM 中的一种特殊的数据库实体对象,它记录了远程数据库的连接和路径信息,用于建立与远程数据的联系。
常规配置同构数据库链接—DM 到 DM
创建 DM 到 DM 的数据库链接,并使用数据库链接对远程库做增、删、改、查操作。
两台服务器,其中一个为目的主机 A,另一个为测试机 B;分别在这两台服务器上进入数据库安装目录下的库目录里修改 dm.ini 文件:MAL_INI=1,实例名 INSTANCE_NAME 要对应,且配置 dmmal.ini
创建dblink必要条件说明
关闭防火墙
将selinux设置为关闭:打开文件/etc/selinux/config,将其中SELINUX的值改为”disabled”(默认值:enforcing)
达梦与达梦数据库之间创建dblink
[dmdba@test1 sun1]$ cat dmmal.ini [dmdba@test1 sun1]$ cat dmmal.ini [MAL_INST1] MAL_INST_NAME = SUN1 MAL_HOST = 10.12.21.91 MAL_PORT = 6336 [MAL_INST2] MAL_INST_NAME = DMSERVER MAL_HOST = 10.12.21.91 MAL_PORT = 5336
然后重启两个数据库实例。
登陆inst1节点,然后创建测试表:
SQL> create table test(C1 INT,C2 VARCHAR(20));
操作已执行
已用时间: 19.684(毫秒). 执行号:600.
SQL> SELECT * FROM TEST;
未选定行
已用时间: 2.226(毫秒). 执行号:601.
在inst2上面创建link并测试
SQL> CREATE PUBLIC LINK LINK03 CONNECT WITH SYSDBA IDENTIFIED BY dameng123 USING '10.12.21.91/5336';
操作已执行
已用时间: 9.742(毫秒). 执行号:500.
SQL> INSERT INTO TEST@LINK03 VALUES(1,'a');
影响行数 1
已用时间: 10.180(毫秒). 执行号:501.
SQL> INSERT INTO TEST@LINK03 VALUES(2,'b');
影响行数 1
已用时间: 4.761(毫秒). 执行号:502.
SQL> commit
2 ;
操作已执行
已用时间: 3.250(毫秒). 执行号:503.
SQL> update TEST@LINK03 SET C2='c' WHERE C1=1;
影响行数 1
已用时间: 7.248(毫秒). 执行号:504.
SQL> DELETE FROM TEST@LINK03 WHERE C1=2;
影响行数 1
已用时间: 5.163(毫秒). 执行号:505.
SQL> COMMIT;
在inst1节点上查看结果,确实数据被修改了
SQL> SELECT * FROM TEST; 行号 C1 C2 ---------- ----------- -- 1 1 c 已用时间: 0.613(毫秒). 执行号:504.
在inst2节点上查看结果
SQL> select * from test@link03;
行号 C1 C2
---------- ----------- --
1 1 c
已用时间: 17.100(毫秒). 执行号:507.
1 安装odbc后修改配置文件如下:
[root@localhost]# vim /etc/odbc.ini
[dm]Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = DMDSC
UID = SYSDBA
PWD = SYSDBA
TCP_PORT=5236
vim /usr/local/etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /home/dmdba/dmdbms/bin/libdodbc.so
2 创建dblink
create link LINK1 connect 'ODBC' with "SYSDBA" identified by "SYSDBA" using 'dm';
3 使用dblink
SELECT * FROM SYSOBJECTS@LINK1;
曾经遇到过一个问题,在这里和大家分享下,在一个dm实例中通过mal系统配置了dblink,在manager客户端中通过dblink访问一个视图可以正常访问,通过程序端或者其他客户端访问则出现报错,报错提示数据异常,近一步分析排查后发现sql语句中如果限制了limit 600就不会有问题,但limit 601就会报错,正常情况下一般分页是不会有600多分页大小的,怀疑是某些地方有限制,
后来我们经过反复测试完美绕过,总结如下:
1 在程序端可以利用odbc的方式创建dblink,这样可以解决报错问题。
2 其他客户端中可以升级dm的驱动包解决问题,当时客户端程序使用的驱动版本比较旧,换做与应用数据库版本号相同的驱动后问题得到解决。
由于当时客户数据为加密形式,无法获取数据,后期模拟复现,始终无法复现这个问题,有同样问题的小伙伴可以一同测试下。
文章
阅读量
获赞