動的キャッシュ・グループ
キャッシュ・グループの定義時にDYNAMIC
キーワードを指定して、キャッシュ・グループを動的にロードするかどうかを定義します。
対象となるSQL文でTimesTenデータベースに存在しない行を問い合せると、TimesTenによって、関連するキャッシュ・インスタンスがOracle Database表から動的キャッシュ・グループに自動的にロードされます。キャッシュ・インスタンスの動的ロードは、リクエストに応じてOracle DatabaseからTimesTenデータベースに適格なキャッシュ・インスタンスを取得して自動的にロードするという点で、LOAD CACHE GROUP
文と似ています。キャッシュ・インスタンスは任意のキャッシュ・グループのルート表の行(主キーまたは一意索引によりルート表で一意に識別されます)および外部キー関係で関連付けられた子表のすべての関連行で構成されます。動的ロード処理では、キャッシュされたOracle Database表の対応する行が更新または削除された場合でも、キャッシュ表にすでに存在するキャッシュ・インスタンスは更新または削除されません。動的ロード処理は、アプリケーションのデータを動的に提供するために使用されます。多くの場合、不要なデータをエージ・アウトし、必要に応じて動的にロードできるように、動的ロード処理はエージングと組み合されます。
ノート:
REFRESH CACHE GROUP
文および自動リフレッシュは、TimesTenデータベースにすでに存在するキャッシュ・インスタンスを更新または削除するために使用されます。自動リフレッシュを使用して、Oracle Databaseのキャッシュ・インスタンスに対する変更を自動的に移入できます。
たとえば、コール・センター・アプリケーションでは、顧客の情報が非常に多い場合があるため、すべての顧客の情報をTimesTenに事前ロードしないことがあります。かわりに、DYNAMIC
キーワードを使用してキャッシュ・グループを定義できます。その後、キャッシュ・グループでリクエストに応じて動的ロードを使用すると、顧客から問合せがあったとき、または顧客がシステムにログオンしたときにのみ特定の顧客の情報をロードできます。
次の例では、sales.customer
表をキャッシュする動的な読取り専用キャッシュ・グループonline_customers
が作成されます:
CREATE DYNAMIC READONLY CACHE GROUP online_customers FROM sales.customer (cust_num NUMBER(6) NOT NULL, region VARCHAR2(10), name VARCHAR2(50), address VARCHAR2(100), PRIMARY KEY(cust_num));
すべてのシステム管理キャッシュ・グループ・タイプ(読取り専用、AWT、SWTまたはハイブリッド)は、DYNAMIC
キーワードを使用して定義できます。ユーザー管理キャッシュ・グループは、AUTOREFRESH
とPROPAGATE
の両方のキャッシュ表属性を使用する場合を除き、DYNAMIC
キーワードを使用して定義できます。
ノート:
増分自動リフレッシュを使用した動的な読取り専用キャッシュ・グループがある場合は、「自動リフレッシュ処理と動的ロード処理の競合を削減するためのオプション」で説明されている方法のいずれかを使用して、競合を減らしてパフォーマンスを向上させることができます。
キャッシュ・グループが動的ロードに対して有効になっている場合、キャッシュ・インスタンスは、主キー、任意の表に対する一意の索引または子表の外部キーによって一意に識別されます。キャッシュされたOracle Database表の行がWHERE
句の条件を満たし、その行がTimesTenデータベースにない場合は、親表および子表の主キーと外部キー間に定義された関係を維持するために、関連するキャッシュ・インスタンス全体がロードされます。動的ロードに対してキャッシュ・グループが有効になっている場合、動的ロード処理では、通常、複数のキャッシュ・インスタンスのロードをリクエストしないかぎり(「複数のキャッシュ・インスタンスの動的ロード」を参照)、1つのキャッシュ・インスタンスのみを任意のキャッシュ・グループのルート表にロードします。
WHERE
句は、動的ロードを発生させるために次のいずれかを指定する必要があります。
-
キャッシュ・グループのいずれかの表に関する主キーまたは外部キーのすべての列に対して定数またはパラメータ、あるいはその両方を持つ等価条件。複数のキャッシュ・グループの表を参照する場合、各表は主キーおよび外部キーの関係について等価条件で接続される必要があります。
-
一意索引のすべての列に対する等価条件または
IS NULL
条件の組合せ(最低1つの等価条件を使用する場合)。つまり、一意索引の一部の列がNULL
である動的ロードを実行できます。一意索引は、キャッシュ・グループのルート表で作成する必要があります。
ノート:
ルート表の主キー検索に基づいた動的ロードの方が、子表に対する主キー検索または子表に対する外部キー検索よりも、パフォーマンスが速くなります。
動的ロードは、動的ロードをトリガーするユーザー・トランザクションとは別のトランザクションで実行されます。動的ロード・トランザクションは、動的ロードをトリガーするSQL文が処理を終了する前にコミットされます。したがって、ユーザー・トランザクションがロールバックされる場合、動的にロードされたデータはキャッシュ・グループに残ったままになります。
ノート:
ただし、Oracle Databaseが停止している場合は、次のエラーが返されます。
5219: Temporary Oracle connection failure error in OCISessionBegin(): ORA-01034: ORACLE not available
次の各項ではキャッシュ・グループの動的ロードについて説明します。