- 相关概念
优点:
1.DMHS 使用检查点机制实现断点续传,断点包括两个部分,即 DMHS 前置的变化数据捕捉模块数据抽取位置检查点和 DMHS 主程序的数据装载模块的已装载位置检查点。DMHS 的前置模块与主程序模块采取完备的消息应答机制来保障数据传输的可靠性和数据完整性。前置模块只有在得到确认消息后才认为数据传输完成,否则将自动重新传输数据。
2.DMHS 对复制的数据内容做了 CRC 校验,保证收到的数据是可靠无误的。
3.支持初次数据装载全同步功能,能够在不中断业务的情况下,将源数据库中的当前数据平滑的装载到目标数据库中。
4.通过分析源数据库的日志后以源端事务为单位发送给目标数据库的,源数据库日志中记录的事务是严格有序的,目标数据库严格按照源数据库上的事务顺序在目标数据库上实施数据复制同步,目标数据库上所执行的事务一定是源数据库已经提交完成的事务,DMHS 可保障目标数据库与源数据库的事务级完整性和一致性
5.支持多种复制结构,支持一对一同步 、一对多广播型同步 、多对一聚合型同步 、双向同步、多对多同步、多级中转级联同步等多种数据同步形式,支持组合多种同步形式以搭建复杂的拓扑结构
6.持多种异构数据平台,源数据库可支持 DM 各系列、Oracle9i、Oracle10g、Oracle11g、Oracle12c、ORACLE RAC 集群、DB2、PostgreSQL、MySQL 等。目的数据库支持具有 ODBC 标准接口实现的各种主流关系数据库管理系统,目前适配过的数据库有 DM 各系列、DM 集群、Oracle9i、Oracle10g、Oracle11g、Oracle12c、ORACLE RAC 集群、DB2、Sybase、SQLServer、PostgreSQL、MySQL 等
7.支持多种计算机操作系统平台,支持 Windows 系列、Linux 系列、IBM AIX、HP-UNIX 系列、Solaris 系列、国产操作系统 Kylin、Rocky 等 32 位和 64 位操作系统。
- 安装数据库
安装DM8并初始化实例
修改dm.ini
ARCH_INI=1
RLOG_APPEND_LOGIC=1
FAST_COMMIT=0
打开归档
Alter database mount;
Alter database add archivelog ‘dest=/opt/fordmhs/dmdb/DAMENG/arch,type=local,file_size=1024,space_limit=2048'
ALTER DATABASE ARCHIVELOG;
- 安装DMHS
- 配置
1. 配置dmhs_server的参数文件
源端dhms.hs
<?xml version="1.0" encoding="utf-8"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<siteid>1</siteid>
<version>4.0</version>
</base>
<cpt>
<db_type>dm8</db_type>
<db_server>10.15.1.11</db_server><!-- 源端IP或者主备服务器上配置服务名dmhs,默认127.0.0.1 -->
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5237</db_port>
<db_name></db_name>
<ddl_mask>obj:op</ddl_mask><!--DDL配置项-->#若不需要同步DDL操作,则为空
<parse_thr>1</parse_thr>
<arch>
<clear_interval>600</clear_interval><!-- 归档文件清理间隔,默认为600s,最小值60s,最大值2000000000s -->
<clear_flag>0</clear_flag><!-- 清除归档日志的方式,可选项0(无动作), 1(删除归档文件), 2(表示移走归档文件) -->
<bak_dir></bak_dir><!-- clear_flag项配置成2时,该配置项可以用来指定归档文件转移的目录,如果未配置这项,则转移到归档路径的log_bak目录下 -->
</arch>
<send>
<ip>10.15.1.12</ip><!-- 目的端IP,默认127.0.0.1 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口,默认为5345,最小值1000,最大值65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号,默认为5346,最小值1000,最大值65535 -->
<level>0</level>
<trigger>0</trigger><!-- 是否忽略触发器,默认为0,限定值0,1 -->
<constraint>0</constraint>
<identity>0</identity>
<net_turns>0</net_turns>
<filter><!--过滤配置项-->#过滤规则,先判断白名单,再判断黑名单,存在重叠的,都会被过滤-->
<enable><!-- 白名单,允许同步的表-->
<item>HYL.*</item>
</enable>
<disable>
</disable>
</filter>
<map><!-- 映射配置-->
</map>
</send>
</cpt>
</dmhs>
目标端dmhs.hs
<?xml version="1.0" encoding="utf-8"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>2</chk_interval>
<siteid>2</siteid>
<version>4.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>dm8</db_type>
<db_server>10.15.1.12</db_server><!--目的端数据库服务名或IP -->
<db_user>SYSDBA</db_user><!--数据库用户名,默认为SYSDBA -->
<db_pwd>SYSDBA</db_pwd><!--数据库口令,默认为SYSDBA -->
<db_port>5237</db_port><!—数据库端口号,默认为5236 -->
<exec_thr>4</exec_thr>
<exec_sql>512</exec_sql>
<exec_trx> 5000 </exec_trx>
<exec_rows>1000</exec_rows>
<exec_policy>2</exec_policy>
</exec>
</dmhs>
- 源端打开DDL同步
SQL> start /opt/fordmhs/dmhs/scripts/ddl_sql_dm8.sql
检查创建的触发器和辅助表是否有效
select owner, table_name,status from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' ;
- 启动
- 启动源端和目标端的dmhs_server,这个没有先后顺序,因为此时还没有启动同步。此时5345端口被打开。
2. 启动目标端的dmhs_console,连接到5345端口后,执行start exec ,此时 data_port 5346被打开(要用root用户执行,否则打不开这个端口)
3. 启动源端的dmhs_console,连接到5345端口后,进行初始装载
copy 0 "sch.name='HYL'" DICT|LSN|CREATE|INSERT|INDEX
(Copy mark is :create|insert|index|table|dict|lsn|objid|rep)
- 开始同步
Start cpt
- 故障处理:
- 执行DDL脚本提示:[-70009]:UTF string not integrated.
数据库字符集改为utf8,或者修改脚本
- 目标端执行start exec
环境变量LD_LIBRARY_PATH没有配置正确
欢迎访问达梦社区:http://eco.dameng.com