注册
DM8(DSC)到DM8(DSC)数据同步
培训园地/ 文章详情 /

DM8(DSC)到DM8(DSC)数据同步

达梦数据库-王晨 2023/05/19 1559 0 0

一、DSC搭配DMHS的使用场景

DSC搭配DMHS使用最多的场景为同城双中心加异地灾备一种商用容灾备份解决方案;又称两地三中心 ,两地是指同城、异地;三中心是指生产中心、同城容灾中心、异地容灾中心。( 生产中心、同城灾备中心、异地灾备中心 )
在达梦的两地三中心的方案中,DMHS起到了同步同城到异地数据库的作用,如下图所示:

二、准备工作:

硬件环境
虚拟机:4台
CPU架构:x86_64
操作系统:Red Hat Enterprise Linux Server release 6.4 (Santiago)
IP地址:10.10.10.220、10.10.10.221、10.10.10.230、10.10.10.231
DSC集群两套
数据库版本:4-2-98-21.12.16-153423-10040-ENT
DMHS安装包
版本:dmhs_V4.2.60_dm8_rev106302_rh6_64_veri_20220225
DMHS安装路径:/home/dmdba/dmhs
DM数据库安装路径:/home/dmdba/dmdbms
安装用户:root

数据库信息

源端:10.10.10.220
目标端:10.10.10.230

DSC集群信息收集:

DSC01
EP1IP:10.10.10.220
EP2IP:10.10.10.221
EP1PORT_NUM:5236
EP2PORT_NUM:5237
EP1ARCHFILE_PATH=+DMLOG/ep01/arch
EP1ARCHFILE_PATH=+DMLOG/ep02/arch
DATAFILE_PATH=+DMDATA/data/dsc
DSC02
EP1IP:10.10.10.230
EP2IP:10.10.10.231
EP1PORT_NUM:5236
EP2PORT_NUM:5237
EP1ARCHFILE_PATH=+DMLOG/ep01/arch
EP2ARCHFILE_PATH=+DMLOG/ep02/arch
DATAFILE_PATH=+DMDATA/data/dsc

DSC同步使用说明
DMHS 支持源端为 RAC 环境的数据库同步,在 RAC 环境中,源端数据库同样需要进行开启附加日志、开启归档的操作。需要注意的是对于 RAC环境,源端每个 RAC 节点都需要开启归档,且建议归档开启在共享存储上。由于 DMHS 是单进程工作的,配置 RAC 环境的同步,只需在一个 RAC 节点所在服务器安装部署 DMHS 服务。如果 RAC 节点的归档未开启在共享存储上,而是开启在本地磁盘,则需要配置 NFS(网络文件系统)映射,将其他节点的归档日志所在目录映射到 DMHS 所在服务器,以便 DMHS 能够访问到各个 RAC 节点的归档日志。

三、系统环境检查

操作系统版本
命令:

 # cat /etc/os-release
Red Hat Enterprise Linux Server release 6.4 (Santiago)


CPU
命令: # lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 158
Stepping:              10
CPU MHz:               2904.002
BogoMIPS:              5808.00
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              9216K
NUMA node0 CPU(s):     0

内存

# free -g
             total       used       free     shared    buffers     cached
Mem:             3          3          0          0          0          1
-/+ buffers/cache:          1          1
Swap:            3          0          3

磁盘
命令:

df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       45G   16G   28G  36% /
tmpfs                 1.9G   72K  1.9G   1% /dev/shm
/dev/sda1             485M   38M  422M   9% /boot

防火墙
命令:

[root@node1 ~]# chkconfig --list|grep ip
[root@node1 ~]# chkconfig --level 2345 iptables off
[root@node1 ~]# chkconfig --level 2345 ip6tables off
[root@node1 ~]# service iptables stop
[root@node1 ~]# service ip6tables stop

四、DMHS安装及配置步骤

第一步、安装DMHS(源端与目标端)

[root@localhost soft]# ./dmhs_V4.2.60_dm8_rev106302_rh6_64_veri_20220225.bin -i
Extract install files..........

