Kettle:使用触发器和快照表进行增量数据同步

本文介绍了使用快照表和触发器进行增量数据同步。主库为Oracle 11g数据库,针对需要同步的表建立增量数据临时表以及触发器并通过kettle定时同步到PostgreSQL数据库。
1、主库创建快照表和触发器
注意:快照表结构和源表结构必须一致!

--创建插入快照表
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;
/

2、创建一个针对表增删改的转换
从kettle菜单中依次选择“文件”-->“新建”-->“转换”或者按ctrl+N快捷键创建。然后依次选择“输入”-->“表输入”,“输出”-->“插入/更新”和“输出”-->“删除”,执行三次,如下图所示:


Kettle:使用触发器和快照表进行增量数据同步

3、“表输入”控件,查询主库(Oracle)的快照表


Kettle:使用触发器和快照表进行增量数据同步
Kettle:使用触发器和快照表进行增量数据同步
Kettle:使用触发器和快照表进行增量数据同步

4、“插入/更新”控件,插入数据到从库(PostgreSQL)的表,查询的关键字要求唯一


Kettle:使用触发器和快照表进行增量数据同步
Kettle:使用触发器和快照表进行增量数据同步
Kettle:使用触发器和快照表进行增量数据同步

5、“删除”控件,将主库的快照表中的数据删除


Kettle:使用触发器和快照表进行增量数据同步
Kettle:使用触发器和快照表进行增量数据同步
Kettle:使用触发器和快照表进行增量数据同步

6、新建“作业”控件
新建作业控件,将三个转换引用起来,总览如下图所示:


Kettle:使用触发器和快照表进行增量数据同步

Insert转换:


Kettle:使用触发器和快照表进行增量数据同步

Update转换:


Kettle:使用触发器和快照表进行增量数据同步

Delete转换:


Kettle:使用触发器和快照表进行增量数据同步

发送邮件:


Kettle:使用触发器和快照表进行增量数据同步
Kettle:使用触发器和快照表进行增量数据同步

你可能感兴趣的:(Kettle:使用触发器和快照表进行增量数据同步)