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

本文介绍了使用快照表和触发器进行增量数据同步。主库为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快捷键建立。而后依次选择“输入”-->“表输入”,“输出”-->“插入/更新”和“输出”-->“删除”,执行三次,以下图所示:
Kettle:使用触发器和快照表进行增量数据同步
三、“表输入”控件,查询主库(Oracle)的快照表
Kettle:使用触发器和快照表进行增量数据同步ide

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

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

四、“插入/更新”控件,插入数据到从库(PostgreSQL)的表,查询的关键字要求惟一
Kettle:使用触发器和快照表进行增量数据同步3d

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

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

五、“删除”控件,将主库的快照表中的数据删除
Kettle:使用触发器和快照表进行增量数据同步code

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

Kettle:使用触发器和快照表进行增量数据同步
六、新建“做业”控件
新建做业控件,将三个转换引用起来,总览以下图所示:
Kettle:使用触发器和快照表进行增量数据同步
Insert转换:
Kettle:使用触发器和快照表进行增量数据同步
Update转换:
Kettle:使用触发器和快照表进行增量数据同步
Delete转换:
Kettle:使用触发器和快照表进行增量数据同步
发送邮件:
Kettle:使用触发器和快照表进行增量数据同步
Kettle:使用触发器和快照表进行增量数据同步blog

相关文章
相关标签/搜索