1.English(English)
2.Simplified Chinese(简体中文)
Select the language to install[2.Simplified Chinese(简体中文)]:
/tmp/DMHSInstall/install.log
1.免费试用达梦数据实时同步
2.使用已申请的Key文件
验证许可证文件[1.免费试用达梦数据实时同步]:
1.精简版
2.完整版(web客户端)
3.自定义
安装类型[1.精简版]:
1.实时同步软件服务器
2.远程部署工具
3.实时同步软件配置助手
4.手册
所需磁盘空间:572 MB
安装目录: [/opt/dmhs]/home/dmdba/dmhs
1.统一部署
2.现在初始化
是否初始化达梦数据实时同步系统[1.统一部署]:
正在安装
default start ...    default finished.
server start ...    server finished.
hs_agent start ...    hs_agent finished.
hsca start ...    hsca finished.
doc start ...    doc finished.
postinstall start ...    postinstall finished.
正在创建快捷方式
安装成功
远程部署工具配置
远程部署工具名称[HsAgent]:
(后续无需安装,到这里直接推出即可)

第二步、开启归档和逻辑日志(源端与目标端)

vi dmarch.ini
(节点1)
[ARCHIVE_LOCAL1] 
ARCH_TYPE		     = LOCAL
ARCH_DEST		     = +DMLOG/ep01/arch
ARCH_FILE_SIZE	 	 = 128
ARCH_SPACE_LIMIT	 = 10240
(节点2)
[ARCHIVE_LOCAL1] 
ARCH_TYPE		     = LOCAL
ARCH_DEST		     = +DMLOG/ep02/arch
ARCH_FILE_SIZE	 	 = 128
ARCH_SPACE_LIMIT	 = 10240
(节点1)
vi dm.ini 修改“RLOG_APPEND_LOGIC”值为1
(节点2)
vi dm.ini 修改“RLOG_APPEND_LOGIC”值为1
注:需重启数据库实例来生效修改

第三步、配置DDL
如果要求DDL同步,那么需要创建DDL触发器和辅助表。创建的脚本参见DMHS安装目录下scripts子目录中“ddl_sql_dm8.sql”。注意创建时需要使用SYSDBA用户。
第四步、配置dmhs.hs(源端)

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
    <base>
        <lang>ch</lang>
        <mgr_port>5345</mgr_port>        
        <ckpt_interval>60</ckpt_interval>
        <siteid>1</siteid>
    </base>
    <cpt>
        <db_type>dm8</db_type>
        <db_server>10.10.10.220</db_server>
        <db_user>SYSDBA</db_user>
        <db_pwd>SYSDBA</db_pwd>
        <db_port>5236</db_port>
        <db_ssl_path></db_ssl_path>
        <db_ssl_pwd></db_ssl_pwd>
        <parse_thr>1</parse_thr>
        <ddl_mask>op:obj</ddl_mask> <!--DDL配置项-->
        <dm8_rac>
          <nodes>2</nodes><!--RAC节点数-->
          <epoch>60</epoch>
          <rac_type>1</rac_type>
          <db_server>10.10.10.220</db_server><!--ASM服务的IP地址-->
          <db_port>9349</db_port><!--ASM服务的端口号-->
          <db_user>default</db_user>
          <db_pwd>default</db_pwd>
          <dir_replace><!--节点归档的路径,格式:编号(从0开始)# 归档路径-->
            <item>0#+DMLOG/ep01/arch</item><!--节点0的归档路径-->--前置条件说明
            <item>1#+DMLOG/ep02/arch</item><!--节点1的归档路径-->--DSC同步的限制,相对于其他异构数据库
          </dir_replace>--高可用
        </dm8_rac>
        <arch><!--归档清理配置项-->
            <clear_interval>600</clear_interval>
            <clear_flag>1</clear_flag>
            <bak_dir></bak_dir>
        </arch>
        <send><!-- 发送模块配置 -->
            <ip>10.10.10.230</ip>
            <mgr_port>5345</mgr_port>
            <data_port>5346</data_port>
            <trigger>1</trigger><!-- 是否忽略触发器,默认为0,限定值0,1 -->
            <constraint>1</constraint><!-- 是否忽略约束,默认为0,限定值0,1 -->
            <identity>1</identity>
            <net_turns>0</net_turns>
            <filter><!--过滤配置项-->
                <enable><!-- 白名单,所有允许同步的表 -->
                    <item>CHEN.*</item>
                </enable>
            </filter>
            <map><!--映射配置项-->
              <item>CHEN.*==CHEN.*</item>
            </map>
        </send>
    </cpt>
</dmhs>

