0

我正在使用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 中的所有更改。

4

1 回答 1

1

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

分享和享受。

于 2012-08-23T17:32:23.567 回答