LOAD CACHE GROUP文は、Oracle表からTimesTenキャッシュ・グループにデータをロードします。 ロードはローカルでの処理です。キャッシュ・グリッド・メンバー間には伝播されません。
必要な権限
キャッシュ・グループの所有者に必要な権限はありません。
別のユーザーのキャッシュ・グループの場合、LOAD CACHE GROUPまたはLOAD ANY CACHE GROUPが必要です。
SQL構文
LOAD CACHE GROUP [Owner.]GroupName [WHERE ConditionalExpression] COMMIT EVERY n ROWS [PARALLEL NumThreads]
または
LOAD CACHE GROUP [Owner.]GroupName WITH ID (ColumnValueList)
パラメータ
LOAD CACHE GROUP文には、次のパラメータがあります。
パラメータ | 説明 |
---|---|
[ Owner .] GroupName |
キャッシュ・グループに割り当てられた名前。 |
ConditionalExpression |
処理のターゲット行を指定する検索条件。 |
n |
処理をコミットする前にキャッシュ・グループに挿入する行の数。 負ではない整数である必要があります。 n が0(ゼロ)の場合、文全体が1つのトランザクションとして実行されます。 |
[ PARALLEL NumThreads ] |
キャッシュ・グループ表のパラレル・ロードを実行します。同時にロードを実行するスレッドの数を指定します。1つのスレッドがOracleからのバルク・フェッチを実行し、NumThreads から1を引いた数のスレッドがTimesTenへの挿入を実行します。各スレッドで独自の接続またはトランザクションが使用されます。
|
WITH ID ColumnValueList |
WITH ID句を使用すると、主キーの値を使用してキャッシュ・インスタンスをロードできます。ColumnValueList を主キーの値を表すリテラルまたはバインディング・パラメータのリストとして指定します。 |
説明
キャッシュ・グループの定義を満たし、キャッシュ・グループにまだ存在していないすべての新しいインスタンスをOracleからロードします。
LOAD CACHE GROUPは、独自のトランザクション内で実行し、トランザクション内の最初の操作である必要があります。
明示的にロードされるキャッシュ・グループの場合、LOAD CACHE GROUPはTimesTenキャッシュ表にすでに存在するキャッシュ・インスタンスを更新しません。 このため、LOAD CACHE GROUPは、Oracle表に対する挿入のみを、対応するTimesTenキャッシュ表にロードします。
動的キャッシュ・グループの場合、LOAD CACHE GROUPは、Oracle表で挿入、更新および削除された行をキャッシュ表にロードします。 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループの詳細は、『Oracle In-Memory Database Cacheユーザーズ・ガイド』を参照してください。
トランザクション・サイズは、処理をコミットする前に挿入した行の数です。 COMMIT EVERY n ROWSのnの値は、負ではない数である必要があります。また、この値はパフォーマンス上の理由から、最も近い256の倍数に切り上げられます。
エラーが発生するとロールバックされます。 行が定期的にコミットされる場合、エラーが発生すると残りのロードは中止されます。 ロードは直前にコミットした時点までロールバックされます。
COMMIT EVERY n ROWS(nは0より大きな値)を指定しているときにLOAD文が失敗すると、ターゲット・キャッシュ・グループの内容が一貫性のない状態になる場合があります。一部のキャッシュ・インスタンスが部分的にしかロードされていない可能性があります。 UNLOAD文を使用してキャッシュ・グループをアンロードしてから、再度ロードを実行します。
LOAD CACHE GROUP文のWHERE句では、副問合せの中の表名は完全修飾されている必要があります。
読取り専用キャッシュ・グループをロードする場合、次の条件を満たしている必要があります。
AUTOREFRESHのSTATEは、PAUSEDにする必要があります。および
LOAD CACHE GROUP文ではWHERE句を使用できません(動的キャッシュ・グループの場合を除く)。および
キャッシュ・グループは空である必要があります。
明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDの場合、キャッシュ・グループに対して発行されたLOAD CACHE GROUP文が完了した後、状態はONに変更されます。動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDであり、キャッシュ表に移入が行われている場合は、キャッシュ・グループに対して発行されたLOAD CACHE GROUP文が完了した後も状態はPAUSEDのままになります。
LOAD 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句と同時に使用しないでください。
WITH ID句を使用して別のキャッシュ・グリッド・メンバーからキャッシュ・インスタンスを取得することはできません。
例
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(n は0より大きな値)が必要です。 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表からnew_customersキャッシュ・グループのTimesTenキャッシュ表に、顧客番号が5000以上の顧客のキャッシュ・インスタンスのみをロードします。
LOAD CACHE GROUP new_customers WHERE (oratt.customer.cust_num >= 5000) COMMIT EVERY 256 ROWS;
関連項目