第五步、配置dmhs.hs(目标端)

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
 <base>
 <lang>ch</lang>
 <mgr_port>5345</mgr_port>
 <ckpt_interval>60</ckpt_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.10.10.230</db_server>
 <db_user>SYSDBA</db_user>
 <db_pwd>SYSDBA</db_pwd>
 <db_port>5236</db_port>
 <db_name></db_name>
 <exec_thr>4</exec_thr>
 <exec_sql>1024</exec_sql>
 <exec_trx> 5000 </exec_trx>
 <exec_rows>1000</exec_rows>
 </exec>
</dmhs>

第六步、前台启动源端与目标端的dmhs_server服务

[root@localhost bin]# ./dmhs_server dmhs.hs 
MGR[INFO]: DMHS start up, current version: V4.2.60-Build(2022.02.24-106302trunc)_D64 (The beta)(Enterprise Edition)
MGR[WARN]: License will expire on 2022-05-24
MGR[INFO]: 成功加载配置文件,站点号:1, 管理端口:5345, 轮询间隔:3
MGR[INFO]: 管理 服务正在监听管理端口:5345
第七步、源端与目标端启动控制台
[root@localhost bin]# ./dmhs_console 
DMHS console tool: V4.2.60-Build(2022.02.24-106302trunc)_D64
Copyright (c) 2020, DMHS. All rights reserved.
Type ? or "help" for help, type "quit" to quit console.

连接到DMHS:127.0.0.1:5345
执行成功
Dameng HS Server V4.2.60-Build(2022.02.24-106302trunc)_D64

DMHS>

第八步、源端与目标端登陆控制台

DMHS> connect
执行成功

第九步、清空目标端的事务信息表(源端与目标端控制台都可执行,只需在源端或者目标端其中一个控制台中执行一次即可)

DMHS> clear exec
执行成功

第十步、启动目标端执行模块

DMHS> start exec
执行成功

第十一步、装载数据(源端执行)

DMHS>copy 0 "sch.name='CHEN'" DICT|LSN|CREATE|INSERT|INDEX
CSL[WARN]: 检测到LSN掩码,该掩码会忽略日志中小于当前LSN的所有操作,请确认是否继续?(Y/N)
Y
copy mask is : |CREATE|INSERT|INDEX|TABLE|DICT|LSN|PARTITION|OBJID|REP
执行完成,请查看执行模块日志,检查数据装载是否成功

第十二步、源端启动捕获模块

DMHS> start cpt
执行成功

第十三步、数据比对
#################################oracle数据库#################################
1、表数目

SELECT count(*) TABLES, table_schema FROM information_schema.TABLES where table_schema = '数据库名称' GROUP BY table_schema;

2、存储过程

select `name` from mysql.proc where db = '数据库名称' and `type` = 'PROCEDURE'; 

3、函数

select `name` from mysql.proc where db = '数据库名称' and `type` = 'FUNCTION' 

4、查看所有库使用空间大小

select table_schema,concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from information_schema.TABLES group by table_schema; 

5、统计MySQL一个库中所有表的数据量

--创建移植辅助表,统计每个表的数据量并插入到移植辅助表中 
CREATE TABLE TABLE_ROWS(tab_schema VARCHAR(50),tab_name VARCHAR(50),v_count VARCHAR(50));
--创建存储过程统计表的数据量 
DELIMITER $$
CREATE  PROCEDURE statis_rows(IN v_schema VARCHAR(50))
BEGIN
DECLARE sql_str VARCHAR (200);
DECLARE no_more_departments INTEGER DEFAULT 0;
DECLARE sql_cur CURSOR FOR (
 SELECT
  CONCAT(
   'select ',"'",table_schema,"'",",'",table_name,"',",'count(1)',' into @v_tab_schema,@v_tab_name,@v_count  from ',
   TABLE_SCHEMA,
   '.',
   TABLE_NAME,
   ''
  )
 FROM
  information_schema.TABLES
 WHERE table_schema = v_schema
  AND table_name <> 'table_rows'
);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;
/* 打开游标,进入循环统计各表的记录 */
OPEN sql_cur;
myLoop:LOOP
FETCH sql_cur INTO sql_str;
IF no_more_departments = 1 THEN
LEAVE myLoop;
END IF;
SET @v_sql=sql_str;
PREPARE stmt FROM @v_sql;
EXECUTE stmt;
/* 将统计结果保存到表中,以便随时都可以查看 */
INSERT INTO TABLE_ROWS
VALUES
 (
  @v_tab_schema,
  @v_tab_name,
  @v_count
 );
