注册
达梦第十二课-DMLINK学习测试
专栏/技术分享/ 文章详情 /

达梦第十二课-DMLINK学习测试

WXY是对称的 2025/07/18 191 0 0
摘要

一、 DBLINK介绍

1. 概念介绍

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

2. 访问类型

DM数据库的DBLINK按类型分类可分为普通 DBLINK 和公用 DBLINK 两类:
普通 DBLINK(默认):只有创建语句中标识的用户才可以访问远程数据库;
公用 DBLINK(public):本地数据的所有用户都可以访问远程数据库。

3. 连接类型

按照数据库间连接类型划分的话,有以下几种:
DPI、ODBC、GATEWAY、DAMENG或ORACLE,默认为DPI。
DPI 和 DAMENG 用于连接达梦数据库; ODBC 可以连接所有支持 ODBC 协议的数据库; ORACLE 用于连接 ORACLE 数据库; GATEWAY 可以使用达梦的 ODBC 驱动,需配置扩展选项 GWDSN ,指定远程 GATEWAY 的 DSN ,通过 GATEWAY 中转,连接到远程数据库。

4.DMDBLINK支持软硬件版本信息

软件 版本
操作系统 Redhat 7 及以上版本
DM 数据库 DM 8.0 及以上版本
CPU 架构 x86、ARM、龙芯、飞腾等国内外主流 CPU

5.当前部署环境介绍

数据库类型 IP 数据库端口 MAL端口 目标端DBLINK名称
DM8 192.168.30.28 5236 5283 N/A
DM8 192.168.30.30 5236 5283 LINK01/LINK_DPI
Oracle 19C 192.168.30.37 1521 N/A LINK_O

二、 DBLINK配置DM-DM

1. DAMENG(MAL)方式

1.1 源备端配置MAL

1.1.1 修改dm.ini
[dmdba@dms DMTEST]$ grep 'MAL_INI' dm.ini
           MAL_INI      = 1          #dmmal.ini
[dmdba@dms DMTEST]$
1.1.2 准备dmmal.ini
[dmdba@dms DMTEST]$ cat dmmal.ini
[DBSERVER]
mal_inst_name  = DBSERVER
mal_host       = 192.168.30.28
mal_port       = 5283
[DMS]
mal_inst_name  = DMS
mal_host       = 192.168.30.30
mal_port       = 5283
[dmdba@dms DMTEST]$

1.1.3 重启源备端数据库

DmServiceXXXX restart

1.2 源端创建测试表

[dmdba@slave ~]$ disql   sysdba/Dameng123
SQL> CREATE TABLE "SYSDBA"."TEST"  (  "C1" INT,  "C2" VARCHAR(20));

1.3 备端建立DBLINK用于数据处理

CREATE PUBLIC LINK LINK01 CONNECT 'DAMENG' WITH SYSDBA IDENTIFIED BY Dameng123  USING '192.168.30.30/5283';

1.4 数据操作

INSERT INTO TEST@LINK01 VALUES(1,'A');
INSERT INTO TEST@LINK01 VALUES(2,'B');
UPDATE TEST@LINK01 SET C2='C' WHERE C1=1;
DELETE FROM TEST@LINK01 WHERE C1=2;
COMMIT;

1.5 查看数据

select  * from  test@link01;

1.6 详细操作结果如下

1.6.1 源端创建表

[dmdba@slave ~]$ disql sysdba/Dameng123
SQL>  CREATE TABLE TEST (  "C1" INT,  "C2" VARCHAR(20)) ;
操作已执行
已用时间: 46.219(毫秒). 执行号:1218.
SQL>

1.6.2 目标端创建DBLINK并操作数据

[dmdba@dms DMTEST]$ disql sysdba/Dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 20.901(ms)
disql V8
SQL> CREATE PUBLIC LINK LINK01 CONNECT 'DAMENG' WITH SYSDBA IDENTIFIED BY Dameng123  USING '192.168.30.30/5283';
操作已执行
已用时间: 35.511(毫秒). 执行号:1702.
SQL>
SQL> INSERT INTO TEST@LINK01 VALUES(1,'A');
影响行数 1

已用时间: 8.804(毫秒). 执行号:1703.
SQL> INSERT INTO TEST@LINK01 VALUES(2,'B');
影响行数 1

已用时间: 2.921(毫秒). 执行号:1704.
SQL> UPDATE TEST@LINK01 SET C2='C' WHERE C1=1;
影响行数 2

已用时间: 2.636(毫秒). 执行号:1705.
SQL> DELETE FROM TEST@LINK01 WHERE C1=2;
影响行数 1

已用时间: 8.984(毫秒). 执行号:1706.
SQL> COMMIT;
操作已执行
已用时间: 4.481(毫秒). 执行号:1707.
SQL> select  * from  test@link01;

行号     C1          C2
---------- ----------- --
1          1           C

已用时间: 19.723(毫秒). 执行号:1708.
SQL>

2. DPI 方式:

备端创建DBLINK并操作数据

SQL> CREATE or replace  PUBLIC LINK LINK_DPI  CONNECT 'DPI' WITH SYSDBA IDENTIFIED BY Dameng123  USING '192.168.30.30:5236';
操作已执行
已用时间: 16.456(毫秒). 执行号:1715.
SQL> INSERT INTO TEST@LINK_DPI VALUES(1,'C');
影响行数 1

