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ではサポートされていません。
パラメータ
| パラメータ | 説明 |
|---|---|
|
|
キャッシュ・グループに割り当てられた名前。 |
|
|
|
|
|
|
|
|
キャッシュ・グループ表のパラレル・ロードを実行します。同時にロードを実行するスレッドの数を指定します。1つのスレッドがOracle Databaseからのバルク・フェッチを実行し、その他のスレッド(
|
|
|
|
説明
-
REFRESH CACHE GROUP文は、独自のトランザクション内で実行する必要があります。 -
キャッシュ・グループがレプリケートされるか、またはAWTキャッシュ・グループである場合、
REFRESH CACHE GROUP文を発行する前に、レプリケーション・エージェントが実行中であることを確認してください。キャッシュ・エージェントが稼働していることを確認してください。 -
REFRESHCACHEGROUP文は、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 EVERYnROWS(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句の中で使用) -
バインディング・パラメータを指定する場合
-
障害発生時にリフレッシュ・トランザクションをロールバックする場合
-
制限
-
REFRESHCACHEGROUP...WITHID句は、TimesTen Scaleoutではサポートされていません。 -
次の場合は
PARALLEL句を指定しないでください。-
WITH ID句が使用されている場合 -
COMMITEVERYnROWS句が使用されている場合 -
データベース・レベルのロックが有効な場合(接続属性
LockLevelが1に設定されている場合) -
読取り専用動的キャッシュ・グループの場合
-
-
次のタイプのキャッシュ・グループをリフレッシュする場合は、
WITH ID句を使用しないでください。-
静的読取り専用キャッシュ・グループ
-
自動リフレッシュ属性が指定された静的ユーザー管理キャッシュ・グループ
-
自動リフレッシュ属性および伝播属性が指定されたユーザー管理キャッシュ・グループ
-
-
WITH ID句はCOMMIT EVERYnROWS句と同時に使用しないでください。 -
動的または読取り専用キャッシュ・グループで
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.