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 INSERTUPDATEDELETEトリガーを使用してそのテーブルにデータを入力します。キー(ここでROWIDをログに記録できます)、日時、ユーザー、SQL動詞(INSERT、UPDATE、DELETE)、および適切な値(INSERTとUPDATEでNEW値を使用、OLDを使用)をログに記録するのが好きです。 DELETEをログに記録するときの値)。これを考えると、監査テーブルから値を取得できるはずです。

共有してお楽しみください。

于 2012-08-23T17:32:23.567 に答える