登录 | 注册
首页
方案案例
技术社区
资源中心
培训体系
服务合作
关于我们
SUNDB数据库技术宝典 | CYCLONE数据同步介绍
CYCLONE是基于CDC(Change Data Capture)的复制工具。数据库为了保障数据安全,在重做日志文件中记录数据的变动。CDC是通过分析这些记录在重做日志文件的内容实现复制。
Bruce Lee
专栏:Bruce Lee 的数据库铺子 2024-04-19 33 5
分享到:

CYCLONE的概念

CYCLONE是基于CDC(Change Data Capture)的复制工具。数据库为了保障数据安全,在重做日志文件中记录数据的变动。CDC是通过分析这些记录在重做日志文件的内容实现复制。

CYCLONE分为Master与Slave两个角色。Master识别源数据库的重做日志文件的变更内容后分析、传送给Slave,Slave分析接收到的数据并通过ODBC实现数据的复制。


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的正常运行。


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复制的情形

注:为防止用户误操作导致表复制中断,可将DISABLE_DDL_CDC_GIVEUP参数设置为1,此时通过CDC复制的表将不能被执行DDL操作。


DDL处理方案


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

表2 DDL执行顺序

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

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

b)分别在Master和Slave上执行被允许的DDL操作。
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


5
评论

登录后发表回复

暂无评论
专栏作者
Bruce Lee

SUNDB专家

  • 文章

    6
  • 阅读量

    186
  • 获赞

    18
记录个人数据库学习成长之路

SUNDB

常见问题集锦

SUNDB

免费试用

回复