达梦数据库的外部链接(LINK)是一种数据库的实体对象,记录了远程数据库的连接信息,用于建立与远程数据的连接。用户可以通过数据库的外部链接对象透明地操作远程数据库的数据,可以对远程数据库的表进行增删改查操作,还能调用远程数据库的存储过程。数据库的外部链接对象可以是公用的(数据库中所有用户使用),也可以是私有的(特定用户使用)
dmlink限制- DM-DM的同构外部链接不支持MPP环境,DM与异构数据库的外部链接支持MPP环境;
- 增删改不支持INTO语句;
- 不支持使用游标进行增删改操作;
- 不支持操作远程表的复合类型列;
- DBLINK 理论上不支持 LOB 类型列的操作,但支持简单的增删改语句中使用常量来对 LOB 类型列进行操作。
对于异构数据库来说还有如下的限制:
- 数据类型以DM为基础,不支持DM没有的数据类型;
- 语法以DM的语法为标准,不支持DM不兼容的语法;
- 主键更新,如果是涉及到多个服务器的语句,不能保证更新操作一定成功;
- 例如使用CREATE VIEW view_name(view_col_name) AS SELECt ITEM FROM T@LINK 方式来创建查询远程对象的本地视图,对于异构库,不能保证操作一定成功。
- 对于查询异构库远程对象的本地视图,最好采用 CREATE VIEW AS SELECt ITEM AS alias_name FROM T@LINK方式创建
dm-dm搭建dblink 1.环境准备此篇博客主要介绍dm-dm间dblink的建立及使用
两台服务器
| 主机名 | IP |
|---|---|
| dm | 192.168.188.77 |
| dm2 | 192.168.188.88 |
关闭防火墙及selinux
两台数据库字符集要一致,服务名要一样,且要修改配置文件中MAL_INI参数为1。
[dmdba@dm /]$ more /dm8/data/DAMENG/dm.ini|grep -E "INSTANCE_NAME|MAL_INI" INSTANCE_NAME = DMSER1 #Instance name MAL_INI = 1 #dmmal.ini
[dmdba@dm2 ~]$ more /dm8/data/DAMENG/dm.ini|grep -E "INSTANCE_NAME|MAL_INI" INSTANCE_NAME = DMSER2 #Instance name MAL_INI = 1 #dmmal.ini
编写dmmal.ini文件
[dmdba@dm ~]$ more /dm8/data/DAMENG/dmmal.ini [DMSER1] MAL_INST_NAME = DMSER1 MAL_INST_HOST = 192.168.188.77 MAL_INST_PORT = 5236 MAL_HOST = 192.168.188.77 MAL_PORT = 7771 [DMSER2] MAL_INST_NAME = DMSER2 MAL_INST_HOST = 192.168.188.88 MAL_INST_PORT = 5236 MAL_HOST = 192.168.188.88 MAL_PORT = 7772
[dmdba@dm2 ~]$ more /dm8/data/DAMENG/dmmal.ini [DMSER1] MAL_INST_NAME = DMSER1 MAL_INST_HOST = 192.168.188.77 MAL_INST_PORT = 5236 MAL_HOST = 192.168.188.77 MAL_PORT = 7771 [DMSER2] MAL_INST_NAME = DMSER2 MAL_INST_HOST = 192.168.188.88 MAL_INST_PORT = 5236 MAL_HOST = 192.168.188.88 MAL_PORT = 7772
修改配置文件后重启。
2.dblink创建先在dm2主机数据库中创建一个表linktest
SQL> create table linktest(id int,name varchar); 操作已执行 已用时间: 11.602(毫秒). 执行号:300. SQL> select * from linktest; 未选定行 已用时间: 0.901(毫秒). 执行号:301.
在dm主机数据库创建dmlink连接dm2主机
- 方法一:使用实例名创建
SQL> CREATE PUBLIC LINK instancelink CONNECT WITH "SYSDBA" IDENTIFIED BY "SYSDBA" USING 'DMSER2';
插入数据测试
SQL> insert into linktest@instancelink values(1,'instancename'); 影响行数 1 SQL> select * from linktest@instancelink; 行号 ID NAME ---------- ----------- ------------ 1 1 instancename
- 方法二:使用ip:port创建
SQL> CREATE PUBLIC LINK iplink CONNECT WITH "SYSDBA" IDENTIFIED BY "SYSDBA" USING '192.168.188.88/5236';
插入数据测试
SQL> insert into linktest@iplink values(2,'ip'); 影响行数 1 SQL> select * from linktest@instancelink; 行号 ID NAME ---------- ----------- ------------ 1 1 instancename 2 2 ip
可以看出dblink已经搭建成功
3.dblink相关视图- dba_db_links
SQL> select * from dba_db_links; 行号 OWNER DB_LINK USERNAME HOST CREATED ---------- ------ ------------ -------- ------------------- -------------------------- 1 PUBLIC INSTANCELINK SYSDBA DMSER2/0 2022-06-27 16:44:21.314051 2 PUBLIC IPLINK SYSDBA 192.168.188.88/5236 2022-06-27 16:44:26.524981
OWNER:dblink拥有者
DB_LINK:dblink名字
USERNAME:连接的用户
HOST:主机
CREATED:创建时间
- V$DBLINK
SQL> select * from V$DBLINK;
行号 LINK_CONN LINK_ID LINK_NAME SCH_ID OWNER_ID IS_PUBLIC LOGIN_NAME
---------- -------------------- ----------- ------------ ----------- ----------- --------- ----------
HOST_NAME PORT_NUM LOGGED_ON HETEROGENEOUS PROTOCOL IN_USE
-------------- ----------- --------- ------------- -------- ------
1 95382600 201326592 INSTANCELINK 0 50331649 YES SYSDBA
DMSER2 NULL YES YES TCP/IP YES
2 140200957445520 201326593 IPLINK 0 50331649 YES SYSDBA
192.168.188.88 5236 YES YES TCP/IP NO
4.删除dblink
语法
DROp [PUBLIC] LINK [<模式名>.]<外部链接名>;
删除一个进行测试
SQL> drop public link INSTANCELINK; 操作已执行
验证
SQL> select * from dba_db_links; 行号 OWNER DB_LINK USERNAME HOST CREATED ---------- ------ ------- -------- ------------------- -------------------------- 1 PUBLIC IPLINK SYSDBA 192.168.188.88/5236 2022-06-27 16:44:26.524981有任何问题请到达梦技术社区反馈
达梦云适配中心
eco.dameng.com



