1

Oracle の監査 (11g 非クラスター化) が有効になっている Java/Hibernate/Spring アプリケーションを使用していますが、適切に構成されているようです。

ただし、一部のエントリは SYS.AUD$ に書き込まれません。

これが私のシナリオです:

Oracle で 8 つの挿入を実行するトランザクションがあります。これは休止状態の showsql によって表示され、実際には DB に書き込まれます。

特定のテーブルに対して AUDIT INSERT RULE BY ACCESS があり、特定のトランザクションに対して Oracle の AUDIT で 8 つの監査エントリが表示されることを期待していましたが、ログに記録された挿入は 4 つだけでした。5 つのエントリがログに記録されることもあれば、3 つのエントリがログに記録されることもあります。

この動作が hibernate.jdbc.batch_size プロパティ値に関連していることを突き止めることができました。

説明されているシナリオでは、値は 10 に設定されています。

ただし、値を 0 に変更すると、jdbc バッチ処理が無効になり、すべてが期待どおりに機能し、常に 8 つの挿入監査ログが取得されます。

ojdbc ドライバーのバグかと思いましたが、最新バージョンにアップグレードしてもバグが消えませんでした。

jdbc バッチを無効にすることは、私にとって選択肢ではありません。バグですか?これを克服する方法について何か考えはありますか?

4

1 に答える 1

1

Direct-Path INSERT に関連していると思います。FGA を使用すると、(私が思うに) Direct-Path INSERT は発生しないため、監査は常に機能します。Direct-Path INSERTまたはauditのいずれかを選択する必要があると思います。

なぜjdbcのバッチ処理が必要なのですか? これはどのような種類のアプリですか? オンとオフでパフォーマンス テストを行いましたか?

于 2013-01-09T20:11:31.567 に答える