外部链接

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

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

16.1 创建外部链接

创建一个外部链接。

语法格式

  CREATE [OR REPLACE] [PUBLIC] LINK <外部链接名> CONNECT ['<连接库类型>'] WITH <登录名> IDENTIFIED BY <登录口令> USING '<外部连接串>';

  <连接库类型> ::= DAMENG | ORACLE | ODBC | DPI

  <外部链接串>::=< DAMENG外部链接串>| < ORACLE外部链接串> | <ODBC外部链接串> | <DPI外部链接串>

  <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>

  <DPI外部链接串>::= <IP地址>:<端口号> | <服务名>

参数

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

图例

创建外部链接

创建外部链接

外部链接串

外部链接串

DAMENG外部链接串

DAMENG外部链接串

服务器地址

服务器地址

语句功能

创建一个外部链接。

使用说明

  1. 要创建到DM数据库的外部链接,必须首先配置dmmal.ini,才能使用LINK。DM的连接串有两种格式:

    INSTANCE_NAME:直接使用远程库的实例名(该实例名必须配置到dmmal.ini中);

    <IP地址>/<端口号>:其中端口号为DM外部链接服务器的dmmal.ini配置中的MAL_PORT端口号。

    dmmal.ini 各配置项的值、前后顺序,必须保持完全一致。dmmal.ini的详细配置可参考《DM8系统管理员手册》的2.1节,需要注意同时将dm.ini中的MAL_INI参数置为1以开启MAL系统。

  2. 要创建到ORACLE的外部链接,可以使用配置的网络服务名<tsn_name>;如果没有配置tsn_name,可以使用连接描述符<description>或者<IP地址>/<服务名>作为连接串。

  3. 要创建到ORACLE的外部链接,需要在当前机器安装ORACLE的OCI接口,且需要保证OCI接口与DM版本在32位/64位保持一致。

  4. 通过LINK对远程服务器所作的修改,由用户在本地服务器通过commit或rollback进行提交或回滚。

  5. 只支持普通用户,不支持SSL和Kerberos认证。

  6. 不支持连接自身实例的LINK。

  7. 支持在CREATE SCHEMA中CREATE LINK,但是不支持CREATE PUBLIC LINK。

  8. 只有DBA和具有CREATE LINK权限的用户可以创建外部链接。

  9. 当DBLINK链接的是多机系统且指定了多台服务器时,若所连接的服务器发生宕机等意外情况导致无法对外提供服务时,DBLINK将根据设定的<连接类型>,在剩余的服务器中挑选合适的服务器进行连接。

  10. DPI外部链接串可以使用DPI接口能够识别的IP地址和端口号,也可以使用dm_svc.conf文件中配置的服务名。达梦服务器安装成功后自带DPI库,因此用户无需进行其他配置操作,即可使用DPI外部链接串链接到远程达梦服务器。

举例说明

例1 使用DM数据库,创建一个连接到IP地址为192.168.0.31,MAL_PORT端口号为5369的MAL站点的外部链接,登录到此站点使用的用户名为USER01,密码为AAA123456,实例名为:DMSERVER。

  CREATE PUBLIC LINK LINK1 CONNECT 'DAMENG' WITH USER01 IDENTIFIED BY AAA123456 USING '192.168.0.31/5369';

或

  CREATE PUBLIC LINK LINK1 CONNECT WITH USER01 IDENTIFIED BY AAA123456 using 'DMSERVER'; --DMSERVER为实例名

例2 使用DM数据库,创建一个连接到IP地址为192.168.0.225机器上的oracle数据库的外部链接。可以通过三种方式创建:一网络服务名tsn_name;二连接描述符description;三 <IP地址>/<服务名>。

(一) 通过网络服务名创建

首先介绍Oracle网络服务名的配置方法。网络服务名配置成功才能创建DBLINK

配置本地的Oracle网络服务名ORCL,连接225机器上的orcl实例。详细步骤如下:

步骤一

步骤 一

步骤二

步骤 二

步骤三

步骤 三

步骤四

步骤 四

其次,创建dblink。

