1. 概述
1.1 应用场景
1)用户在定时同步向目标库写入数据时,希望可以将单次当前来源端的所有数据,放到同一个事务内装载:
要么都成功,正常提交事务,更改目标表数据。
要么都失败,事务回滚,对目标表不产生影响。
2)在定时任务同步完成后,可以将当次写入的统计数据写到自定义的表中,以方便后续校验数据。
1.2 实现思路
4.2.7.4 及之后版本,数据同步节点/DB表输出算子中,使用「事务控制」功能。
2. 操作步骤
例如用户需要将数据同步到 Oracle 时支持失败回滚,并需要在同步成功时,记录本次装载的最大时间到指定的数据表中,以便进行增量同步或者数据校验。
2.1 读取数据
1)新建定时任务。
2)拖入「数据同步」节点,读取来源表数据。如下图所示:
点击「数据预览」可查看取出的数据:
2.2 设置写入数据库前置后置
1)点击「数据去向与映射」Tab,设置目标表。如下图所示:
2)点击「写入方式」Tab,设置写入方式、主键,并在事务控制下设置前置 SQL 和后置 SQL。如下图所示:
由于示例想要在同步成功时,记录本次装载的最大时间到指定的数据表中,因此设置后置 SQL:
INSERT INTO "HR"."DUANDIAN"(TIME)
SELECT MAX(录入时间) AS TIME FROM @temp_tbl_nm_full;
注1:SQL 含义为将本次执行数据表的最大「录入时间」从中间表中取出,并写入至指定的数据表「DUANDIAN」的 TIME 字段中;DUANDIAN 表需要用户自己准备。
注2:中间表与目标表字段相同,作为写入数据回滚的中间存放表,此处@temp_tbl_nm_full 为引用中间表。
2.3 效果查看
1)运行任务后,若执行成功,即可看到将指定数据同步写入至目标数据库。如下图所示:
2)录入时间的最大值也记录到 DUANDIAN 表中。如下图所示:
3)若执行失败,则该批量数据均不会被写入指定数据库,实现失败回滚。