複数の主キーのない複数のキャッシュ・インスタンスの動的ロード

TimesTen Classicでは、単一の表キャッシュ・グループでWHERE句で参照されている複数の主キーを使用せずに、複数のキャッシュ・インスタンスを動的にロードできます。

問合せで、データベースに存在しているキャッシュ・インスタンスと存在しないキャッシュ・インスタンスの両方のロードを試みた場合、動的ロード処理全体は実行されません。動的ロードは、リクエストされたキャッシュ・インスタンスがTimesTenデータベースにすでに存在しない場合のみ実行されます。

デフォルトでは、次の文、トランザクションまたは接続レベルのヒントのいずれかを1に設定しないかぎり、SELECT文に任意のWHERE句がある場合、TimesTen Classicは単一の表キャッシュ・グループの複数のキャッシュ・インスタンスを動的にロードしません。

  • 文レベルのヒント:

    /*+TT_DynamicLoadRootTbl (1)*/
  • トランザクション・レベルのヒント:

    Call ttOptSetFlag(DynamicLoadRootTbl , 1)
  • 接続レベルのヒント:

    OptimizerHint = TT_DynamicLoadRootTbl (1)

ノート:

『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』「オプティマイザ・ヒントを使用して実行計画を変更する」『Oracle TimesTen In-Memory Databaseリファレンス』「ttOptSetFlag」および『Oracle TimesTen In-Memory Database SQLリファレンス』「オプティマイザ・ヒント」を参照してください。

任意のWHERE句を持つ複数のキャッシュ・インスタンスの動的ロードの制限

単一の表キャッシュ・グループに対する複数のキャッシュ・インスタンスの動的ロードを行うには、SELECT文の問合せは次のものに従う必要があります。

  • WHERE句の結果には、TimesTenデータベースに現在存在するキャッシュ・インスタンスは含まれません。

  • WHERE句は、Oracle Database SQL構文でサポートされている必要があります。

  • 他の動的ロード条件に適格ではありません。

  • 集計を使用しません。

  • 問合せ内で他の表は参照されません。つまり、SELECT文では、JOIN句やWHERE句内に埋め込まれたサブ問合せは指定しません。

  • SELECT...FOR UPDATE句またはINSERT ... FOR SELECT句は使用しません。

これらの例では、TimesTenデータベースで次のキャッシュ・グループ定義を使用します。

CREATE DYNAMIC READONLY CACHE GROUP cust_orders FROM
    customers(cust_id BIGINT NOT NULL PRIMARY KEY, cust_name VARCHAR2(100), 
    cust_street VARCHAR2(200), cust_state VARCHAR2(2), cust_zip VARCHAR2(10))
    WHERE (customers.cust_state = 'CA');

データがOracleデータベースに挿入されます。

INSERT INTO customers(cust_id, cust_name, cust_street, cust_state, cust_zip)
  VALUES (100, 'Tom Hanks', '100 Rodeo Dr', 'CA', '90210');
INSERT INTO customers(cust_id, cust_name, cust_street, cust_state, cust_zip)
  VALUES (200, 'Fred Rogers', '1 Make-Believe Ave', 'CA', '90210');

リクエストされた顧客はいずれもTimesTenデータベースのキャッシュ・グループにありません。したがって、リクエストされたすべての顧客(およびその順序)が動的にロードされ、その名前が問合せによって返されます。

SELECT c.cust_name
 FROM customers c
  WHERE (c.cust_zip like '90210%');
<'Tom Hanks'>
<'Fred Rogers'>

別の顧客および全データがOracle Databaseに挿入されます。

INSERT INTO customers(cust_id, cust_name, cust_street, cust_state, cust_zip)
  VALUES (300, 'Matthew Rhys', '2 Moscow Cir', 'CA', '90210');

TimesTenデータベースでは、次の問合せが実行されます。キャッシュ・グループには問合せを満たす行が少なくとも1つあるため、動的ロードはトリガーされません。したがって、現在キャッシュ・グループに存在するデータのみが問合せに対して返されます。

SELECT c.cust_name
 FROM customers c
  WHERE (c.cust_zip like '90210%');
<'Tom Hanks'>
<'Fred Rogers'>