Oracleのデータは、LOAD CACHE GROUPまたはREFRESH CACHE GROUP文のいずれかを使用してキャッシュ・グループにロードできます。いずれのSQL文の場合も、WHERE句またはWITH ID句を使用して(または使用せずに)データがOracleからキャッシュ・グループにコピーされます。ロードとリフレッシュの違いは、次のとおりです。
OracleからWesternCustomersキャッシュ・グループにデータをロードするには、次のように入力します。
LOAD CACHE GROUP WesternCustomers
COMMIT EVERY 256 ROWS;
顧客のZIPコードが94022であるキャッシュ・グループ・インスタンスのみOracleからWesternCustomersキャッシュ・グループにロードするには、次のように入力します。
LOAD CACHE GROUP WesternCustomers
WHERE (user1.customer.zip = 94022)
COMMIT EVERY 256 ROWS;
WesternCustomersキャッシュ・グループ全体をOracle表からリフレッシュするには、次のように入力します。
REFRESH CACHE GROUP WesternCustomers
COMMIT EVERY 256 ROWS;
注文品目2353に関連付けられているキャッシュ・グループ・インスタンスのみリフレッシュするには、次のように入力します。
REFRESH CACHE GROUP WesternCustomers
WHERE (user1.orderdetails.itemid = 2353)
COMMIT EVERY 256 ROWS;
詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のLOAD CACHE GROUPおよびREFRESH CACHE GROUPに関する説明を参照してください。
この項の後半では、次の内容について説明します。
AUTOREFRESHおよびREADONLYキャッシュ・グループのロードとリフレッシュには、次の制約があります。
AUTOREFRESHキャッシュ・グループをロードするには、次の手順を実行します。
ALTER CACHE GROUP testcache SET AUTOREFRESH STATE PAUSED;
COMMIT;
UNLOAD CACHE GROUP testcache;
COMMIT;
LOAD CACHE GROUP testcache COMMIT EVERY 256 ROWS;
COMMIT;
ALTER CACHE GROUP testcache SET AUTOREFRESH STATE ON;
COMMIT;
「キャッシュ・グループのアンロード」を参照してください。
WITH ID句を使用すると、WHERE句を使用せずに、主キーの値に基づいてキャッシュ・グループをロードまたはリフレッシュできます。主キー値は、リテラルまたはバインディング・パラメータとして表現できます。WITH ID句は、同等のWHERE句より高速に処理できます。また、ロード・トランザクションが失敗したときにロールバックすることもできます。
WITH ID句は、AUTOREFRESHまたはREADONLYキャッシュ・グループに対しては使用できません。
WITH ID句では、キャッシュ・インスタンスを1つずつロードできます。主キーがorder_idのorders表があるとします。顧客が特定の注文に関して問い合せる場合、指定されたorder_idのキャッシュ・インスタンスをロードすることでその情報をロードできます。
Oracleでsampleという表を作成します。
CREATE TABLE sample (a NUMBER, b NUMBER, c NUMBER,
PRIMARY KEY (a,b));
次の行が含まれるように、表にデータを移入します。
A B C
---------- ---------- ----------
1 2 3
4 5 6
7 8 9
TimesTenでキャッシュ・グループを作成します。
CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP testcache
FROM sample
(a NUMBER, b NUMBER, c NUMBER, PRIMARY KEY (a,b));
キャッシュ・グループに主キーとして(1,2)を持る行をロードします。
LOAD CACHE GROUP testcache WITH ID (1,2);
1 cache instance affected.
SELECT * FROM sample;
< 1, 2, 3>
1 row found.
主キーとして(4,5)を持る行でtestcacheキャッシュ・グループをリフレッシュします。
REFRESH CACHE GROUP testcache WITH ID (4,5);
1 cache instance affected.
SELECT * FROM sample;
< 1, 2, 3 >
< 4, 5, 6 >
2 rows found.
キャッシュ・グループに複数の表が含まれていて、Oracleがロードまたはリフレッシュ対象の表を現在更新している場合は、TimesTenの分離レベルをシリアライズ可能に設定してから、LOAD CACHE GROUPまたはREFRESH CACHE GROUP文を実行した方がよい場合があります。これによって、TimesTenはシリアライズ可能な方法でOracle表を問い合せ、ロードされたデータのトランザクション一貫性が保証されます。キャッシュ・グループをロードまたはリフレッシュした後、分離レベルをREAD_COMMITTEDに再設定して同時実行性を向上させることができます。
ttIsqlセッション中、キャッシュ・グループをロードする前に分離レベルを再設定することができます。これは、キャッシュ・グループをロードまたはリフレッシュする場合、非ロギングモードに適用されます。
Command> isolation SERIALIZABLE;
Command> LOAD CACHE GROUP WesternCustomers
>COMMIT EVERY 1000 ROWS;
Command> isolation READ_COMMITTED;
LOAD CACHE GROUP文またはREFRESH CACHE GROUP文でPARALLEL句を使用すると、大きな表をロードまたはリフレッシュするときのパフォーマンスを向上できます。使用するスレッドの数を指定します。1つのスレッドでOracleの行がフェッチされ、残りのスレッドでキャッシュ・グループにデータが挿入されます。指定するスレッド数は、ロード可能なCPUの数を超えないようにしてください。
REFRESH CACHE GROUP WesterCustomers
COMMIT EVERY 256 ROWS
PARALLEL 2;