LOAD CACHE GROUP

LOAD CACHE GROUP文は、Oracle Database表からTimesTenキャッシュ・グループにデータをロードします。

必要な権限

キャッシュ・グループの所有者に必要な権限はありません。

別のユーザーのキャッシュ・グループの場合、LOADまたはLOAD ANY CACHE GROUPが必要です。

基礎となる表に対するINSERT権限、DELETE権限、UPDATE権限。

TimesTen Scaleoutでの使用

この文は、TimesTen Scaleoutでサポートされています。

SQL構文

LOAD CACHE GROUP [Owner.]GroupName 
[WHERE ConditionalExpression] 
COMMIT EVERY n ROWS
[PARALLEL NumThreads [READERS NumReaders]]

または

LOAD CACHE GROUP [Owner.]GroupName
WITH ID (ColumnValueList)

ノート:

WITH ID句は、TimesTen Scaleoutではサポートされていません。

パラメータ

パラメータ 説明

[Owner.]GroupName

キャッシュ・グループに割り当てられた名前。

WHERE ConditionalExpression

WHERE句を使用すると、キャッシュ処理のターゲット行を指定する検索条件を指定できます。WHERE句で複数の表を使用し、これらの表に同じ名前の列がある場合は、表名を完全修飾します。

COMMIT EVERY n ROWS

COMMIT EVERY n ROWS句を使用して、ロード操作中にコミットを発行する頻度(キャッシュ・グループにロードされる行数に基づく)を指定します。この句はWITH ID句を指定しない場合に必須です。

nは、トランザクションがコミットされる前にキャッシュ・グループにロードされる行数を示します。nは整数(n >= 0)で指定します。nに0を指定すると、LOAD CACHE GROUP文は、1つのトランザクションとして実行されます。

[PARALLEL NumThreads]

キャッシュ・グループ表のパラレル・ロードを実行します。同時にロードを実行するスレッドの数を指定します。1つのスレッドがOracle Databaseからのバルク・フェッチを実行し、その他のスレッド(NumThreads - 1個のスレッド)がTimesTenへの挿入を実行します。各スレッドで独自の接続またはトランザクションが使用されます。

NumThreadsの最小値は2です。最大値は10です。10より大きい値を指定すると、TimesTenは値10を割り当てます。

[READERS NumReaders]

このオプションでは、Oracle Databaseからのバルク・フェッチのために使用するNumThreadsパラメータからのスレッドの合計数を指定します。

たとえば、NumThreadsパラメータを8、リーダー・オプションを3に指定した場合、Oracle Databaseからデータをバルク・フェッチするために3つのスレッドが使用され、TimesTenデータベースにデータをロードするために5つのスレッドが使用されます。

NumReadersは整数(0 < NumReaders < NumThreads)で指定します。

WITH ID ColumnValueList

WITH ID句を使用すると、主キーの値を使用してキャッシュ・インスタンスをロードできます。ColumnValueListを主キーの値を表すリテラルまたはバインディング・パラメータのリストとして指定します。

WITH ID句は、TimesTen Scaleoutではサポートされていません。

