达梦数据库之间存在跨库访问的需求,例如有2个DM数据库DM1、DM2,现在本地库DM1要访问远程库DM2中的数据,此时可使用dblink来实现。本文将介绍3种实现方法dmmal,DPI,ODBC。
角色 发起端(本地端) 目标端(远程端)
数据库版本 8.1.3.100 8.1.3.100
数据库名 DM1 DM2
实例名 DM1SVR DM2SVR
字符集 GB18030 GB18030
IP 172.16.1.1 172.16.1.2
数据库端口 5236 5236
MAL端口号 61611 61612
用户 无 um2
表 无 tm2
DM1执行
--dmdba
cd /home/dmdba100/dmdbms/bin/
./dminit path=/home/dmdba100/dmdbms/data DB_NAME=DM1 INSTANCE_NAME=DM1SVR CHARSET=0 PORT_NUM=5236
--root
/home/dmdba100/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DM1SVR -dm_ini /home/dmdba100/dmdbms/data/DM1/dm.ini -m open
systemctl enable DmServiceDM1SVR
systemctl start DmServiceDM1SVR
DM2执行
cd /home/dmdba100/dmdbms/bin/
./dminit path=/home/dmdba100/dmdbms/data DB_NAME=DM2 INSTANCE_NAME=DM2SVR CHARSET=0 PORT_NUM=5236
--root
/home/dmdba100/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DM2SVR -dm_ini /home/dmdba100/dmdbms/data/DM2/dm.ini -m open
systemctl enable DmServiceDM2SVR
systemctl start DmServiceDM2SVR
DM1和DM2的dm.ini配置
vi /home/dmdba100/dmdbms/data/DM1/dm.ini
MAL_INI =1
vi /home/dmdba100/dmdbms/data/DM2/dm.ini
MAL_INI =1
DM1和DM2的dmmal.ini配置
cat > /home/dmdba100/dmdbms/data/DM1/dmmal.ini <<EOF
[MAL_INST1]
MAL_INST_NAME=DM1SVR
MAL_HOST=172.16.1.1
MAL_PORT=6161
MAL_INST_PORT=5236
MAL_INST_HOST=172.16.1.1
[MAL_INST2]
MAL_INST_NAME=DM2SVR
MAL_HOST=172.16.1.2
MAL_PORT=6162
MAL_INST_PORT=5236
MAL_INST_HOST=172.16.1.2
EOF
cat > /home/dmdba100/dmdbms/data/DM2/dmmal.ini <<EOF
[MAL_INST1]
MAL_INST_NAME=DM1SVR
MAL_HOST=172.16.1.1
MAL_PORT=6161
MAL_INST_PORT=5236
MAL_INST_HOST=172.16.1.1
[MAL_INST2]
MAL_INST_NAME=DM2SVR
MAL_HOST=172.16.1.2
MAL_PORT=6162
MAL_INST_PORT=5236
MAL_INST_HOST=172.16.1.2
EOF
cd /home/dmdba100/dmdbms/bin/
./DmServiceDM1SVR restart
cd /home/dmdba100/dmdbms/bin/
./DmServiceDM2SVR restart
[dmdba100@db1 bin]$ ss -lntp |grep dmserver
LISTEN 0 128 *:6161 *:* users:(("dmserver",pid=18473,fd=10))
LISTEN 0 128 *:5236 *:* users:(("dmserver",pid=18473,fd=5))
[dmdba100@db1 bin]$
[dmdba100@db2 bin]$ ss -lntp |grep dmserver
LISTEN 0 128 *:6162 *:* users:(("dmserver",pid=12479,fd=10))
LISTEN 0 128 *:5236 *:* users:(("dmserver",pid=12479,fd=5))
[dmdba100@db2 bin]$
[dmdba100@db2 bin]$ cd /home/dmdba100/dmdbms/bin/
[dmdba100@db2 bin]$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.249(ms)
上次登录ip : ::1
上次登录时间 : 2024-04-05 18:29:29
登录失败次数 : 0
口令是否过期 : 未过期
disql V8
SQL> create user udm2 identified by "Dameng@1234";
操作已执行
已用时间: 4.910(毫秒). 执行号:801.
SQL> create table udm2.t2 as select * from dba_objects;
select top 1 * from udm2.t2;操作已执行
已用时间: 39.658(毫秒). 执行号:802.
SQL>
行号 OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID
---------- ------ ----------- -------------- --------- --------------
OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP
----------- -------------------------- ------------- ---------
STATUS TEMPORARY GENERATED SECONDARY NAMESPACE EDITION_NAME
------ --------- --------- --------- --------- ------------
1 CTISYS CTISYS NULL 150994948 NULL
SCH 2024-04-05 18:12:29.544126 NULL NULL
VALID N NULL NULL NULL NULL
##
已用时间: 0.850(毫秒). 执行号:803.
SQL>
---通过实例名(MAL_INST_NAME=DM2SVR)
create or replace link dmlinkdm2 connect 'DAMENG' with udm2 identified by "Dameng@1234" using 'DM2SVR';
--通过dmmal.ini中的MAL_HOST/MAL_PORT
create or replace link dmlinkdm2 connect 'DAMENG' with udm2 identified by "Dameng@1234" using '172.16.1.2/5236';
--通过dmmal.ini中的MAL_INST_PORT/MAL_INST_HOST
create or replace link dmlinkdm2 connect 'DAMENG' with udm2 identified by "Dameng@1234" using '172.16.1.2/6162';
通过实例名(MAL_INST_NAME=DM2SVR)
SQL> create or replace link dmlinkdm2 connect 'DAMENG' with udm2 identified by "Dameng@1234" using 'DM2SVR';
操作已执行
已用时间: 5.288(毫秒). 执行号:601.
SQL> select count(*) from t2@dmlinkdm2;
行号 DBLINK_EXP_TMPALIAS_1
---------- ---------------------
1 1019
已用时间: 18.780(毫秒). 执行号:602.
SQL> select top 1 * from t2@dmlinkdm2;
行号 OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID
---------- ------ ----------- -------------- --------- --------------
OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP
----------- -------------------------- ------------- ---------
STATUS TEMPORARY GENERATED SECONDARY NAMESPACE EDITION_NAME
------ --------- --------- --------- --------- ------------
1 CTISYS CTISYS NULL 150994948 NULL
SCH 2024-04-05 18:12:29.544126 NULL NULL
VALID N NULL NULL NULL NULL
已用时间: 2.675(毫秒). 执行号:603.
SQL>
通过dmmal.ini中的MAL_HOST/MAL_PORT
SQL> create or replace link dmlinkdm2 connect 'DAMENG' with udm2 identified by "Dameng@1234" using '172.16.1.2/5236';
操作已执行
已用时间: 5.275(毫秒). 执行号:604.
SQL> select count(*) from t2@dmlinkdm2;
行号 DBLINK_EXP_TMPALIAS_1
---------- ---------------------
1 1019
已用时间: 20.070(毫秒). 执行号:605.
SQL> select top 1 * from t2@dmlinkdm2;
行号 OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID
---------- ------ ----------- -------------- --------- --------------
OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP
----------- -------------------------- ------------- ---------
STATUS TEMPORARY GENERATED SECONDARY NAMESPACE EDITION_NAME
------ --------- --------- --------- --------- ------------
1 CTISYS CTISYS NULL 150994948 NULL
SCH 2024-04-05 18:12:29.544126 NULL NULL
VALID N NULL NULL NULL NULL
已用时间: 3.395(毫秒). 执行号:606.
SQL>
SQL>
通过dmmal.ini中的MAL_INST_PORT/MAL_INST_HOST
SQL>
SQL> create or replace link dmlinkdm2 connect 'DAMENG' with udm2 identified by "Dameng@1234" using '172.16.1.2/6162';
操作已执行
已用时间: 5.022(毫秒). 执行号:607.
SQL> select count(*) from t2@dmlinkdm2;
行号 DBLINK_EXP_TMPALIAS_1
---------- ---------------------
1 1019
已用时间: 18.406(毫秒). 执行号:608.
SQL> select top 1 * from t2@dmlinkdm2;
行号 OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID
---------- ------ ----------- -------------- --------- --------------
OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP
----------- -------------------------- ------------- ---------
STATUS TEMPORARY GENERATED SECONDARY NAMESPACE EDITION_NAME
------ --------- --------- --------- --------- ------------
1 CTISYS CTISYS NULL 150994948 NULL
SCH 2024-04-05 18:12:29.544126 NULL NULL
VALID N NULL NULL NULL NULL
已用时间: 2.569(毫秒). 执行号:609.
SQL>
SQL>
SQL>
create or replace link dmlinkdm2 connect 'DPI' with udm2 identified by "Dameng@1234" using '172.16.1.2:5236';
SQL> create or replace link dmlinkdm2 connect 'DPI' with udm2 identified by "Dameng@1234" using '172.16.1.2:5236';
操作已执行
已用时间: 4.609(毫秒). 执行号:611.
SQL> select count(*) from t2@dmlinkdm2;
行号 DBLINK_EXP_TMPALIAS_1
---------- ---------------------
1 1019
已用时间: 10.041(毫秒). 执行号:612.
SQL> select top 1 * from t2@dmlinkdm2;
行号 OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID
---------- ------ ----------- -------------- --------- --------------
OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP
----------- -------------------------- ------------- ---------
STATUS TEMPORARY GENERATED SECONDARY NAMESPACE EDITION_NAME
------ --------- --------- --------- --------- ------------
1 CTISYS CTISYS NULL 150994948 NULL
SCH 2024-04-05 18:12:29.544126 NULL NULL
VALID N NULL NULL NULL NULL
已用时间: 7.559(毫秒). 执行号:613.
SQL>
[root@db1 ~]# yum -y install unixODBC
Last metadata expiration check: 0:02:42 ago on 2024年04月05日 星期五 18时52分53秒.
Dependencies resolved.
=============================================================================
Package Architecture Version Repository Size
=============================================================================
Installing:
unixODBC x86_64 2.3.7-2.ky10 ks10-adv-os 401 k
Transaction Summary
=============================================================================
Install 1 Package
Total download size: 401 k
Installed size: 1.3 M
Downloading Packages:
unixODBC-2.3.7-2.ky10.x86_64.rpm 1.3 MB/s | 401 kB 00:00
-----------------------------------------------------------------------------
Total 1.3 MB/s | 401 kB 00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : unixODBC-2.3.7-2.ky10.x86_64 1/1
Running scriptlet: unixODBC-2.3.7-2.ky10.x86_64 1/1
Verifying : unixODBC-2.3.7-2.ky10.x86_64 1/1
Installed:
unixODBC-2.3.7-2.ky10.x86_64
Complete!
[root@db1 ~]#
[root@db1 ~]# cat /etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description=ODBC DRIVER FOR DM8
DRIVER=/home/dmdba100/dmdbms/bin/libdodbc.so
[root@db1 ~]#
[root@db1 ~]# cat /etc/odbc.ini
[dm8]
Description=DM ODBC DSND
Driver= DM8 ODBC DRIVER
SERVER=172.16.1.2
UID=udm2
PWD=Dameng@1234
TCP_PORT=5236
[root@db1 ~]#
[root@db1 bin]# isql -v dm8
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
SQL>
SQL> create or replace link dmlinkdm2 connect 'ODBC' with udm2 identified by "Dameng@1234" using 'dm8';
操作已执行
已用时间: 5.105(毫秒). 执行号:901.
SQL> select count(*) from t2@dmlinkdm2;
行号 DBLINK_EXP_TMPALIAS_1
---------- ---------------------
1 1019
已用时间: 35.169(毫秒). 执行号:902.
SQL> select top 1 * from t2@dmlinkdm2;
行号 OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID
---------- ------ ----------- -------------- --------- --------------
OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP
----------- -------------------------- ------------- ---------
STATUS TEMPORARY GENERATED SECONDARY NAMESPACE EDITION_NAME
------ --------- --------- --------- --------- ------------
1 CTISYS CTISYS NULL 150994948 NULL
SCH 2024-04-05 18:12:29.544126 NULL NULL
VALID N NULL NULL NULL NULL
已用时间: 11.932(毫秒). 执行号:903.
SQL>
文章
阅读量
获赞