人大金仓KFS支持数据同步数据标记功能介绍
关键字:
KingbaseFlysync、KFS、同步程序、replicator、DML、数据同步、人大金仓、KFSMC、KFS管理控制台
功能介绍
配置在目标端,在原数据基础上增加两列,记录对数据的修改(INSERT,UPDATE,DELETE)类型和修改时间。
使用场景
对于需要保留修改记录的数据,可以使用该功能。对于DELETE操作。该功能还提供了DI和DU两种模式,可以以UPDATE的方式更新删除的目标行以记录删除操作,或者以INSERT的方式单独插入一行数据来记录删除操作。
配置使用方式介绍
首先需要在目标端的flysync.ini文件中配置数据标记的行为。因为用于演示我们都保留默认值。
svc-remote-filters = datamark # 忽略增加标记的表(模式.表名;模式.*) property=replicator.filter.datamark.markignore= # 指定增加标记的表(模式.表名;模式.*) property=replicator.filter.datamark.markdo= # 指定需要增加标记的DML类型【默认值为:insert,update,delete】 property=replicator.filter.datamark.dmltype=insert,update,delete # 指定增加标记的列(modtype为DML类型标记列,modtime为时间标记列)【默认值为: modtype,modtime】 property=replicator.filter.datamark.markcolumn=modtype,modtime # 指定delete操作更换标记的情况【默认值为:DU】 property=replicator.filter.datamark.deltype=DU # 指定DML类型标记的列名【默认值为:mod_type】(不支持中文和特殊字符) property=replicator.filter.datamark.modtypename=mod_type # 指定DML类型标记的列值【默认值为:I,U,D】(仅支持单字符的数字和英文字母) property=replicator.filter.datamark.modtypeval=I,U,D # 指定时间标记列的列名【默认值为:mod_time】(不支持中文和特殊字符) property=replicator.filter.datamark.modtimename=mod_time |
其次需要在目标使用repdatamark工具在目标表上增加两列用于记录修改数据。
repdatamark #数据类型 -dbtype kingbase8 #数据库IP地址 -host 10.10.5.99 #数据库端口 -port 54333 #数据库用户名 -user system 数据库密码 -pass 123 #使用哪个数据库 -db zdxtest_tar #需要进行数据标记的表 -appendMarkDataColumn public.test #需要数据标记类型 -columnType modtype,modtime #如果使用的是kingbase,需要选择兼容模式 -dbMode oracle |
示例
前置条件
- 按照第三小节提到的方式配置FLYSYNC.INI文件
- 完成同步程序的安装部署,源端目标端同步服务正常;
操作步骤
目标端源端插入演示用的数据库,因为同步服务已开启,我们在源端创建数据库会自动同步到目标端。
zdxtest=# create table test(id int primary key, value int); CREATE TABLE |
在目标端中使用repdatamark工具添加标记列到目标表中。
repdatamark -dbtype kingbase8 -host 10.10.5.99 -port 54333 -user system -pass 123 -db zdxtest_tar -appendMarkDataColumnle |
运行结果:
2023-09-22 08:12:59 | | [ - main] INFO database.AbstractDatabase Loading database driver: com.kingbase8.Driver Appending mark data column for tables... "public"."test" successful Finished appending command. |
此时我们在源端向演示的表中插入数据。
zdxtest=# Insert into test values (1,99); INSERT 0 1 |
从源端KUFL日志中我们可以看到数据已经发送
[kfs@- ~]$ kufl list -last SEQ# = 1 / FRAG# = 0 (last frag) - TIME = 2023-09-22 07:54:56.024 - EPOCH# = 0 - EVENTID = kb:2094059776:2094496880 - SOURCEID = 10.10.5.99 - METADATA = [tz_aware=true;dbms_type=kingbase;client_id;all_tables=[public.test];service=kingbase;shard=public] - TYPE = com.kingbase.flysync.replicator.event.ReplDBMSEvent - OPTIONS = [] - SQL(0) = - ACTION = INSERT - SCHEMA = public - TABLE = test - ROW# = 0 - COL(1: id) = 1 - COL(2: value) = 99 |
从目标端kufl日志我们可以看到附件消息已经被添加
[kfs@oracle ~]$ kufl list -last SEQ# = 1 / FRAG# = 0 (last frag) - TIME = 2023-09-22 07:54:56.024 - EPOCH# = 0 - EVENTID = kb:2094059776:2094496880 - SOURCEID = 10.10.5.99 - METADATA = [tz_aware=true;dbms_type=kingbase;client_id;all_tables=[public.test];service=kingbase;shard=public] - TYPE = com.kingbase.flysync.replicator.event.ReplDBMSEvent - OPTIONS = [] - SQL(0) = - ACTION = INSERT - SCHEMA = public - TABLE = test - ROW# = 0 - COL(1: id) = 1 - COL(2: value) = 99 - COL(0: mod_type) = I - COL(0: mod_time) = 2023-09-22 23:54:32.775 |
在目标端数据库中我们也可以看到数据标记已被正确添加。I代表INSERT,后面一列代表操作时间。
zdxtest_tar=# select * from test; id | value | mod_type | mod_time ----+-------+----------+---------------------------- 1 | 99 | I | 2023-09-22 23:54:32.775000 |
参考资料
《Kingbase FlySync 安装部署手册》