本文介绍了使用快照表和触发器进行增量数据同步。主库为Oracle 11g数据库,针对须要同步的表创建增量数据临时表以及触发器并经过kettle定时同步到PostgreSQL数据库。
一、主库建立快照表和触发器
注意:快照表结构和源表结构必须一致!数据库
--建立插入快照表 CREATE TABLE SPWUSER.WEB_CUSTOMER_INSERT_TMP ( ID NUMBER NOT NULL, NAME VARCHAR2(128 BYTE) NOT NULL, CREATED TIMESTAMP(6) WITH LOCAL TIME ZONE DEFAULT (current_timestamp) NOT NULL, MODIFIED TIMESTAMP(6) WITH LOCAL TIME ZONE DEFAULT (current_timestamp) NOT NULL ); --建立更新快照表 CREATE TABLE SPWUSER.WEB_CUSTOMER_UPDATE_TMP ( ID NUMBER NOT NULL, NAME VARCHAR2(128 BYTE) NOT NULL, CREATED TIMESTAMP(6) WITH LOCAL TIME ZONE DEFAULT (current_timestamp) NOT NULL, MODIFIED TIMESTAMP(6) WITH LOCAL TIME ZONE DEFAULT (current_timestamp) NOT NULL ); --建立删除快照表 CREATE TABLE SPWUSER.WEB_CUSTOMER_DELETE_TMP ( ID NUMBER NOT NULL, NAME VARCHAR2(128 BYTE) NOT NULL, CREATED TIMESTAMP(6) WITH LOCAL TIME ZONE DEFAULT (current_timestamp) NOT NULL, MODIFIED TIMESTAMP(6) WITH LOCAL TIME ZONE DEFAULT (current_timestamp) NOT NULL ); --建立插入触发器 CREATE OR REPLACE TRIGGER SPWUSER.WEB_CUSTOMER_INSERT_TRI AFTER INSERT ON SPWUSER.WEB_CUSTOMER FOR EACH ROW BEGIN INSERT INTO WEB_CUSTOMER_INSERT_TMP (ID, NAME, CREATED, MODIFIED) VALUES (:new.id, :new.name, :new.created, :new.modified); END; / --建立删除触发器 CREATE OR REPLACE TRIGGER SPWUSER.WEB_CUSTOMER_DELETE_TRI AFTER DELETE ON SPWUSER.WEB_CUSTOMER FOR EACH ROW BEGIN INSERT INTO WEB_CUSTOMER_DELETE_TMP (ID, NAME, CREATED, MODIFIED) VALUES (:old.ID, :old.NAME, :old.created, :old.modified); END; / --建立更新触发器 CREATE OR REPLACE TRIGGER SPWUSER.WEB_CUSTOMER_UPDATE_TRI AFTER UPDATE ON SPWUSER.WEB_CUSTOMER FOR EACH ROW BEGIN INSERT INTO WEB_CUSTOMER_UPDATE_TMP (ID, NAME, CREATED, MODIFIED) VALUES (:old.ID, :old.NAME, :old.created, :old.modified); END; /
二、建立一个针对表增删改的转换
从kettle菜单中依次选择“文件”-->“新建”-->“转换”或者按ctrl+N快捷键建立。而后依次选择“输入”-->“表输入”,“输出”-->“插入/更新”和“输出”-->“删除”,执行三次,以下图所示:
三、“表输入”控件,查询主库(Oracle)的快照表ide
四、“插入/更新”控件,插入数据到从库(PostgreSQL)的表,查询的关键字要求惟一3d
五、“删除”控件,将主库的快照表中的数据删除code
六、新建“做业”控件
新建做业控件,将三个转换引用起来,总览以下图所示:
Insert转换:
Update转换:
Delete转换:
发送邮件:blog