2012-08-23 73 views
0

我正在使用oracle.jdbc.dcn.DatabaseChangeListener将插入/更新/删除记录到表中。对于插入,我可以跟踪rowid。但是,我遇到更新和删除问题。使用Oracle数据库更改通知检测更改

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

对于删除,我得到了被删除的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

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

分享和享受。