DM<>DM间的DBLINK(包括DM DSC、主备等集群),支持两种配置方式,一是通过mal系统,只需要通过配置 dmmal.ini 文件即可实现dblink。二是采用通用ODBC进行连接。以下以DM DSC集群<>DM8单机间的DBLINK为例,就两种方式分别进行说明。
一、配置dmmal实现dblink
配置dmmal要求每一个需要进行DBLINK连接的实例的mal项,都需要加入到dmmal.ini配置文件中,并且各个需要连接的实例中的dmmal.ini要求相同。
配置dmmal.ini文件时需要注意:
1、配置后需要重启实例
2、DM内部通讯是通过MAL_HOST和MAL_PORT进行互信,所以要求dmmal.ini中配置的所有MAL_HOST能够网络互通。
3、dmmal.ini中配置的MAL_INST_NAME,目前不可以重复,即要求各实例的实例名不能相同。
4、配置了dmmal.ini的实例,dm.ini中的MAL_INI需要设置为1
以下为DM DSC中dmmal.ini配置(DM DSC中各节点dmmal.ini配置均相同)。
MAL_CHECK_INTERVAL=87
MAL_CONN_FAIL_INTERVAL=33
MAL_SYS_BUF_SIZE=6000
MAL_BUF_SIZE=3000
MAL_VPOOL_SIZE=5000
MAL_COMPRESS_LEVEL=0
[mal_inst0]
mal_inst_name = DSC0
mal_host = DSC0心跳网
mal_port = 9340
MAL_INST_HOST = DSC0业务网
MAL_INST_PORT = 31236
MAL_LINK_MAGIC = 0
[mal_inst1]
mal_inst_name = DSC1
mal_host = DSC1心跳网
mal_port = 9342
MAL_INST_HOST = DSC1业务网
MAL_INST_PORT = 31236
MAL_LINK_MAGIC = 0
[mal_inst2]
mal_inst_name = DSC2
mal_host = DSC2心跳网
mal_port = 9344
MAL_INST_HOST = DSC2业务网
MAL_INST_PORT = 31236
MAL_LINK_MAGIC = 0
[mal_inst3] #单节点配置项
mal_inst_name = DMSERVER
mal_host = 单机心跳网
mal_port = 9348
MAL_INST_HOST = 单机业务网
MAL_INST_PORT = 5238
MAL_LINK_MAGIC = 0 #MAL链路网段标识,有效值范围(0-65535)。默认 0 。
设置此参数时,同一网段内的节点都设置相同,不同网段内的节点设置的值必须不同
搭建跨网段的DBLINK时如果内外网不通,则必须配置此参数,如果内外网互通,则
可以不配
DM8单机与DM DSC中的dmmal.ini配置也完全相同。
注:目前DM支持动态加载dmmal.ini配置,不需要重启数据库服务,也可以添加并应用mal配置项,过程如下:
SQL>SF_MAL_CONFIG(1,0); --开启MAL配置状态
SQL>SF_MAL_INST_ADD(ITEM_NAME,INST_NAME,MAL_IP,MAL_PORT,MAL_INST_IP,MAL_I NST_PORT,MAL_DW_PORT,MAL_LINK_MAGIC,MAL_INST_DW_PORT);
--可以新增配置项,不能修改和删除,设置时会对新增配置项的内容进行校验
SQL>SF_MAL_CONFIG_APPLY(); --MAL配置生效
SQL>SF_MAL_CONFIG(0,0); --关闭
集群内如果用该方法进行配置,每节点均需要运行。
dmmal.ini修改后重启实例,先测试DM8单机到DM DSC集群的DBLINK.
使用DISQL连接到单机的实例,然后创建DBLINK。
SQL>CREATE or replace PUBLIC LINK DSC CONNECT 'DAMENG' WITH SYSDBA
IDENTIFIED BY SYSDBA USING 'DSC0业务网/31236, DSC1业务网/31236, DSC2业务网/31236';
--注意
1.外部连接串中的IP/端口也可以用实例名来代替,即'DSC0,DSC1,DSC2'.
2.连接串中可以使用dmmal.ini中配置的心跳网,即MAL_HOST/MAL_PORT,也可以使用业务网,即MAL_INST_HOST/MAL_INST_PORT.建议配置业务网的ip和端口。
3.连接串中默认是有连接顺序的,优先连接DSC0,当DSC0故障或无法连接时,连接DSC1.
DBLINK创建成功后,可以进行查询。
SQL>SELECT COUNT(*) FROM ALL_TABLES@DSC;
有返回值,测试成功。
接下来再测试DM DSC集群到DM8单机的DBLINK.
使用DISQL连接到DM DSC中的任意节点上,然后创建DBLINK。
SQL>CREATE or replace LINK LINK01 CONNECT 'DAMENG' WITH SYSDBA
IDENTIFIED BY SYSDBA USING '单机业务网/5238';
---创建成功
SQL>SELECT * FROM V$INSTANCE@LINK01;
-----返回DMSERVER
DM DSC的任意节点上,都可以使用LINK01进行查询。
测试成功后,删除DBLINK.
--删除DM8到DM DSC DBLINK
SQL>DROP LINK LINK01;
--删除DMDSC 到DM8 DBLINK
DROP PUBLIC LINK DSC;
二、采用ODBC实现dblink
1、root用户安装Unixodbc
tar -xvf unixODBC-2.3.7.tar.gz -C /usr/local
cd /usr/local/unixODBC-2.3.7
./configure --prefix=/usr/local/unixODBC-2.3.7 --includedir=/usr/include --libdir=/usr/lib --bindir=/usr/bin --sysconfdir=/etc
make
make install
make clean
安装后测试,odbcinst -j
若报错:odbcinst: error while loading shared libraries: libodbcinst.so.2: cannot open shared object file: No such file or directory
则执行ldconfig,关联so
2、在odbcinst.ini中增加如下内容:
[DM ODBC DRIVER]
Description = ODBC driver for DM
Driver = /home/dmdba/dm8_190/dmdbms/bin/libdodbc.so
3、在odbc.ini中增加如下内容:
[DM2]
Description = DM ODBC DSN
Driver = DM ODBC DRIVER
SERVER = DSC #DSC为DSC集群配置的服务名
UID = SYSDBA
PWD = SYSDBA_PWD
TCP_PORT = 31236
由于DM8单机dblink到DSC集群,需要连接DSC的服务名,所以需要在DM8单机的服务器中配置dm_svc.conf,默认在/etc下。
TIME_ZONE=(480)
LANGUAGE=(en)
DSC=(IP1:31236,IP2:31236,IP3:31236)
[DSC]
CLUSTER=(DSC)
DO_SWITCH=(2)
SWITCH_TIMES=(2000)
SWITCH_INTERVAL=(300)
配置好之后,做连接测试,isql DM2 -v
若出现报错:libdodbc.so file not found,排查环境变量是否设置正确,配置如下:
source /home/dmdba/.bash_profile
测试:
连接成功。然后通过disql连接数据库,创建DBLINK:
DSC到DM8单机的dblink类似,各节点均需要配置ODBC信息。