我使用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中的所有更改。答案 0 :(得分:1)
创建审计表并使用AFTER INSERT UPDATE DELETE触发器填充它。我喜欢记录密钥(你可以在这里记录ROWID),时间和日期,用户,SQL动词(INSERT,UPDATE,DELETE)和适当的值(在INSERT和UPDATE上使用NEW值,使用OLD记录DELETE时的值)。鉴于此,您应该能够从审计表中检索您的值。
分享并享受。