已用时间: 7.302(毫秒). 执行号:1716.
SQL>  select  * from  test@LINK_DPI;

行号     C1          C2
---------- ----------- --
1          1           C
2          1           C

已用时间: 44.833(毫秒). 执行号:1717.
SQL>

三、 DMLINK配置DM-Oracle19C

1. 准备工作

1.1 Oracle端

1.1.1 准备监听

[oracle@localhost admin]$ cd /u01/app/oracle/product/19.3/dbhome_1/network/admin
[oracle@localhost admin]$ cat listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = xubin)
      (ORACLE_HOME = /u01/app/oracle/product/19.3/dbhome_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = xubin)
      (ORACLE_HOME = /u01/app/oracle/product/19.3/dbhome_1)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.30.37)(PORT = 1521))
    )
  )
[oracle@localhost admin]$ cat tnsnames.ora
ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = xubin)
      (PRESENTATION = RO)
    )
  )

xubin =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.30.37)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = xubin)
    )
  )
[oracle@localhost admin]$

1.1.2 创建表

[oracle@localhost ~]$ sqlplus  / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jul 15 14:07:57 2025
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> create user wang identified by wang ;

User created.

SQL> grant dba to wang ;

Grant succeeded.

SQL> grant create session to wang ;

Grant succeeded.

SQL> connect wang/wang
Connected.

SQL> create table t1(id int,name varchar(20));

Table created.

SQL> commit ;

Commit complete.

2. DM端操作

2.1 准备环境

2.1.1 下载Oracle client:

https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html

2.1.2 解压并准备环境

(1) 解压并拷贝环境
unzip instantclient-basic-linux.x64-19.27.0.0.0dbru.zip
mv instantclient_19_27 oracle_instance_client
cp oracle_instance_client/lib* dmdbms/bin/
(2) 查看库文件
[dmdba@dms oracle_instance]$ ls libcl*
libclntshcore.so.19.1  libclntsh.so.10.1  libclntsh.so.12.1  libclntsh.so.19.1
libclntsh.so           libclntsh.so.11.1  libclntsh.so.18.1
[dmdba@dms oracle_instance]$ ls libnnz*
libnnz19.so
[dmdba@dms oracle_instance]$
[dmdba@dms oracle_instance]$ ldd libnnz19.so
        linux-vdso.so.1 =>  (0x00007fff1e16b000)
        libclntshcore.so.19.1 => /dmdba/dmdbms/bin/libclntshcore.so.19.1 (0x00007fc73a8c1000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fc73a4e4000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fc73a2e0000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fc739fde000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc739dc1000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fc739ba7000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fc73999f000)
        libaio.so.1 => /lib64/libaio.so.1 (0x00007fc73979c000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fc739582000)
        /lib64/ld-linux-x86-64.so.2 (0x00005557aa3f7000)
[dmdba@dms oracle_instance]$ ldd libclntshcore.so.19.1
        linux-vdso.so.1 =>  (0x00007ffd2cbf7000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f5b1b3ae000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f5b1b0ab000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f5b1ae8f000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f5b1ac75000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f5b1aa6c000)
        libaio.so.1 => /lib64/libaio.so.1 (0x00007f5b1a86a000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f5b1a650000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f5b1a281000)
        /lib64/ld-linux-x86-64.so.2 (0x0000558e3814d000)
[dmdba@dms oracle_instance]$ ldd libclntsh.so.11.1
        linux-vdso.so.1 =>  (0x00007fff2e6dc000)
        libnnz19.so => /dmdba/dmdbms/bin/libnnz19.so (0x00007fd365a30000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fd36581d000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fd36551b000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd3652ff000)
        libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fd3650e4000)
        librt.so.1 => /lib64/librt.so.1 (0x00007fd364edc000)
        libaio.so.1 => /lib64/libaio.so.1 (0x00007fd364cda000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fd364abf000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fd3646f1000)
        /lib64/ld-linux-x86-64.so.2 (0x000055fc9017b000)
        libclntshcore.so.19.1 => /dmdba/dmdbms/bin/libclntshcore.so.19.1 (0x00007fd36414c000)
[dmdba@dms oracle_instance]$ 

2.2 创建DBLINK

SQL> CREATE LINK LINK_O CONNECT 'ORACLE' WITH wang   IDENTIFIED BY wang  USING '192.168.30.37/xubin';
操作已执行
已用时间: 16.653(毫秒). 执行号:1729.

2.3 操作数据

SQL> select * from t1@LINK_O ;
未选定行

已用时间: 324.879(毫秒). 执行号:1730.
SQL> insert into t1@link_o values(1,'a');
影响行数 1

已用时间: 450.714(毫秒). 执行号:1731.
SQL> commit ;
操作已执行
已用时间: 1.659(毫秒). 执行号:1732.
SQL> select * from t1@LINK_O ;

行号     ID NAME
---------- -- ----
1          1  a

已用时间: 47.881(毫秒). 执行号:1733.
SQL>

注意事项:

1、数据库连接目前只支持 DM、Oracle 或 ODBC。
2、DM-DM 的同构数据库链接不支持 MPP 环境,DM 与异构数据库的数据库链接支持 MPP 环境。
3、增删改不支持 INTO 语句。
4、不支持使用游标进行增删改操作。
5、不支持操作远程表的复合类型列。
6、DBLINK 理论上不支持 LOB 类型列的操作,但支持简单的增删改语句中使用常量来对 LOB 类型列进行操作。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服