注册
关于达梦数据库的dblink使用的小技巧
培训园地/ 文章详情 /

关于达梦数据库的dblink使用的小技巧

sun 2023/08/16 3190 3 1

外部链接link的创建与使用

数据库链接创建与使用

一 利用mal系统建立dblink

数据库链接对象 (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.

二 利用odbc建立dblinlk

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的驱动包解决问题,当时客户端程序使用的驱动版本比较旧,换做与应用数据库版本号相同的驱动后问题得到解决。

由于当时客户数据为加密形式,无法获取数据,后期模拟复现,始终无法复现这个问题,有同样问题的小伙伴可以一同测试下。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服