REFRESH CACHE GROUP

REFRESH CACHE GROUP文は、TimesTenキャッシュ表のデータをキャッシュされたOracle Database表でコミットされた最新のデータに置き換えます。

必要な権限

Oracle DatabaseスキーマのCREATE SESSIONおよびOracle Database表のSELECT

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

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

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

TimesTen Scaleoutでの使用

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

SQL構文

REFRESH CACHE GROUP [Owner.]GroupName 
[WHERE ConditionalExpression]
COMMIT EVERY n ROWS
[PARALLEL NumThreads]

または

REFRESH 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を指定すると、REFRESH CACHE GROUP文は、1つのトランザクションとして実行されます。

[PARALLEL NumThreads]

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

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

WITH ID ColumnValueList

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

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

説明

  • REFRESH CACHE GROUP文は、独自のトランザクション内で実行する必要があります。

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

  • REFRESH CACHE GROUP文は、TimesTenキャッシュ表のデータをキャッシュされたOracle Database表でコミットされた最新のデータ(TimesTenキャッシュ表にすでに存在するデータも含む)に置き換えます。明示的にロードされるキャッシュ・グループの場合、リフレッシュ処理は、UNLOAD CACHE GROUP文の後にLOAD CACHE GROUP文を続けて指定した場合と同じ処理を実行します。Oracle Database表のすべての行での挿入、更新、削除などの操作は、キャッシュ表に適用されます。動的キャッシュ・グループの場合、リフレッシュ処理は、更新または削除されたOracle Database表の行のみをキャッシュ表にリフレッシュします。明示的にロードされるキャッシュ・グループと動的なキャッシュ・グループの詳細は、『Oracle TimesTen In-Memory Databaseキャッシュ・ガイド』「TimesTenデータベースとOracleデータベース間での変更の送信」を参照してください。

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

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

    • キャッシュ・グループが読取り専用動的キャッシュ・グループである場合、PARALLEL句を使用しないでください。

  • 明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDの場合、キャッシュ・グループに対して発行された条件なしのREFRESH CACHE GROUP文が完了した後、状態はONに変更されます。

  • 動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDの場合、REFRESH CACHE GROUP...WITH ID文が完了した後も状態はPAUSEDのままになります。

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

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

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

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

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

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

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

制限

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

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

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

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

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

    • 読取り専用動的キャッシュ・グループの場合

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

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

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

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

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

  • 動的または読取り専用キャッシュ・グループでWHERE句を使用しないでください。

REFRESH CACHE GROUP recreation.cache COMMIT EVERY 30 ROWS;

これは、次と同じです:

UNLOAD CACHE GROUP recreation.cache;
LOAD CACHE GROUP recreation.cache COMMIT EVERY 30 ROWS;

HRスキーマを使用して、PARALLEL句とREFRESH CACHE GROUP文を同時に使用する例を示します。COMMIT EVERY n ROWSが必要です。CACHEGROUPSコマンドを発行します。キャッシュ・グループcg2が定義され、自動リフレッシュの状態がPaused(一時停止中)であることが示されています。REFRESH 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> REFRESH CACHE GROUP cg2 COMMIT EVERY 20 ROWS PARALLEL 2;
25 cache instances affected.