説明

  • LOAD CACHE GROUPは、キャッシュ・グループの定義を満たし、キャッシュ・グループにまだ存在していないすべての新しいキャッシュ・インスタンスをOracle Databaseからロードします。

  • キャッシュ・グループがレプリケートされるか、またはAWTキャッシュ・グループである場合、LOAD CACHE GROUP文を発行する前に、レプリケーション・エージェントが実行中であることを確認してください。キャッシュ・エージェントが稼働していることを確認してください。

  • LOAD CACHE GROUPは、独自のトランザクション内で実行され、トランザクション内の最初の操作である必要があります。

  • LOAD CACHE GROUPは、Oracle Database表に対する新規(挿入)行のみを、対応するTimesTenキャッシュ表にロードします。

  • エラーが発生するとロールバックされます。キャッシュ・インスタンスが定期的にコミットされる場合、エラーが発生すると残りのロードは中止されます。ロードは直前にコミットした時点までロールバックされます。

  • COMMIT EVERY n ROWS (n >= 0)を指定しているときにLOAD CACHE GROUP文が失敗すると、ロードされた行の一部はすでにコミットされているために、ターゲット・キャッシュ・グループの内容が一貫性のない状態になる場合があります。一部のキャッシュ・インスタンスが部分的にしかロードされていない可能性があります。UNLOAD CACHE GROUP文を使用してキャッシュ・グループをアンロードしてから、キャッシュ・グループを再ロードします。

  • 一般的には、LOAD CACHE GROUP文のWHERE句の列名を完全に修飾する必要はありません。ただし、同一キャッシュ・グループ内の複数の表を結合する問合せがTimesTenによって自動的に生成されるため、キャッシュ・グループ内に同じ名前の列を持つ表が複数ある場合は、列を完全に修飾する必要があります。

  • 読取り専用キャッシュ・グループをロードする場合、次の条件を満たしている必要があります。

    • AUTOREFRESHのSTATEは、PAUSEDにする必要があります。

    • LOAD CACHE GROUP文ではWHERE句を使用できません(動的キャッシュ・グループの場合を除く)。

    • キャッシュ・グループは空である必要があります。

  • キャッシュ・グループの自動リフレッシュ状態は、LOAD CACHE GROUP操作の完了後に変更されることがあります。詳細は、『Oracle TimesTen In-Memory Databaseキャッシュ・ガイド』「自動リフレッシュを使用する動的キャッシュ・グループのロードおよびリフレッシュ」を参照してください。

  • LOAD CACHE GROUP文の実行後、ODBC関数SQLRowCount()、JDBCメソッドgetUpdateCount()、およびOCI_ATTR_ROW_COUNT引数を指定したOCI関数OCIAttrGet()を実行すると、ロードされたキャッシュ・インスタンスの数が返されます。

  • 次の場合にWITH ID句を使用します。

    • キャッシュ・インスタンスのロード速度を上げる場合(WHERE句の中で使用)

    • バインディング・パラメータを指定する場合

    • 障害発生時にロード・トランザクションをロールバックする場合

制限

  • LOAD CACHE GROUP...WITH ID句は、TimesTen Scaleoutではサポートされていません。

  • WHERE句で子表を参照しないでください。

  • 次の場合にはPARALLEL句を指定しないでください。

    • WITH ID句が使用されている場合

    • COMMIT EVERY 0 ROWS句が使用されている場合

    • データベース・レベルのロックが有効な場合(接続属性LockLevelが1に設定されている場合)

  • 次のタイプのキャッシュ・グループをロードする場合は、WITH ID句を使用しないでください。

    • 静的読取り専用キャッシュ・グループ

    • 自動リフレッシュ属性が指定された静的ユーザー管理キャッシュ・グループ

    • AUTOREFRESHおよびPROPAGATE属性が指定されたユーザー管理キャッシュ・グループ

  • WITH ID句はCOMMIT EVERY n ROWS句と同時に使用しないでください。

CREATE CACHE GROUP recreation.cache
    FROM recreation.clubs (
        clubname CHAR(15) NOT NULL,
        clubphone SMALLINT,
        activity CHAR(18),
        PRIMARY KEY(clubname))
    WHERE (recreation.clubs.activity IS NOT NULL);

LOAD CACHE GROUP recreation.cache
    COMMIT EVERY 30 ROWS;

HRスキーマを使用して、PARALLEL句とLOAD CACHE GROUP文を同時に使用する例を示します。COMMIT EVERY n ROWS句が必要です。CACHEGROUPSコマンドを発行します。キャッシュ・グループcg2が定義され、自動リフレッシュの状態がPaused(一時停止中)であることが示されています。キャッシュ・グループcg2をアンロードしてから、LOAD CACHE GROUP文とPARALLEL句を指定してパラレル・ロードを実行します。25個のキャッシュ・インスタンスがロードされます。

Command> CACHEGROUPS;

Cache Group SAMPLEUSER.CG2:

  Cache Group Type: Read Only
  Autorefresh: Yes
  Autorefresh Mode: Incremental
  Autorefresh State: Paused
  Autorefresh Interval: 1.5 Minutes

  Root Table: SAMPLEUSER.COUNTRIES
  Table Type: Read Only

  Child Table: SAMPLEUSER.LOCATIONS
  Table Type: Read Only

  Child Table: SAMPLEUSER.DEPARTMENTS
  Table Type: Read Only

1 cache group found.

Command> UNLOAD CACHE GROUP cg2;
25 cache instances affected.
Command> COMMIT;
Command> LOAD CACHE GROUP cg2 COMMIT EVERY 10 ROWS PARALLEL 2;
25 cache instances affected.
Command> COMMIT;

次の例では、対応するOracle Database表からnew_customersキャッシュ・グループのTimesTenキャッシュ表に、顧客番号が5000以上の顧客のキャッシュ・インスタンスのみをロードします。

LOAD CACHE GROUP new_customers WHERE (oratt.customer.cust_num >= 5000) COMMIT
EVERY 256 ROWS;