网络服务名配置成功后,就可以使用网络服务名ORCL或网络连接描述符创建DBLINK。

  CREATE LINK LINK1 CONNECT 'ORACLE' WITH USER01 IDENTIFIED BY USER01 USING 'ORCL';

(二) 通过连接描述符创建

  CREATE OR REPLACE LINK LINK1 CONNECT 'ORACLE' WITH USER01 IDENTIFIED BY USER01 USING '(DESCRIPTION =

  (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.225)(PORT = 1521)))

  (CONNECT_DATA = (SERVICE_NAME = orcl) )

 )';

(三) 通过<IP地址>/<服务名>创建

  CREATE LINK LINK1 CONNECT 'ORACLE' WITH USER01 IDENTIFIED BY USER01 USING '192.168.0.225/orcl';

16.2 删除外部链接

删除一个外部链接。

语法格式

  DROP [PUBLIC] LINK [IF EXISTS] [<模式名>.]<外部链接名>;

参数

1.<模式名> 指明被操作的外部链接属于哪个模式,缺省为当前模式;

2.<外部链接名> 指明被操作的外部链接的名称。

图例

删除外部链接

删除外部链接

语句功能

删除一个外部链接。

使用说明

  1. 删除不存在的外部链接会报错。若指定IF EXISTS关键字,删除不存在的外部链接,不会报错;
  2. 只有链接对象的创建者和DBA拥有该对象的删除权限。

举例说明

删除外部链接LINK1。

  DROP LINK LINK1;

16.3 使用外部链接

通过外部链接,可以对远程服务器的对象进行查询或进行增删改操作,可以调用远程的过程。

使用外部链接进行查询或增删改的语法格式与普通格式基本一致,唯一的区别在于指定外部链接表时需要使用如下格式作为表或视图的引用:

  [TABLENAME | VIEWNAME] @链接名

举例说明

使用外部链接查询LINK1上的远程表进行查询

  SELECT * FROM SYSOBJECTS@LINK1;

或对远程表进行插入数据:

  INSERT INTO T1@LINK1 VALUES(1,2,3);

也可以查询本地表或其他链接的表对远程表进行操作,如

  UPDATE T1@LINK1 SET C1 = C1+1 WHERE C2 NOT IN (SELECT ID FROM LOCAL_TABLE);

  DELETE FROM T1@LINK1 WHERE C1 IN (SELECT ID FROM T2@LINK2);

使用外部链接,可以调用远程的存储过程或函数,使用中有以下约束:

  1. 参数数据类型为SQL类型,不允许为DMSQL程序类型;
  2. 参数数据类型不允许为复合类型。

其使用方式为:

  [CALL] [<模式名>.][<包名>.]<过程/函数名> [@] <外部链接名>(<参数列>);

使用限制

外部链接的使用有以下限制:

  1. DM-DM的同构外部链接不支持MPP环境,DM与异构数据库的外部链接支持MPP环境;
  2. 增删改不支持INTO语句;
  3. 不支持使用游标进行增删改操作;
  4. 不支持操作远程表的复合类型列;
  5. DBLINK理论上不支持LOB类型列的操作,但支持简单的增删改语句中使用常量来对LOB类型列进行操作。
  6. DBLINK的本地库和远程库的大小写敏感参数CASE_SENSITIVE应保持一致,若不一致,应用需要保证SQL语句书写符合远程库的规范;
  7. DBLINK的本地库和远程库的字符集编码应一致,否则可能导致字符串操作出错;
  8. DM-DM类型的DBLINK暂不支持远程函数调用。

另外,DM连接异构数据库的外部链接还有如下使用限制:

  1. 数据类型以DM为基础,不支持DM没有的数据类型;
  2. 语法以DM的语法为标准,不支持DM不兼容的语法;
  3. 主键更新,如果是涉及到多个服务器的语句,不能保证更新操作一定成功;
  4. 使用CREATE VIEW view_name(view_col_name) AS SELECT ITEM FROM T@LINK方式创建的查询远程对象的本地视图,对于异构库,不能保证操作一定成功。对于查询异构库远程对象的本地视图,最好采用CREATE VIEW AS SELECT ITEM AS alias_name FROM T@LINK方式创建。
微信扫码
分享文档
扫一扫
联系客服