合 各种数据库同步中的时间戳机制总结
Tags: OraclePGMSSQLSQL ServerPostgreSQLMySQL增量同步CDC时间戳rowversionORA_ROWSCN
简介
增量同步,一般有CDC和时间戳这2种办法。
CDC(Change Data Capture,变更数据捕获)主要使用日志进行同步,例如OGG工具就是CDC的一种。
基于时间戳的方法,就是在表上增加一列,在增加和修改时,更新该列的值即可。
通过时间戳的方式来同步的话,只能对UPDATE和INSERT起作用,对于DELETE物理删除操作,或源端删除数据时只修改数据有效标志,可以定期通过主键比对然后同步删除数据。
Oracle
对于Oracle来说,可以使用ORA_ROWSCN来获取数据变更。ora_rowscn默认为块级别的跟踪,即该块上有任何一行进行了修改,该块的ora_rowscn都发生变化,而且一个块的ora_rowscn是相同的。若要精确捕获每行的变化,则需要开启行级别的跟踪。
select *
不会显示ORA_ROWSCN列,必须显式指定该列才可以。
缺点:
1、需要重建表,增加ROWDEPENDENCIES参数,才能启用行级别的跟踪。默认为块级别跟踪。不能通过后期的alter table语句来将表修改为ROWDEPENDENCIES。
2、每行会增加6字节的存储空间。
3、启用了ROWDEPENDENCIES后就不能再进行压缩操作。
4、通过user_tables.dependencies可以查看表是行级别还是块级别。
详细请参考:https://www.dbaup.com/oraclezhongdeora_rowscnhanshudezuoyongshishenme.html
注意:Oracle到目前的最新的23c,都是没有ROWVERSION数据类型的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SQL> select banner from v$version where rownum<=1; BANNER -------------------------------------------------------------------------------- Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release SQL> SQL> SQL> create table t1(rv rowversion); create table t1(rv rowversion) * ERROR at line 1: ORA-00902: invalid datatype SQL> |
SQL Server
对于SQL Server来说,可以使用rowversion列来获取数据变更。
缺点:
1、需要新增字段rv,类型为rowversion或timestamp