DMHS DM7-DM7(双向同步)
达梦数据实时同步软件 DMHS 是达梦公司推出的一款支持异构环境的高性能、高可靠和高可扩展的数据库实时同步系统。该产品基于成熟的关系数据模型和标准接口,跨越多种软硬件平台实现秒级数据实时同步。该产品可广泛应用于应急系统、容灾备份、负载均衡、数据移植、联机维护、订阅分发和多业务中心等业务领域。
达梦数据实时同步软件 DMHS, 通过秒级数据实时同步可以有效避免传统备份系统导致的无法完全满足企业对于信息系统不中断服务的问题;通过变化日志捕捉可以有效降低传统 ETL 工具因创建触发器、影子表等对业务系统带来的性能影响;通过可读写的备机数据库系统可以解决传统备机系统仅作为后备而无法对外提供数据服务的问题。 DMHS 简易实现原理如下图所示。
- 搭建软件准备
源端为DM7,需要申请对应操作系统的同步源为DM7的DMHS版本。
目的端为DM7,需要申请对应操作系统的执行端为DM7的DMHS版本。
若源端和目的端的操作系统环境相同,可以使用同一版本。
1.环境检查
1.1. 源端以及目的端环境检查
(1)运行用户检查
对于Windows平台,执行DMHS的用户必须是管理员身份。
对于Linux平台,执行用户必须有权限读写DMHS安装目录。
(2)归档日志检查
当同步源数据库是DM7时,需要开启联机归档日志,并且打开逻辑追加日志。
- 检查DM7是否启用归档:
注:ARCH_MODE 为“Y”,表示启用归档;为“N”,表示未启用。
查看DM7归档信息:
- 检查逻辑追加日志是否打开
注:RLOG_APPEND_LOGIC为“1”,表示逻辑追加日志启用;为“0”表示未启用。
如果源端未开启归档,使用如下方法开启归档:
-
- 将DM7数据库配置文件“dm.ini”中的ARCH_INI参数值设置为1。
在与dm.ini相同目录下,增加配置文件“dmarch.ini”,并添加归档配置参数内容(可以参见dmarch_example.ini文件配置格式)。示例如下:
[ ARCHIVE_LOCAL1] ARCH_TYPE = LOCAL ARCH_DEST = D:\dmdbms\DM7\arch ARCH_FILE_SIZE = 512 ARCH_SPACE_LIMIT = 0 |
- 重启数据库服务,使数据库归档模式生效。
如果源端未开启逻辑追加日志,使用如下方法进行开启:
- 将DM7数据库配置文件“dm.ini”中的RLOG_APPEND_LOGIC参数的值设置为1。
重启数据库服务,使配置生效。
- DDL同步管理检查
DDL同步功能默认是不支持的,需要在源端数据库进行配置才能使用。开启DDL同步,需要将DMHS安装程序中提供的对应DM7数据库的SQL脚本在源端数据库进行执行,并且需要对DMHS配置文件中的DDL_MASK选项进行配置。DDL同步SQL脚本会在源端数据库的SYSDBA模式下建立相关中间表和触发器。
-
- 源端数据库是否通过HA管理
源端数据库是否通过HA管理,请咨询现场数据库DBA或实施人员。如果源端数据库是通过HA进行管理的,则配置DMHS的时候需要将整个DMHS部署到HA管理的阵列上或者将DMHS配置<DICT_DIR>中字典存放目录指定为HA管理阵列。
- 源端是否为主备环境
如果在主备环境上搭建DMHS,在进行数据装载的时候指定的IP必须是主机的IP,不能为备机IP。
- 检查系统环境变量PATH以及LD_LIBRARY_PATH中是否设置了DM7的安装路径。
LINUX平台:echo $LD_LIBRARY_PATH
WINDOWS平台: echo %PATH%
- 对于LINUX平台,注意$LANG环境变量与配置文件中char_code参数配置一致。
- DMHS软件的安装
DMHS软件的安装参照用户手册。在Windows系统下安装时,安装用户须为管理员身份;在Linux系统下安装时,安装用户须有权限读写DMHS安装目录。
- 配置DMHS
如果有一端需要有DDL同步,DDL同步脚本需要在两台机器的数据库上均执行。
3.1 源端配置文件
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
</base>
<recv>
<data_port>5346</data_port>
<exec>
<db_type>DM7</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<level>0</level>
<exec_mode>0</exec_mode>
<exec_thr>4</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx>5000</exec_trx>
<exec_rows>250</exec_rows>
<case_sensitive>1</case_sensitive>
<toggle_case>0</toggle_case>
<exec_policy>0</exec_policy>
<commit_policy>1</commit_policy>
<enable_merge>1</enable_merge>
</exec>
</recv>
<cpt>
<db_type>DM7</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<idle_time>10</idle_time>
<ddl_mask>TABLE:INDEX:TRUNCATE:CREATE:DROP:ALTER</ddl_mask>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>1</clear_flag>
</arch>
<send>
<ip>XX.XX.XX.XX</ip><!--对方IP-- >
<mgr_port>5345</mgr_port><!--对方管理端口-- >
<data_port>5346</data_port><!--对方数据端口-- >
<net_pack_size>256</net_pack_size>
<net_turns>0</net_turns>
<crc_check>0</crc_check>
<trigger>0</trigger>
<constraint>0</constraint>
<identity>0</identity>
<filter>
<enable>
<item>SYSDBA.*</item>
</enable>
<disable/>
</filter>
<map>
<item>SYSDBA.* == SYSDBA.*</item>
</map>
</send>
</cpt>
</dmhs>
3.2 目的端配置文件
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>2</siteid>
</base>
<recv>
<data_port>5346</data_port>
<exec>
<db_type>DM7</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<level>0</level>
<exec_mode>0</exec_mode>
<exec_thr>4</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx>5000</exec_trx>
<exec_rows>250</exec_rows>
<case_sensitive>1</case_sensitive>
<toggle_case>0</toggle_case>
<exec_policy>0</exec_policy>
<commit_policy>1</commit_policy>
<enable_merge>1</enable_merge>
</exec>
</recv>
<cpt>
<db_type>DM7</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<idle_time>10</idle_time>
<ddl_mask></ddl_mask>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>1</clear_flag>
</arch>
<send>
<ip>XX.XX.XX.XX</ip><!--对方IP-- >
<mgr_port>5345</mgr_port><!--对方管理端口-- >
<data_port>5346</data_port><!--对方数据端口-- >
<net_pack_size>256</net_pack_size>
<net_turns>0</net_turns>
<crc_check>0</crc_check>
<trigger>0</trigger>
<constraint>0</constraint>
<identity>0</identity>
<filter>
<enable>
<item>SYSDBA.*</item>
</enable>
<disable/>
</filter>
<map>
<item>SYSDBA.* == SYSDBA.*</item>
</map>
</send>
</cpt>
</dmhs>
- 启动DMHS服务以及数据装载
4.1 数据装载
检查DMHS安装目录下是否存在dmhs_cpt.tmp文件,如果存在则将该文件删除。
1)启动两端的dmhs服务
cd /opt/dmhs/bin
./dmhs_server
2)启动两端的执行服务
./dmhs_console
Connect
Start exec;
此处一定要用exec和cpt分别启动,不能用start命令,start命令不接cpt或exec默认根据配置文件即会启动cpt也会启动exec
3)数据装载
将有数据的一端将数据装载到另外一端
Copy 0 “sch.name=’****’” create|insert
装载完成后将装载执行端的dm7的归档日志删除并重启dm7服务器,只保留重启后的归档日志,才能保证过滤掉装载数据的重复。
装载完成后在另外一端需要装载字典
Copy 0 “sch.name=’****’” dict|clear
4)启动两端的cpt服务
./dmhs_console
Connect
Start cpt