DEALLOCATE PREPARE stmt;
END LOOP myLoop;
CLOSE sql_cur;
END
--调用存储过程:
CALL statis_rows('test')
--查询统计结果:
select * from TABLE_ROWS;

#################################DM数据库#################################

SELECT OBJECT_TYPE,COUNT(*) FROM ALL_OBJECTS 
WHERE OWNER='OA8000_DM2015' GROUP BY OBJECT_TYPE;

--统计指定用户下所有的对象
SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM
ALL_OBJECTS WHERE OWNER='OA8000_DM2015';
--统计某个模式下所有表的数据量
--创建统计表
create table dm_tables(tab_owner varchar(100),tab_name varchar(100),tab_count int);
--执行存储过程统计表数据量并插入统计表
begin
execute immediate 'TRUNCATE TABLE dm_tables';
for rec in (select owner,object_name from all_objects where 
owner='TEST123' and object_type='TABLE') loop
execute immediate 'insert into dm_tables select '''||
rec.owner ||''','''|| rec.object_name ||''',count(*) from '|| rec.owner
|| '.' || rec.object_name;
end loop;
end;
--查询统计表结果
select * from dm_tables;

#################################数据比对#################################
--将两张统计表迁移到同一个库中比对统计表中数据量

select * from DM_TABLES d 
left join TABLE_ROWS m
on d.tab_name = m.tab_name
where d.tab_count != m.v_count

五、DMHS部署过程中遇到的问题:
问题一、MGR[ERROR]: 库文件 libcpt_dm8.so 未找到, 出错: 0, libdmoci.so: cannot open shared object file: No such file or directory
解决方法:

[root@localhost bin]# ldd libcpt_dm8.so 
	linux-vdso.so.1 =>  (0x00007fff6b2ab000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f38703ad000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f3870128000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f386ff20000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f386fd03000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f386fafe000)
	libdmhs_pub.so => ./libdmhs_pub.so (0x00007f386f7c7000)
	libdmhs_net.so => ./libdmhs_net.so (0x00007f386f568000)
	libdmhs_ld_dm8.so => ./libdmhs_ld_dm8.so (0x00007f386f2fd000)
	libdmhs_ucvt.so => ./libdmhs_ucvt.so (0x00007f386eda2000)
	/lib64/ld-linux-x86-64.so.2 (0x0000003877e00000)
	libdmoci.so => not found
	libdmhs_bool_parse.so => ./libdmhs_bool_parse.so (0x00007f386eb91000)
	libdmoci.so => not found

发现未找到libdmoci.so库文件,需要在达梦提供的对应版本的dmdci的包中找到libdmoci.so库文件,放到DMHS的bin目录下
注意:一定要是与源端DM数据库版本对应的dmdci的包,或者版本相差不大的包,如果libdmoci.so库文件不对,会导致EXEC模块启动失败,一直卡在正在加载执行模块,一段时间后直接生产core文件

六、DMHS监控同步状态监控
dmhs_console控制台监控
监控命令
统计信息
(源端)CPT

(目标端)EXEC

延迟
(目标端)LAG

hs运行日志分析
检查点
CHECKPOINT SITEID:站点号 SEQID: 日志 LSN, EPOCH: 日志时间戳(日期)

EXE[INFO]: CHECKPOINT SITEID:1 SEQID: 3328535, LFS : 0 EPOCH: 1099841960(2022-03-20 15:39:20)
EXE[INFO]: CHECKPOINT SITEID:1 SEQID: 3329560, LFS : 0 EPOCH: 1099842019(2022-03-20 15:40:19)
EXE[INFO]: CHECKPOINT SITEID:1 SEQID: 3330602, LFS : 0 EPOCH: 1099842081(2022-03-20 15:41:21)
EXE[INFO]: CHECKPOINT SITEID:1 SEQID: 3331610, LFS : 0 EPOCH: 1099842140(2022-03-20 15:42:20)

每次检查点,SEQID 和 EPOCH 都在向前推进,这时说明检查点是正常的,源端通过目标端检查点的 LSN 值作为清除归档的依据。当检查点信息中出现 CHECKPOINT SKIP 或 CHECKPOINT WAIT 等信息时,则表明检查点受阻,EXEC 模块中有长时间执行事务或是源端有长时间未提交的事务,这些问题的可能性都需要靠分析才能作出判断。

七、常见故障处理思路
问题一、客户误删除目标端数据(某张表或者某几张表)
解决方式:确认被删除数据的表,在源端控制台,停止捕获模块CPT,对删除数据的表进行重新装载,使用copy命令,命令如下:

copy 0 "SCH.NAME='CHEN' AND TAB.NAME='TEST01'" DICT|LSN|CREATE|INSERT|INDEX|TRUNCATE

确认数据装载完毕,数据量一致时,在源端控制台执行start cpt 启动捕获模块
(注意,仅限数据量较少且对同步时限要求较低的场景,如数据量极大或对同步时限要求较高的场景请协调客户,择机进行重装)

问题二、装载大字段表
第一种:不加载 BLOB

DMHS> state
MGR: Capture 
TYPE   VID  SITEID  EXEC/CPT IP  PORT  DBNAME 
-------    ---  ------     ------------      ----      ------ 
Capture   0    1     192.168.0.12    5345     DMHS   
执行成功
DMHS > stop cpt
DMHS > 
LOAD 0 "sch.name='HX_DM_QG' AND tab.name ='DM_SF_SSZYFWWGQX'" TRUNCATE|DICT |INSERT|NOBLOB|THREAD|12

第二种:加载CLOB 或 BLOB

DMHS> state
MGR: Capture 
TYPE   VID  SITEID  EXEC/CPT IP  PORT  DBNAME 
-------    ---  ------     ------------      ----      ------ 
Capture   0    1      192.168.0.12   5345     DMHS    
执行成功

DMHS > stop cpt
DMHS > 
LOAD 0 "sch.name='HX_DM_QG' AND tab.name ='DM_SF_SSZYFWWGQX'" UPDATE |INSERT|BLOB|THREAD|12
DMHS > start cpt
BLOB 

该掩码必须和 UPDATE 掩码组合使用,意为使用源端表中的大对象数据去更新目标库
中对应的大对象,该功能是用来修复目标库大对象和源库不一致时的一个方法,可以指定条
件抽取源端某个表某些行的大对象更新到目标库对应的行中。
使用场景:
如果某个表中存在大量的 CLOB 或 BLOB 数据,那么这个表的装载性能会很慢,长时
间的结果集提取操作可能会导致数据库报错,那么这种情况上,可以在装载时先指定
NOBLOB 掩码把非大对象的数据快速的装载过去,然后再分批分段的使用 BLOB 掩码把大
对象分批次的更新到目标端。
示例:

DMHS > COPY 0 “SCH.NAME=’TEST’ AND TAB.NAME=’TX’ ” UPDATE|BLOB|”ID=1” 

把源端 TEST.TX 表中 ID 列的列值等于 1 的这一行对应的大对象更新到目标端数据库。

问题三、检查点阻塞

DMHS> state
MGR: Capture 
TYPE   VID  SITEID  EXEC/CPT IP  PORT  DBNAME 
-------    ---  ------     ------------      ----      ------ 
Capture   0    1     192.168.0.12    5345     DMHS   
执行成功
DMHS >stop exec
  1. 源端数据库有长时间未提交的事务。这种问题需要通过查询源端数库当前活动的事务信息,通过事务 ID 和目标端检查等待的事务 ID 进行对比,如果一致则说明该事务执行
    时间过长,这种情况下需要多方判断该事务是否是正常事务,然后采取相应的措施。

  2. 目标端数据库资源被其它应用上锁,导致EXEC模块入库时阻塞。这种问题需要通过查询目标端数据库,看看DMHS执行的SQL存不存在阻塞的情况,如果没有阻塞,则
    需要确认同步的 SQL 执行效率是否低下,比如在没有索引的表上做更新或删除,但是表的记录数又非常多。

  3. DMHS同步过程中存在事务泄露的 BUG,在同步过程中某些事务的提交或回滚的操作丢失,导致 EXEC 模块一直缓存着该事务。在排除了上现几种情况以后,基本上可以确认是事务泄露,可以通过控制台的 ROLLBACK 或 COMMIT 命令来回滚相应的事务。

八、DMHS注意事项
1、首次启动DMHS服务,需要首先进行待同步模式或表的字典装载操作,否则无法启动源端捕获分析服务。
2、首次启动DMHS成功后,DMHS会在程序目录下创建后缀为.tmp的文件,用作启动标识。使用停止命令成功停止服务后,会删除这些文件。
3、首次同步开启,测试同步中文数据测试字符集是否存在问题
4、要在源端和目的端分别停用linux防火墙,并且禁用

装载命令解读
示例:

copy 0 "SCH.NAME='CHEN' AND TAB.NAME='TEST01'" DICT|LSN|CREATE|INSERT|INDEX|TRUNCATE

copy 装载命令
0 VID指CPT模块的虚拟编号
SCH.NAME 装载的模式式名
TAB.NAME 装载的表名,不写表名就装载该模式中在配置文件中指定的对象
DICT|LSN|CREATE|INSERT|INDEX|TRUNCATE 统称为掩码
DICT 离线字典装载,使用场景:在搭建同步时,如果目标端的数据库初始化是通过数据库的备份还原功能完成的,那么在开启同步之前,只需要在源端装载要同步的对象字典。LSN 该掩码表明在离线字典文件中需要记录当前这一刻源端数据库的

LSN值,使用场景:搭建同步时,如果源库是静态的,目标端在使用备份还原初始化或是其它方式初始化以后,源端表对象的数据同步只需要从当前这一刻开始,那么可以在装载字典时指定 LSN 掩码;或者在现有同步的环境下,需要增加某个表的同步,并且只要求同步从当前这一刻起始的数据,那么装载该表字典时应该指定该掩码,否则该表同步会从日志分析的起始位置开始。

CREATE 装载时需要在目标端进行建表,在源端和目标端数据库为异构的情况下,在目标端建表时会对源端的数据类型做映射处理

INSERT 数据装载掩码,表明源端表中数据查出来以后转换为 INSERT 操作再投递到目标端从而完成装载的过程

INDEX 索引装载掩码,当与create一起使用时,会把源端索引装载到目标端;再加上INSERT等组合使用时,会在表创建并装完表上的数据后才会装载索引。

TRUNCATE 显式的对目标库执行 TRUNCATE 操作,该掩码使用一定要小心,不要在目标端有独立数据的环境下使用,以免造成数据损失。

九、DDL配置项解读
对象部分:

  1. TABLE:允许捕获表的 DDL 操作。
  2. VIEW:允许捕获视图的 DDL 操作。
  3. PROCEDURE:允许捕获过程的 DDL 操作,支持简写 PRO。
  4. FUNCTION:允许捕获函数的 DDL 操作,支持简写 FUN。
  5. TRIGGER:允许捕获触发器的 DDL 操作,支持简写 TR。
  6. INDEX:允许捕获索引的 DDL 操作。
  7. CHECK:允许捕获检查约束的 DDL 操作。
  8. SEQUENCE:允许捕获序列的 DDL 操作,支持简写 SEQ。
  9. PACKAGE:允许捕获包的 DDL 操作,支持简写 PKG。
  10. TYPE:允许捕获 TYPE 类型的 DDL 操作。
  11. SYNONYM:允许捕获同义词的 DDL 操作,支持简写 SYN。
  12. TABLESPACE:允许捕获表空间的 DDL 操作,支持简写 TS。
  13. USER:允许捕获用户的 DDL 操作。
  14. ROLE:允许捕获角色的 DDL 操作。
  15. SCHEMA:允许捕获模式的 DDL 操作。
  16. NTEMP:不允许捕获临时表 CREATE 操作。(仅支持 DM7 以上版本或 ORACLE)
    操作部分:
  17. CREATE:允许捕获所有数据库对象的创建操作。
  18. ALTER:允许捕获所有数据库对象的修改操作。
  19. DROP:允许捕获所有数据库对象的删除操作。
  20. TRUNCATE:允许捕获表的清空操作。
  21. GRANT:允许捕获所有数据库对象的授权操作。
  22. REVOKE:允许捕获所有数据库对象的权限回收操作。
  23. COMMENT: 允许捕获表和视图的注释操作。
    其它:
  24. OBJECT:允许捕获所有数据库对象的 DDL 操作,支持简写 OBJ。
  25. OPERATION:允许捕获对象的所有DDL操作,支持简写OP,但不包含COMMENT。
  26. DEFINE:表的 DDL 同步时,只同步定义,不同步 DDL 带来的数据。
  27. PARTITION:允许对分区表的分区 DDL 操作进行同步。
  28. PTABLE:分区表 DDL 同步时,直接以源端捕获到的 SQL 语句进行同步。
  29. SQL:DDL 同步,通过转发 CPT 捕获到的客户端执行的原始 SQL 语句来进行同步。
  30. REC:是否在运行日志中记录捕获的 DDL 操作信息,供研发调试使用。

十、白名单与黑名单解读
ENABLE:含义:NET 模块过滤规则白名单设置,该标签是一个功能标签,需要配置它的子项。 说明:过滤规则白名单设置,只有符合该标签中某个条件的,数据才允许被投递
item 含义:NET 模块过滤规则白名单设置项,支持模糊匹配符*。 说明:白名单设置项,它的格式为:模式名.对象名,每项支持且仅支持一个模糊匹配 符,例如 SYSDBA.,代表 SYSDBA 模式下所有的表;SYSDBA.T代表 SYSDBA 模式下 所有以 T 打头的表;SYS*.代表所有以 SYS 打头的模式下所有的表;.*代表所有模式下的 表;SYSDBA.T1 仅代表 SYSDBA 模式下表名为 T1 的表。 对于模式名或者对象名本身包含特殊的“.”点字符,在配置过滤时,需要将对象名称 使用双引号括起来,以支持正确的对象名称解析。
示例如下:

<net_turns>0</net_turns>
           <filter><!--过滤配置项-->
               <enable><!-- 白名单,所有允许同步的表 -->
                   <item>CHEN.*</item>
               </enable>
           </filter>
           <map><!--映射配置项-->
             <item>CHEN.*==CHEN.*</item>
           </map>

十一、序列、触发器同步
trigger 1不同步触发器,0同步触发器,推荐设置为1
constraint 0不同步约束, 1同步约束,推荐设置为1
identity 0忽略自增列,使用本身自增列值,1不忽略同步过来的值。推荐设置1
序列:通过实验,序列在源端创建及使用都会正常同步到目标端,约束、自增列同样如此。
触发器trigger为1时,DMHS不同步由触发器生成或者修改的数据,由DMHS通过同步源端数据来保障数据的一致性。

十二、两地三中心,网络延时
实验目的,确认网络延时对DMHS的影响
实验第一步:模拟网络延时

[root@localhost bin]# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:DA:DD:D2  
          inet addr:10.10.10.220  Bcast:10.10.255.255  Mask:255.255.0.0
          inet6 addr: fe80::a00:27ff:feda:ddd2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:40772414 errors:0 dropped:0 overruns:0 frame:0
          TX packets:53195992 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:13286822712 (12.3 GiB)  TX bytes:11886622802 (11.0 GiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:51189561 errors:0 dropped:0 overruns:0 frame:0
          TX packets:51189561 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:7924143274 (7.3 GiB)  TX bytes:7924143274 (7.3 GiB)

[root@localhost bin]# tc qdisc add dev eth0 root netem delay 100ms 10ms 30%
--该命令将 eth0 网卡的传输设置为 100ms ,同时,大约有 30% 的包会延迟 ± 10ms 发送

实验第二步、确认延时命令生效

[root@localhost bin]# ping 10.10.10.230
PING 10.10.10.230 (10.10.10.230) 56(84) bytes of data.
64 bytes from 10.10.10.230: icmp_seq=1 ttl=64 time=107 ms
64 bytes from 10.10.10.230: icmp_seq=2 ttl=64 time=97.6 ms
64 bytes from 10.10.10.230: icmp_seq=3 ttl=64 time=108 ms
64 bytes from 10.10.10.230: icmp_seq=4 ttl=64 time=97.9 ms
64 bytes from 10.10.10.230: icmp_seq=5 ttl=64 time=93.1 ms
64 bytes from 10.10.10.230: icmp_seq=6 ttl=64 time=97.9 ms
64 bytes from 10.10.10.230: icmp_seq=7 ttl=64 time=108 ms

实验第三步:模拟大数据量的插入

实验第四步:确认数据同步延时情况

结论:在将 eth0 网卡的传输设置为 100ms ,同时,大约有 30% 的包会延迟 ± 10ms 发送的情况下,插入10万条数据,包含触发器及序列,延时在41秒

丢包、重复发包及包损坏等状况待测

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服