达梦数据库DBLINK初探

7 篇文章 0 订阅
6 篇文章 0 订阅

一、外部链接对象是什么

外部链接对象(LINK)是 DM 中的一种特殊的数据库实体对象,它记录了远程数据库的连接和路径信息,用于建立与远程数据的联系。通过多台数据库主库间的相互通讯,用户可以透明地操作远程数据库的数据,使应用程序看起来只有一个大型数据库。用户远程数据库中的数据请求,都被自动转换为网络请求,并在相应结点上实现相应的操作。用户可以建立一个数据库链接,以说明一个对象在远程数据库中的访问路径。这个链接可以是公用的(数据库中所有用户使用),也可以是私有的(只能被某个用户使用)。

用户可以通过外部链接对远程数据库的表进行查询和增删改操作,以及本地调用远程的存储过程。

二、如何创建外部连接对象

语法如下:

CREATE [OR REPLACE] [PUBLIC] LINK <外部链接名> CONNECT ['<连接库类型>'] WITH < 登录名> IDENTIFIED BY <登录口令> USING '<外部连接串>';
<连接库类型> ::= DAMENG | ORACLE | ODBC
<外部链接串>::=< DAMENG 外部链接串>| < ORACLE 外部链接串> | <ODBC 外部链接串>
<DAMENG 外部链接串>::=[<连接类型>;]<服务器列表>
<连接类型>::= PRIMARY FIRST |
STANDBY FIRST |
PRIMARY ONLY |
STANDBY ONLY
<服务器列表>::=<服务器地址> |
<服务器地址>{,<服务器地址>}
<服务器地址>::=<实例 IP 地址>/<实例端口号> |
<MAL IP 地址>/<MAL 端口号> |
<实例名>
<ORACLE 外部链接串>::= <tsn_name> |<description>|<IP 地址>/<服务名>
<description>::=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=
<IP 地址>)(PORT=<端口号>)))(CONNECT_DATA=(SERVICE_NAME=<服务名>)))
<ODBC 外部链接串>::= <ODBC 数据源 DSN>

参数说明:

1. OR REPLACE 使用 OR REPLACE 选项的好处是,如果系统中已经有同名的数据库链接名,服务器会自动用新的代码覆盖原来的代码。如果不使用 OR REPLACE 选项,当创建的新外部链接名称与系统中已有的外部链接名称同名时,服务器会报错。
2. PUBLIC 此链接对象是否能够被创建者之外的用户引用;
3. <外部链接名> 数据库链接的名称;
4. <连接库类型> 目前只支持 DAMENG、ORACLE 或 ODBC,默认为 DAMENG;
5. <登录名> 登录用户名称;
6. <登录口令> 登录用户口令;
7. <连接类型> 当 DBLINK 连接到多机环境时,可以设定<连接类型>和指定多台<服务器地址>。<连接类型>用来指定 DBLINK 将采用何种优先级别连接到<服务器列表>中的机器,共四种连接类型:PRIMARY FIRST 为主机优先连接;STANDBY FIRST 为备机优先连接;PRIMARY ONLY 为只连主机;STANDBY ONLY 为只连备机。缺省为 PRIMARY FIRST。<连接类型>为可选项,一旦指定了<连接类型>,则必须指定<服务器地址>数大于等于 2;
8. <DAMENG 外部链接串>支持三种格式,分别对应目标节点在 dmmal.ini 中的配置项,具体如下:
     1)<实例 IP 地址>/<实例端口号> 对应 mal_inst_host/mal_inst_port
     2)<MAL IP 地址>/<MAL 端口号> 对应 mal_host/mal_port
     3)实例名 对应 mal_inst_name
9. <ORACLE外部链接串>可以使用配置的网络服务名tsn_name(网络服务名需要配置),或者连接描述符 description(连接描述符是网络连接目标特殊格式的描述,它包括网络协议、主库 IP 地址、端口号和服务名),或者<IP 地址>/<服务名>;
10. <ODBC 外部链接串>DSN 需要用户手动配置。

三、实操

3.1、DM7-DM7

1、打开配置文件dm.ini 开启MAL,打通两台主机之间的通信链路

