人大金仓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.DriverAppending mark data column for tables..."public"."test" successfulFinished appending command. | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
此时我们在源端向演示的表中插入数据。
| zdxtest=# Insert into test values (1,99);INSERT 0 1 |
|---|
从源端KUFL日志中我们可以看到数据已经发送
| [kfs@- ~]$ kufl list -lastSEQ# = 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 -lastSEQ# = 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 安装部署手册》