一 环境介绍
机器名 | IP | 备注 |
DM7_A | 192.168.1.101 | 主备集群-A节点 |
DM7_B | 192.168.1.102 | 主备集群-B节点 |
DM7_C | 192.168.1.103 | 主备集群-确认监视器 |
DM7_D | 192.168.1.104 | 目的端单机库 |
二 环境检查
1 检查是否开启归档
SQL> SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL' AND ARCH_IS_VALID='Y';
2 检查是否开启逻辑附加日志
SQL> SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';
3 开启归档(主备集群开启归档可忽略)
SQL>alter database mount;
SQL>alter database add archivelog ‘dest=/dbarch/dmarch,type=local,file_size=2048,,space_limit=20480’;
SQL>alter database archivelog;
SQL> alter database open;
4开启逻辑附加日志
SQL>SP_SET_PARA_VALUE(1,’RLOG_APPEND_LOGIC,1);
SQL>COMMIT;
5 检查重做日志
SQL> SELECT PATH FROM SYS.V$RLOGFILE;
6 检查FAST_COMMIT参数是否为0
SQL> SELECT PARA_VALUE FROM V$DM_INI WHERE PARA_NAME = 'FAST_COMMIT';
三 安装DMHS
分别在A、B、D三台机器上安装DMHS
四、配置DDL
如果需要同步DDL则需要创建DDL触发器和辅助表。Sql脚本在dmhs/scripts目录下,根据实际需要选择对应版本的sql脚本文件执行。只需要在主库执行sql脚本,备库自动同步
五 修改配置文件
1 数据守护中A\B两个节点配置文件一致,注意将group修改为1,db_server修改为dm_svc.conf中的主备集群服务名,同时主备节点中siteid一致。
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base><!-- MGR 配置在 dmhs.hs 配置文件中对应 base 元素 -->
<lang>ch</lang><!-- 语言选项,ch 为中文,en 为英文 -->
<mgr_port>5345</mgr_port><!-- 管理端口,同步服务起动以后,会监听该端口
上的连接,用于执行客户端工具发过来的命令和接收统计信息 -->
<chk_interval>3</chk_interval><!-- 状态轮询间隔,默认为 3s,最小值 1s,最大
值 60s -->
<ckpt_interval>60</ckpt_interval><!-- 参数表示执行端 EXEC 模块检查点刷新的
时间间隔,单位为秒 -->
<siteid>1</siteid><!-- 站点 ID,这个 ID 配置时要注意,全局唯一,最小值 0,最
大值 65535 -->
<version>2.0</version><!-- 配置文件的版本号 -->
<group>1</group><!-- 是否启用主备功能 -->
</base>
<cpt><!-- 日志分析模块,这项配置可以配置多个,也就是可以配置多个捕获模块,如果
该节点只作为执行端,该节点需要删除 -->
<db_type>dm7</db_type><!-- 数据库类型 -->
<db_server>dm7_watcher</db_server><!-- 数据库服务名或 IP,默认为 127.0.0.1 -->
<db_user>SYSDBA</db_user><!-- 数据库用户名,默认为 SYSDBA -->
<db_pwd>SYSDBA</db_pwd><!-- 数据库口令,默认为 SYSDBA -->
<db_port>5236</db_port><!-- 数据库端口号,默认为 5236 -->
<dict_dir>/dbbak/dmhs_dict</dict_dir><!-- 离线字典存放目录 -->
<char_code>PG_GB18030</char_code><!-- 源端数据库的字符集 -->
<ddl_mask>OBJ:OP</ddl_mask><!-- 分析端 DDL 同步支持的对象和操作 -->
<arch><!-- 归档信息配置 -->
<clear_interval>600</clear_interval><!-- 归档日志清理间隔 -->
<clear_flag>1</clear_flag><!-- 归档日志清理选项,选配 0(不操作)、1(删除)、2(移
走),默认 0 --></arch>
<send><!-- 数据发送配置 -->
<ip>192.168.23.105</ip><!-- 需在投递到下一级的 IP 地址 -->
<mgr_port>5345</mgr_port><!-- 目的端管理端口,默认为 5345,最小值
1000,最大值 65535 -->
<data_port>5346</data_port><!-- 目的端数据接收端口号,默认为 5346,
最小值 1000,最大值 65535 -->
<net_turns>0</net_turns><!-- 是否开启网闸模式,默认为 0,限定值 0(关
闭),1(开启),网匝模式下,主机看不到备机的统计信息 -->
<trigger>1</trigger><!-- 是否忽略触发器,默认为 0,限定值 0,1 -->
<constraint>0</constraint><!-- 是否忽略约束,默认为 0,限定值 0,1 -->
<identity>0</identity><!-- 自增列处理方式,0(启用)或 1(忽略),默认
值为 1 -->
<filter><!-- NET 模块对投递消息的过滤配置 -->
<enable><!-- NET 模块过滤规则白名单设置 -->
<item>*.*</item>
</enable>
<disable><!-- NET 模块过滤规则黑名单设置 -->
<item></item>
</disable>
</filter>
<map><!-- NET 模块对投递对象名进行映射 -->
</map>
</send>
</cpt>
</dmhs>
2 修改目的端配置文件
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base><!-- 管理模块的基本配置 -->
<lang>ch</lang><!-- 语言选项,ch 为中文,en 为英文 -->
<mgr_port>5345</mgr_port><!-- 管理端口,同步服务起动以后,会监听该端口
上的连接,用于执行客户端工具发过来的命令和接收统计信息 -->
<chk_interval>2</chk_interval><!-- 状态轮询间隔,默认为 3s,最小值 1s,最大
值 60s -->
<ckpt_interval>45</ckpt_interval><!-- 执行端检查点间隔,默认 60s,最小值 10s,
最大值 65536s -->
<siteid>2</siteid><!-- 站点 ID,这个 ID 配置时要注意,全局唯一,最小值 0,最
大值 65535 -->
<version>2.0</version><!-- 配置文件的版本号 -->
</base>
<recv><!-- 接收模块的基本配置,如果该节点只作为分析端,该节点需要删除 --><data_port>5346</data_port><!-- 数据接收端口号,默认为 5346,最小值 1000,最
大值 65535 -->
<exec><!-- 执行模块的基本配置 -->
<db_type>dm7</db_type><!-- 数据库类型 -->
<db_server>127.0.0.1</db_server><!-- 数据库服务名或 IP -->
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port><!-- 数据库端口号,默认为 5236 -->
<db_name></db_name><!-- 默认数据库名,默认为空串(只针对 dm6 有用)-->
<exec_mode>1</exec_mode><!-- 执行模式, 1(多线程执行),2(ETL 模式),3(消息中
转模式,跨网段级联时使用) -->
<exec_thr>16</exec_thr><!-- 执行线程个数,只有当 exec_mode 为 1 时才会生效!
默认为 1,最小值 1,最大值 64 -->
<exec_sql>512</exec_sql><!-- SQL 缓存大小,默认为 512M,最小值 32M,最大
值 4096M -->
<exec_trx>5000</exec_trx><!-- 事务缓存个数,默认为 5000,最小值,1000,最
大值 10000 -->
<exec_rows>250</exec_rows><!-- 批量绑定行数,默认为 250,最小值 1,最大
值 2000 -->
<exec_policy>2</exec_policy><!-- 事务入库出错时的执行策略,可选 0、1 或 2,
默认为 1 -->
<msg_col_size>8000</msg_col_size><!-- 保存缓存消息列的大小,这取决于目的
库的块大小, 默认为 8000,最小值 1000,最大值 8000 -->
<level>0</level><!-- 复制级别,默认为 0,最小值 0,最大值 65535 -->
<affect_row>0</affect_row><!-- 是否启用影响行数检查 -->
</exec>
</recv>
</dmhs>
六 启动应用
1 启动源端(主备集群中A\B两个节点)和目的端的dmhs_server
2 启动目的端dmhs_console并执行start exec
3 主库dmhs_console中执行copy 0 “sch.name is not null” dict|lsn。注意:如果不是首次部署,需要先stop cpt。备库无需copy字典,能够自动同步
4 主库执行start cpt
5 备库执行start cpt
七 测试验证
1 主库A节点建测试表并插入测试数据,D节点检查
2 主备切换后在B节点建测试表并插入测试数据,D节点检查