2009-08-12 20 views
0

私たちのプロジェクトでは、キャッシュの依存関係を使用したいと思います。いくつかの検索の後、私はそれがSql Serverのためだけであることを学びました。それ以前は?Oracleの表に依存性を設定する最も簡単な方法は、Oracle 11gおよび.net 2008を使用しています。どのようにOracle Datatableに依存関係を設定する

答えて

1

Oracleでは、dbms_alert packageを使用して通知スキームを実装できます。あなたがDBMS_ALERTグーグル場合、あなたはあなたにそれを使用する方法の例を与える多くのページを見つけることができますが、基本的には3つの事を必要とする:あなたが欲しいとき

  1. あなたは(あなたが選んだのラベル付き)dbms_alert.raiseを呼び出します(キャッシュの依存関係が必要なテーブルの挿入/更新/削除トリガーでは、explepleのために)変更を通知されます。

  2. クライアントは、(特定のラベルが登録されている)dbms_alert.register関数を呼び出した接続を保持します。

  3. いつでも、クライアントはdbms_alert.waitまたは.waitanyを呼び出すことができます。アラートが発生するまで機能がブロックされます(またはタイムアウトを指定することもできます)。あなたのケースでは、監視していたデータを表示する必要がある直前に、waittimeを短時間で呼び出すことができます。

待機機能はうまくいきます。第2のものが変更されたことを知る必要がない限り、常にポーリングする必要はありません。その代わりに、キャッシュされたデータを使用して最新の状態にするときに、そのデータをチェックするだけで済みます。また、クライアントはコミットしたトランザクションがコミットするまで通知されません。

dbms_alertの最大の制限は、一度に特定のラベルのコミットされていないアラートを発生させるトランザクションが1つだけであることです。つまり、トランザクションAがアラート "foo"を発生させた場合、トランザクションBはロールバックまたはコミットするまで "foo"を発生させた時点でブロックされるため、通常は長い時間がかかるトランザクションでアラートを使用することはお勧めできません他のユーザーをブロックすることは設計の一部です)。また、前述のように、クライアントは通知をチェックするために使用される接続を保持する必要があります。これは他のデータベースアクティビティを実行するために使用しているのと同じ接続にすることができますが、接続プーリング/共有が大量に行われるアプリケーションを作成する場合は、その接続を保持する機能が必要ですキャッシュの一貫性を保つ必要がある時間。

関連する問題