0

多くのテーブルを持つ Oracle DB があります...どうすれば Oracle DB をリッスンする何かを作成できますか?DB に変更が加えられた場合、何らかの処理を行う別のプログラムを呼び出します。

  1. 非同期だろう
  2. なんらかの種類の DML が発生した場合に Java プログラムをトリガーする必要があるだけですt want details about which table or what rows or new/old values ... If there is a DML on any table in a DB call a java program that
4

3 に答える 3

0

http://docs.oracle.com/cd/B14117_01/win.101/b10118/o4o00118.htm OracleDB にはいくつかのイベントがあります。それらを使用してみてください。たとえば、db が更新されたとき - 別の Java プログラムを呼び出す場合: Runtime.getRuntime().exec(/ここで引数/);

于 2013-07-19T21:01:48.003 に答える
0

ここで失敗する準備をしているのではないかと心配しています。関連するが、少し異なる行動方針を提案します。

データが変更されるたびに処理をトリガーするのではなく、代わりにCronQuartzなどを使用して X 分/時間ごとに処理を実行することを検討してください。

変更が行われていないときに実行することが心配な場合は、トリガーをテーブルに追加して「最終更新」テーブルを更新し、最後の実行以降に変更が行われていない場合は中止できます。

これにより、「on-update-processor」で発生する最大の懸念、つまりプロセスをトリガーする update があり、そのプロセスの実行中に別の更新が発生した場合に何をするかが回避されます。別のプロセスをトリガーしますか? それらが競合する場合はどうなりますか?更新と同期プロセスの間にわずかな遅延があることを許可した方がよいと思います。

于 2013-07-19T21:04:06.610 に答える
0

それは質問のかなり難しい注文です。

まず、DML 操作 (INSERT、UPDATE、DELETE) が発生したことを検出する方法が必要になります。

個々のテーブルの監査には、TRIGGERS を使用できます。

CREATE TRIGGER [BEFORE|AFTER] [INSERT][UPDATE][DELETE] ... [FOR EACH ROW]

規範的なアクションは、情報に関する情報 (後で必要になるものは何でも) を「監査ログ」テーブルに記録することです。実行する必要がある操作が同期であるか (DML が完了する前に実行する必要がある)、またはそれらの操作を非同期で実行できるか (DML の完了後にいつでも実行できる) かを決定する必要があります。

通常、同期処理は PL/SQL で行われますが、Oracle は外部プロシージャ (EXTPROC) を呼び出すためのメカニズムを提供しますが、TRIGGER からそれを行うことは望ましくありません。

Oracle は、「ファイングレイン監査」も提供します。FGA によって収集される情報は、FOR EACH ROW トリガーで取得できるような「行ごと」のレベルではありません。

したがって、それは実際に何を達成しようとしているかによって異なります。

次のステップは、この情報を外部プロセスに渡す方法を理解することです。そのプロセスは、テーブル (またはテーブルのセット) を定期的にポーリングしますか? AQ Advanced Queueing やその他のキュー メカニズムを使用しますか?

于 2013-07-19T21:14:33.887 に答える