REFRESH CACHE GROUP文は、UNLOAD CACHE GROUP文の後にLOAD CACHE GROUP文を続けて指定した場合と同じ処理を実行します。
必要な権限
Oracleスキーマに対するCREATE SESSION、およびOracle表に対するSELECTが必要です。
キャッシュ・グループの所有者の場合、キャッシュ・グループに対して必要な権限はありません。
別のユーザーのキャッシュ・グループの場合、REFRESH CACHE GROUPまたはREFRESH ANY CACHE GROUPが必要です。
SQL構文
REFRESH CACHE GROUP [Owner.]GroupName [WHERE ConditionalExpression] COMMIT EVERY n ROWS [PARALLEL NumThreads ]]
または
REFRESH CACHE GROUP [Owner.]GroupName WITH ID (ColumnValueList)
パラメータ
REFRESH CACHE GROUPには、次のパラメータがあります。
パラメータ | 説明 |
---|---|
[ Owner .] GroupName |
キャッシュ・グループに割り当てられた名前。 |
ConditionalExpression |
処理のターゲット行を指定する検索条件。 |
n |
処理をコミットする前にキャッシュ・グループに挿入する行の数。 値は負ではない整数である必要があります。 値が0(ゼロ)の場合、文全体が1つのトランザクションとして実行されます。 |
PARALLEL [ NumThreads ] |
キャッシュ・グループ表のパラレル・ロードを実行します。同時にロードを実行するスレッドの数を指定します。1つのスレッドがOracleからのバルク・フェッチを実行し、NumThreads から1を引いた数のスレッドがTimesTenへの挿入を実行します。各スレッドで独自の接続またはトランザクションが使用されます。
|
WITH ID ColumnValueList |
WITH ID句を使用すると、主キーの値を使用してキャッシュ・インスタンスをリフレッシュできます。ColumnValueList を主キーの値を表すリテラルまたはバインディング・パラメータのリストとして指定します。 |
説明
REFRESH CACHE GROUP文は、独自のトランザクション内で実行する必要があります。
REFRESH CACHE GROUPは、キャッシュ表にすでにインスタンスが存在している場合でも、TimesTenキャッシュ表のすべてのキャッシュ・インスタンスまたは指定されたキャッシュ・インスタンスを、対応するOracle表の最新のデータで置き換えます。 明示的にロードされるキャッシュ・グループの場合、リフレッシュ処理は、UNLOAD CACHE GROUP文の後にLOAD CACHE GROUP文を続けて指定した場合と同じ処理を実行します。 Oracle表のすべての行に対する処理(挿入、更新、削除など)が、キャッシュ表に適用されます。 動的キャッシュ・グループの場合、リフレッシュ処理は、更新または削除されたOracle表の行のみをキャッシュ表にリフレッシュします。明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループの詳細は、『Oracle In-Memory Database Cacheユーザーズ・ガイド』を参照してください。
読取り専用キャッシュ・グループをリフレッシュする場合、次の条件を満たしている必要があります。
AUTOREFRESH文は、PAUSEDにする必要があります。および
キャッシュ・グループが動的キャッシュ・グループでない場合、REFRESH文ではWHERE句を使用できません。
明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDの場合、キャッシュ・グループに対して発行された条件なしのREFRESH CACHE GROUP文が完了した後、状態はONに変更されます。
動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDの場合、REFRESH CACHE GROUP...WITH ID文が完了した後も状態はPAUSEDのままになります。
REFRESH CACHE GROUP文のWHERE句では、副問合せの中の表名は完全修飾されている必要があります。
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句の中で使用)
バインディング・パラメータを指定する場合
障害発生時にリフレッシュ・トランザクションをロールバックする必要がある場合
制限
次の場合はPARALLEL句を指定しないでください。
WITH ID句が使用されている場合
COMMIT EVERY 0 ROWS句が使用されている場合
データ・ストア・レベルのロックが有効な場合(接続属性LockLevel
が1に設定されている場合)
次のタイプのキャッシュ・グループをリフレッシュする場合は、WITH ID句を使用しないでください。
明示的にロードされる読取り専用キャッシュ・グループ
明示的にロードされる、自動リフレッシュ属性が指定されたユーザー管理キャッシュ・グループ
自動リフレッシュ属性および伝播属性が指定されたユーザー管理キャッシュ・グループ
WITH ID句はCOMMIT EVERY n ROWS句と同時に使用しないでください。
例
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(n は0より大きな値)が必要です。 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.
関連項目