DM-DM DBLINK支持3种连接方式创建,分别是:dmmal、dpi、odbc。
其中odbc属于第三方接口需要安装odbc环境,dmmal和dpi属于自带接口。dmmal需要提前配置dmmal.ini文件并配置数据库参数MAL_INI=1重启数据库服务生效。dpi类型相较前面两种,不需要单独环境,安装数据库软件之后自带支持dpi接口,也不需要配置其他的配置文件和数据库参数,但是dpi类型dblink为新版本(2023年版本开始)新添加支持,以前版本中不支持。
(1)数据库版本:
DM Database Server 64 V8
DB Version: 0x7000c
03134283904-20220714-165042-20005
(2)数据库信息
本地:端口 5236,实例名DMSERVER01,字符集GB18030
远端:端口 5237,实例名DMSERVER02,字符集GB18030
(3)已配置LD_LIBRARY_PATH环境变量
echo /usr/local/lib > /etc/ld.so.conf.d/libodbc.conf
echo /home/dmdba/dm128/bin > /etc/ld.so.conf.d/dm8.conf
ldconfig
dmmal类型dblink,需要两端数据库设置dm.ini参数MAL_INI=1,并配置相同的dmmal.ini文件,重启数据库服务生效。
创建语法:
---方式1 ---mal_inst_host/mal_inst_port
create link "链接名" connect 'DAMENG' with "用户名" identified by "密码" using '实例IP地址/实例端口号';
---方式2 ---mal_host/mal_port
create link "链接名" connect 'DAMENG' with "用户名" identified by "密码" using 'MAL IP地址/MAL 端口号';
---方式3 ---mal_inst_name
create link "链接名" connect 'DAMENG' with "用户名" identified by "密码" using '实例名';
1、设置dm.ini文件中MAL_INI参数值为1
sp_set_para_value(2,'MAL_INI',1);
或者直接vi dm.ini文件修改文件中MAL_INI参数值
2、创建并配置dmmal.ini文件,(dmmal.ini文件路径为dm.ini中的CONFIG_PATH值,默认与系统库目录相同)
vi dmmal.ini 内容如下:
[MAL_INST1]
MAL_INST_NAME=DMSERVER01
MAL_HOST=192.168.238.20
MAL_PORT=62141
MAL_INST_PORT=5236
MAL_INST_HOST=192.168.238.20
[MAL_INST2]
MAL_INST_NAME=DMSERVER02
MAL_HOST=192.168.238.20
MAL_PORT=62142
MAL_INST_PORT=5237
MAL_INST_HOST=192.168.238.20
关于dmmal.ini中相关配置项的含义,参考《DM8 系统管理员手册》。
3、重启两端数据库服务
cd $DM_HOME/bin
./DmServiceXXX restart
本地库访问远端库,在本地库中创建dblink。
################方式1
SQL> create link LINK_M1 connect 'DAMENG' with "SYSDBA" identified by "SYSDBA" using '192.168.238.20/5237';
操作已执行
已用时间: 17.286(毫秒). 执行号:1300.
SQL>
SQL> select * from T1@LINK_M1;
行号 ID
---------- -----------
1 1
SQL>
################方式2
SQL> create link LINK_M2 connect 'DAMENG' with "SYSDBA" identified by "SYSDBA" using '192.168.238.20/62142';
操作已执行
已用时间: 6.763(毫秒). 执行号:1302.
SQL> select * from T1@LINK_M2;
行号 ID
---------- -----------
1 1
已用时间: 14.197(毫秒). 执行号:1303.
SQL>
################方式3
SQL> create link LINK_M3 connect 'DAMENG' with "SYSDBA" identified by "SYSDBA" using 'DMSERVER02';
操作已执行
已用时间: 6.312(毫秒). 执行号:1304.
SQL> select * from T1@LINK_M3;
行号 ID
---------- -----------
1 1
已用时间: 16.392(毫秒). 执行号:1305.
SQL>
odbc类型的dblink,本地端数据库服务器上需要安装odbc包,并配置odbc数据源。
创建语法:
create link "链接名" connect 'ODBC' with "用户名" identified by "密码" using 'ODBC数据源名称';
1、Linux环境odbc包安装(两种方式均可)
(1)方式一、源码编译安装
[root@localhost ~]# tar -zxvf unixODBC-2.3.9.tar.gz
[root@localhost ~]# cd unixODBC-2.3.9
[root@localhost unixODBC-2.3.9]# ./configure --enable-gui=no
[root@localhost unixODBC-2.3.9]# make
[root@localhost unixODBC-2.3.9]# make install
(2)方式二、yum安装unixODBC、unixODBC-devel
(3)配置odbcinst.ini和odbc.ini文件
源码编译方式安装的odbc包对应配置文件目录为: /usr/local/etc/
yum方式安装的odbc包对应的配置文件路径为:/etc
odbcinst.ini配置文件内容:
[DM8 ODBC DRIVER]
Description=ODBC DRIVER FOR DM8
DRIVER=/home/dmdba/dm128/bin/libdodbc.so ---$DM_HOME/bin/libdodbc.so
odbc.ini 配置文件内容:
#####IP方式访问
[dm8]
Description=DM ODBC DSND
Driver= DM8 ODBC DRIVER
SERVER=192.168.238.20
UID=SYSDBA
PWD=SYSDBA
TCP_PORT=5237
#####DM 服务名方式访问
[dm8_svc]
Description=DM ODBC DSND
Driver= DM8 ODBC DRIVER
SERVER=SERVER_5237 ### dm_svc.conf中配置的服务名
UID=SYSDBA
PWD=SYSDBA
TCP_PORT=5237
(4)dm_svc.conf文件配置如下:
[root@localhost ~]# cat /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(cn)
SERVER_5237=(192.168.238.20:5237)
2、Windows环境ODBC配置
Windows系统配置较简单,Windows管理工具中打开"ODBC数据源(64位)"进行配置DSN。
本地库访问远端库,在本地库中创建dblink。
####使用IP方式的odbc数据源
SQL> create link LINK_ODBC connect 'ODBC' with "SYSDBA" identified by "SYSDBA" using 'dm8';
操作已执行
已用时间: 17.831(毫秒). 执行号:1600.
SQL> select * from T1@LINK_ODBC;
行号 ID
---------- -----------
1 1
####使用服务名方式的odbc数据源
SQL> create link LINK_ODBC_SVC connect 'ODBC' with "SYSDBA" identified by "SYSDBA" using 'dm8_svc';
操作已执行
已用时间: 9.148(毫秒). 执行号:700.
SQL> select * from T1@LINK_ODBC_SVC;
行号 ID
---------- -----------
1 1
已用时间: 80.391(毫秒). 执行号:701.
SQL>
dpi类型的dblink,达梦数据库软件安装完成后自带DPI库,无需进行其他配置操作即可在数据库中直接创建dblink。
创建语法:
---方式1 IP:端口
create link "链接名" connect 'DPI' with "用户名" identified by "密码" using 'IP:端口';
---方式2 使用dm_svc.conf中服务名
create link "链接名" connect 'DPI' with "用户名" identified by "密码" using '服务名';
#### IP:Port的方式
SQL> create link LINK_DPI connect 'DPI' with "SYSDBA" identified by "SYSDBA" using '192.168.238.20:5237';
操作已执行
已用时间: 13.716(毫秒). 执行号:1800.
SQL> select * from t1@LINK_DPI;
行号 ID
---------- -----------
1 1
已用时间: 9.878(毫秒). 执行号:1801.
#### 服务名的方式
SQL> create link LINK_DPI_SVC connect 'DPI' with "SYSDBA" identified by "SYSDBA" using 'SERVER_5237';
操作已执行
已用时间: 776.228(毫秒). 执行号:702.
SQL>
SQL> select * from T1@LINK_DPI_SVC;
行号 ID
---------- -----------
1 1
已用时间: 158.347(毫秒). 执行号:703.
注:上述第8项主要是指dmmal方式的dblink。
在上面测试中使用服务名方式创建DBLINK之后,使用对应dblink查询遇到报错"连接丢失"。初步判断该问题的原因可能是环境变量加载的问题,本次测试时处理的方法是重启数据库服务(或者重启操作系统)解决,使用数据库IP均正常。
1、当前版本开始,达梦数据库DBLINK的支持多种类型的DBLINK,包括DM-DM、ODBC、DPI、DM-ORACLE(OCI)。
2、对于DM与DM之间的DBLINK,三种方式中,使用DPI方式配置上最为方便,ODBC方式需要安装ODBC包并配置ODBC数据源,dmmal方式需要设置MAL_INI数据库参数、配置dmmal.ini文件并需要重启数据库服务。
3、该版本之后的正式发布的版本,ODBC、DPI方式应该支持了本地端通过创建远端对象dblink同义词(包同义词、序列同义词、函数同义词等)调用相关方法。比如:
---seq1为远端序列
create or replace SYNONYM sym_seq1 for seq1@LINK1;
select sym_seq1.nextval from dual;
4、使用使建议阅读《SQL使用手册》上DBLINK相关使用介绍以及使用限制。
5、随着产品不断完善,DBLINK支持的相关功能也会越来越完善。大家如果有其他DBLINK相关需求以及其他功能需求可以在社区发帖留言。
文章
阅读量
获赞