暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

SUNDB CYCLONE数据同步介绍

原创 UNDB数据库技术分享 2022-07-21
979

CYCLONE是基于CDC(Change Data Capture)的复制工具。

1. CYCLONE的概念

数据库为了保障数据安全,在重做日志文件中记录数据的变动。CDC是通过分析这些记录在重做日志文件的内容实现复制。
CYCLONE分为Master与Slave两个角色。Master识别源数据库的重做日志文件的变更内容后分析、传送给Slave,Slave分析接收到的数据并通过ODBC实现数据的复制。
 

2. CYCLONE的运行特点

a) CYCLONE分为Master与Slave,以Group为单位运行;
b) CYCLONE的Master与Slave之间使用TCP/IP通信;
c) CYCLONE以Group为单位启动/结束;
d) 以表为单位复制,一个Group可包含一个以上的表;
e) 一张表可从属于多个Group进行复制;
f) 源数据库一定要有重做日志文件,DATA_STORE_MODE设置为TDS;
g) 源数据库一定要开启SUPPLEMENTAL LOGGING,这样设置可以在CYCLONE的复制过程中记录重做日志文件中的补充信息。
h) 源数据库要求以归档模式运行,SUNDB重复循环使用重做日志文件,如果在复制还没有结束的情况下重新使用重做日志文件,则复制会终止且需要放弃当前复制,因此数据库要以归档模式运行。
i) 复制是独立于SUNDB的独立进程,复制进程的故障不会影响SUNDB的正常运行。
 

3. 使用CYCLONE的注意事项

a) 参与复制的表必须有主键(PRIMARY KEY);
b) 仅复制已提交的事务,因此提交之前无法在Slave上查看到未提交的内容;
c) 不支持复制表的主键值更新,当变更primary key的值时,对应表将被Give-up,同时不再作为复制对象;
d) 参与复制的表中不能有属性为自增属性的字段;
e) 对复制表执行DDL操作后,对应表将被CYCLONE放弃且不再作为复制的对象;
○ 详细信息参考表1依据DDL分类判断发生Give-up的情形以及运行DDL复制的情形,详见表1。
○ 如果不遵守CYCLONE的DDL处理步骤,即使为允许的DDL也会导致相应的表被Give-up。
f) 对已被中断复制的表,可通过–reset TABLE_NAME命令重置该表;
g) 组成复制表的字段应具有相同结构(数据类型、顺序);
h) 执行复制的两数据库应具有相同的字符编码。
表1 依据DDL分类判断发生Give-up的情形以及运行DDL复制的情形
image.png
image.png
image.png
image.png
注:为防止用户误操作导致表复制中断,可将DISABLE_DDL_CDC_GIVEUP参数设置为1,此时通过CDC复制的表将不能被执行DDL操作。
 

4. DDL处理方案

对已添加到复制中的表执行可操作的DDL时,需严格按照表2顺序执行。
表2 DDL执行顺序
image.png

a)执行DDL前,在Master/Slave上关闭CYCLONE服务,无需停止应用业务,操作如下。

Master:
cyclone --master --stop
Slave:
cyclone --slave --stop

b)分别在Master和Slave上执行被允许的DDL操作,可操作内容见1.3章节。
c)分别在Master和Slave上启动CYCLONE,不需要reset选项。

Master:
cyclone --master --start
Slave:
cyclone --slave --start

如果按照以上顺序执行DDL发现复制表被中断,请确认如下内容:
1)执行的DDL是否为CYCLONE所允许的DDL;
2)Master和Slave上执行的DDL是否完全一致,表的结构是否完全相同。
将被中断的表重新加入复制中只需以表级别重置表(reset)并重启,操作如下。

Master:
cyclone --stop --master
cyclone --start --master --reset TABLE_NAME

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论