MAL_INI = 1   #dmmal.ini

2、配置dmmal.ini 文件,设置MAL相关参数

[MAL_INST1]
MAL_INST_NAME = DMSERVER        #实例名和dm.ini中的INSTANCE_NAME保持一致
MAL_INST_HOST = 192.168.31.38   #对外开放的服务IP地址
MAL_INST_PORT = 5236            #对外开放的服务端口和dm.ini中的PORT_NUM保持一致
MAL_HOST = 192.168.31.38                #系统监听TCP连接IP地址
MAL_PORT = 15236                        #系统监听TCP连接端口

[MAL_INST2]
MAL_INST_NAME = DMSERVER2
MAL_INST_HOST = 192.168.31.40
MAL_INST_PORT = 5236
MAL_HOST = 192.168.31.40
MAL_PORT = 15236

 3、重启dmserver服务

dmdba@dmdsc01:~$ cd dmdbms/bin
dmdba@dmdsc01:~/dmdbms/bin$ ./DmServiceDMSERVER restart

 4、打开达梦数据库客户端或者disql工具登陆,创建外部链接


 1. <远程实例IP地址 >/ < 远程实例端口号> mal_inst_host/mal_inst_port
create or replace  public link "link01" connect 'DAMENG' with "SYSDBA" identified by "SYSDBA" using '192.168.31.40/5236';

 2. <MAL IP 地址> / <MAL 端口号> mal_host/mal_port
create or replace  public link "link02" connect 'DAMENG' with "SYSDBA" identified by "SYSDBA" using '192.168.31.40/15236';

 3. <远程实例名> mal_inst_name
create or replace  public link "link03" connect 'DAMENG' with "SYSDBA" identified by "SYSDBA" using 'DMSERVER2';

5、测试

dmdba@dmdsc01:~/dmdbms/bin$ ./disql SYSDBA/SYSDBA

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 7.884(毫秒)
disql V7.6.1.92-Build(2021.02.26-135621)ENT 
SQL> SELECT * FROM v$version@"link01";

行号     BANNER                                                        
---------- --------------------------------------------------------------
1          DM Database Server x64 V7.6.1.92-Build(2021.02.26-135621)ENT  
2          DB Version: 0x7000a

已用时间: 19.350(毫秒). 执行号:50.
SQL> SELECT * FROM v$version@"link02";         

行号     BANNER                                                        
---------- --------------------------------------------------------------
1          DM Database Server x64 V7.6.1.92-Build(2021.02.26-135621)ENT  
2          DB Version: 0x7000a

已用时间: 6.633(毫秒). 执行号:51.
SQL> SELECT * FROM v$version@"link03";

行号     BANNER                                                        
---------- --------------------------------------------------------------
1          DM Database Server x64 V7.6.1.92-Build(2021.02.26-135621)ENT  
2          DB Version: 0x7000a

已用时间: 8.660(毫秒). 执行号:52.

3.2、dm7-dm8/dm8-dm7

配置方法和dm7-dm7的前提下,测试出现bug,获取对象失败或者查询一直卡住,无法获取结果

SQL> select * from v$version@test_link;
select * from v$version@test_link;
第1 行附近出现错误[-2251]:DBLINK远程服务器获取对象[V$VERSION]失败.

采取ODBC外部连接串,先安装ODBC,查看版本

[dmdba@dmdsc02 ~]$odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/dmdba/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

测试连接

[dmdba@dmdsc01 ~]$isql dm8
open fail! path:./libcrypto.so
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+

创建外部链接

create or replace  public link "link_odbc" connect 'ODBC' with "SYSDBA" identified by "dameng123" using 'dm8';

测试

dmdba@dmdsc01:~/dmdbms/bin$ ./disql SYSDBA/SYSDBA

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 7.884(毫秒)
disql V7.6.1.92-Build(2021.02.26-135621)ENT 
SQL> SELECT * FROM v$version@"link_odbc";

行号     BANNER                                                        
---------- --------------------------------------------------------------
1          DM Database Server 64 V8  
2          DB Version: 0x7000c

已用时间: 15.350(毫秒). 执行号:701.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值