使用Oracle数据库更改通知检测更改

时间:2012-08-23 17:17:32

标签: database oracle jdbc change-notification

我使用oracle.jdbc.dcn.DatabaseChangeListener来记录表的插入/更新/删除。对于插入,我可以跟踪rowid。但是,我遇到更新和删除问题。

对于更新,我正在寻找一种方法来在更新之前找出行/列的值。

对于删除,我得到已删除的rowid,但这就是我得到的。我想要某种能力来跟踪哪一行被删除。

我正在使用oracle.jdbc.OracleConnection设置属性。

Properties changeNotifProps = new Properties();
changeNotifProps.put(OracleConnection.DCN_IGNORE_DELETEOP,"false");             
changeNotifProps.put(OracleConnection.DCN_IGNORE_INSERTOP, "false");
changeNotifProps.put(OracleConnection.DCN_IGNORE_UPDATEOP , "false");
changeNotifProps.put(OracleConnection.DCN_NOTIFY_CHANGELAG , "0");
changeNotifProps.put(OracleConnection.DCN_NOTIFY_ROWIDS , "true");
changeNotifProps.put(OracleConnection.NTF_LOCAL_HOST , <hostname>);
changeNotifProps.put(OracleConnection.NTF_LOCAL_TCP_PORT , "7115");
return changeNotifProps;

我可以设置某种属性来检测行的先前值吗?

编辑:我忘了提到我在数百张桌子上这样做了。我无法添加触发器/表来记录更改。我需要记录JVM中的所有更改。

1 个答案:

答案 0 :(得分:1)

创建审计表并使用AFTER INSERT UPDATE DELETE触发器填充它。我喜欢记录密钥(你可以在这里记录ROWID),时间和日期,用户,SQL动词(INSERT,UPDATE,DELETE)和适当的值(在INSERT和UPDATE上使用NEW值,使用OLD记录DELETE时的值)。鉴于此,您应该能够从审计表中检索您的值。

分享并享受。