DHMS 搭建(达梦到达梦)
DMHS软件概述
DMHS全称是Heterogeneous database Synchronization for DM,即达梦异构数据库同步软件。DMHS是基于数据库日志,支持同构、异构数据库的实时同步软件,可以实现双业务中心架构。
DMHS软件功能非常丰富,支持多种架构场景,主流数据实时同步软件的相关功能DMHS都已实现并且根据实际业务需求丰富了更多功能。主流的数据实时同步软件主要有:Oracle GoldenGate、DSG RealSync、Quest Shareplex等。
搭建准备
准备两台虚拟机,都安装上dm8 (/dm8),都安装dmhs软件(/dm8/dmhs),初始化两个数据库,源端数据库IP: 192.168.118.11:5236 目的端数据库IP:192.168.118.12:5236
开启归档和逻辑日志(两台都要配置)
1 设置归档标记和逻辑日志标记。打开 DM8服务器配置文件“dm.ini”,设置如下值:
ARCH_INI = 1
RLOG_APPEND_LOGIC = 1
2 添加归档配置文件。在“dm.ini”同目录下创建文件“dmarch.ini”,示例内容如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm8/arch #归档目录
ARCH_FILE_SIZE = 128 #归档文件大小,单位 MB
ARCH_SPACE_LIMIT = 0 #空间大小限制,0 表示不限制
3 重启 DM8 数据库,使配置参数生效。
4 验证配置的正确性
a) 检查归档配置的正确性,请执行以下 SQL 命令:
SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL'AND ARCH_IS_VALID='Y';
b) 检查逻辑日志配置的正确性,通过下面的查询:
SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';
c) 检查在线日志,通过如下的查询:
SELECT PATH FROM SYS.V$RLOGFILE;
d) 检查 FAST_COMMIT 参数是否为 0
select para_value from v$dm_ini where para_name = 'FAST_COMMIT';
开启DDL同步参数 (不建议开启)
第一种:
首先查询数据库系统参数“RLOG_APPEND_SYSTAB_LOGIC”是否开启,该参数启用在日志中记录系统表逻辑操作功能。该参数默认取值为0,即不启用;设置为1时,启用该功能。
使用SQL查询该参数的值:
select * from v$dm_ini where para_name='RLOG_APPEND_SYSTAB_LOGIC';
调用系统过程,开启RLOG_APPEND_SYSTAB_LOGIC参数的值为1
SP_SET_PARA_VALUE(2,'RLOG_APPEND_SYSTAB_LOGIC',1);
开启DDL同步参数,后面还需要在DMHS配置文件中进行ddl_mask参数配置,用于设置DDL同步对象及操作。
第二种:
执行DDL同步脚本方式。在源端DM7数据库中以SYSDBA用户执行DDL同步脚本,在SYSDBA模式下创建相关DMHS系统表及触发器,并在DMHS配置文件中配置ddl_mask参数选项以启用该功能。
同步脚本位于DMHS安装目录的scripts子目录下
配置 dmhs.hs
1 在源端机器上dmhs安装路径下编写dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>ch</lang>
<version>2.0</version>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
</base>
<cpt>
<db_type>DM8</db_type>
<db_server>127.0.0.1</db_server>
<db_port>5236</db_port>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<parse_thr>1</parse_thr>
<ddl_mask>TABLE:OPERATION</ddl_mask>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>2</clear_flag>
<bak_dir>/dm8/arch/</bak_dir>
</arch>
<send>
<ip>192.168.118.12</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<filter>
<enable>
<item>SYSDBA.*</item>
<item>SYSDBA.TEST</item>
<item>SYSDBA.##HISTOGRAMS_TABLE</item>
<item>SYSDBA.TEST2</item>
</enable>
<disable>
<item>SYSDBA.TEST</item>
<item>SYSDBA.##PLAN_TABLE</item>
<item>SYSDBA.##HISTOGRAMS_TABLE</item>
</disable>
</filter>
<map>
<item>SYSDBA.TEST==TEST.TEST</item>
<item>SYSDBA.*==SYSDBA.*</item>
<item>SYSDBA.TEST1==SYSDBA.T1</item>
<item>SYSDBA.TEST2==SYSDBA.TEST2</item>
</map>
</send>
</cpt>
</dmhs>
2 在目的端192.168.118.124编写dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>ch</lang>
<version>2.0</version>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>2</siteid>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>DM8</db_type>
<db_server>127.0.0.1</db_server>
<db_port>5236</db_port>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<recv_caches>8</recv_caches>
<trxid_tables>1</trxid_tables>
<exec_thr>4</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx> 5000 </exec_trx>
<exec_rows>1000</exec_rows>
<enable_merge>1</enable_merge>
<affect_row>1</affect_row>
<enable_ckpt_range>0</enable_ckpt_range>
<update_duplicate>0</update_duplicate>
</exec>
</dmhs>
开启目标 DMHS 服务
./dmhs_serverd start
./dmhs_console
DMHS >connect
DMHS >start
开启源端 DMHS 服务: 初始装载:
./dmhs_serverd start
./dmhs_console
DMHS >connect
DMHS >copy 0 "sch.name='SYSDBA'" DICT|LSN|CREATE|INSERT|INDEX
DMHS >start
常见报错,启动服务时如下,
修改dmhs.serverd 文件
配置环境变量 vim /etc/profile
PATH=$PATH:$HOME/bin
export PATH
export DMHS_HOME=/dm8/dmhs
export LD_LIBRARY_PATH=/dm8/dmhs/bin:$LD_LIBRARY_PATH:/dm8/bin
还是报错。删掉 dmhs.key ,启动成功