ヘッダーをスキップ
Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド
リリース6.0
B25773-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

Oracleデータベースとキャッシュ・グループ間のデータのコピー

アプリケーションで次のSQL文を使用すると、Oracleからキャッシュ・グループに、またはキャッシュ・グループからOracleにデータをコピーできます。

LOAD CACHE GROUP
キャッシュに存在していないキャッシュ・インスタンスをOracleからロードします。
UNLOAD CACHE GROUP
インスタンスをキャッシュから削除します。
REFRESH CACHE GROUP
インスタンスをOracleデータで置き換えます。

キャッシュ・グループが(PROPAGATIONが有効でない状態で)USERMANAGEDである場合は、アプリケーションでFLUSH CACHE GROUP文を使用することもできます。FLUSH CACHE GROUP文は、キャッシュ・グループ内の行をTimesTenからOracleにコピーします。詳細は、「USERMANAGEDキャッシュ・グループのフラッシュ」を参照してください。

注意: アクセス制御を有効にしてTimesTenをインストールした場合、この項で説明されている文を使用するには、データ・ストアに対するADMIN権限が必要です。詳細は、『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』のアクセス制御とroot以外のインストールに関する章を参照してください。

次の項では、各タイプの処理について詳細に説明します。

キャッシュ・グループのロードおよびリフレッシュ

Oracleデータをキャッシュ・グループにロードする様々な方法については、『Oracle TimesTen In-Memory Databaseアーキテクチャ概要』のCache Connect to Oracleに関する章のキャッシュのロード方法の項を参照してください。

OracleからTimesTenにロードされる基本単位は、キャッシュ・インスタンスです。LOAD CACHE GROUPまたはREFRESH CACHE GROUP文のいずれかを使用すると、データをキャッシュ・グループにロードできます。次の相違はありますが、WHERE句が使用されているかどうかに関係なく、いずれのSQL文でもOracleからキャッシュ・グループにデータがコピーされます。

例4.28

インスタンスをOracleからWesternCustomersキャッシュ・グループにロードするには、次のように入力します。

LOAD CACHE GROUP WesternCustomers
    COMMIT EVERY 30 ROWS;

顧客のZIPコードが94022であるキャッシュ・グループ・インスタンスのみOracleからWesternCustomersキャッシュ・グループにロードするには、次のように入力します。

LOAD CACHE GROUP WesternCustomers
    COMMIT EVERY 30 ROWS
    WHERE (USER1.CUSTOMER.ZIP = 94022);

WesternCustomersキャッシュ・グループ全体をOracle表からリフレッシュするには、次のように入力します。

REFRESH CACHE GROUP WesternCustomers
    COMMIT EVERY 30 ROWS;

注文品目2353に関連付けられているキャッシュ・グループ・インスタンスのみリフレッシュするには、次のように入力します。

REFRESH CACHE GROUP WesternCustomers
    COMMIT EVERY 30 ROWS
    WHERE (USER1.ORDERDETAILS.ITEMID = 2353);

LOAD CACHE GROUPおよびREFRESH CACHE GROUP文の両方で、オプションのDURATION属性を設定できます。この属性は、CREATE CACHE GROUP文でキャッシュ・グループに設定されたデフォルトの存続時間値を上書きする場合に使用されます。詳細は、「DURATION」属性を参照してください。

キャッシュ・インスタンスがロードまたはリフレッシュされるたびに、インスタンスをエージ・アウトするタイミングを決定するための有効期限は、デフォルトのDURATION値、あるいはロードまたはリフレッシュ処理によって設定されるDURATIONに従って再設定されます。これは、ロードまたはリフレッシュ処理の前に行がキャッシュに存在していたかどうかに関係なく適用されます。

例4.29

新しい行をOracleからWesternCustomersキャッシュ・グループにロードし、新しくロードされたキャッシュ・インスタンスが20分後にエージ・アウトされるようにDURATION値を再設定するには、次のように入力します。

LOAD CACHE GROUP WesternCustomers
  COMMIT EVERY 10 ROWS
  DURATION 20;
注意: キャッシュ・グループ・インスタンスにアクセスする前にそのインスタンスに対してLOAD CACHE GROUPを実行すると、その有効期限が再設定され、指定した存続時間中はインスタンスがエージ・アウトされなくなります。

複数の表が含まれているキャッシュ・グループのロードおよびリフレッシュ

キャッシュ・グループに複数の表が含まれていて、Oracleがロードまたはリフレッシュ対象の表を現在更新している場合は、まずTimesTenの分離レベルをシリアライズ可能に設定してから、LOAD CACHE GROUPまたはREFRESH CACHE GROUP文を実行する必要があります。これによって、TimesTenはシリアライズ可能な方法でOracle表を問い合せ、ロードされたデータのトランザクション一貫性が保証されます。キャッシュ・グループをロードまたはリフレッシュした後、分離レベルをREAD_COMMITTEDに再設定して同時実行性を向上させることができます。

例4.30

ttIsqlセッション中、キャッシュ・グループをロードする前に分離レベルを再設定することができます。これは、キャッシュ・グループをロードまたはリフレッシュする場合、非ロギングモードに適用されます。

Command> isolation SERIALIZABLE;
Command> LOAD CACHE GROUP WesternCustomers
>COMMIT EVERY 1000 ROWS;
Command> isolation READ_COMMITTED;

キャッシュ・グループのアンロード

SQL文UNLOAD CACHE GROUPを使用すると、一部またはすべてのインスタンスをキャッシュ・グループから削除できます。DROP CACHE GROUP文とは異なり、表自体は削除されません。

UNLOAD CACHE GROUP文は、AUTOREFRESH属性を持つキャッシュ・グループに対しては注意して使用します。アンロードされた行またはその子行がOracleで更新された場合、その行は自動リフレッシュ処理の結果キャッシュ・グループに再表示される可能性があります。

例4.31

すべてのインスタンスをWesternCustomersキャッシュから削除するには、次のように入力します。

UNLOAD CACHE GROUP WesternCustomers;

CustId = 1の顧客をWesternCustomersキャッシュから削除するには、次のように入力します。

UNLOAD CACHE GROUP WesternCustomers WITH ID(1);
または
UNLOAD CACHE GROUP WesternCustomers
  WHERE (User1.Customer.CustId = 1);

UNLOAD CACHE GROUP文を使用すると、スライディング・ウィンドウ・キャッシュ・グループを管理できます。スライディング・ウィンドウ・キャッシュ・グループには、最後のn日間のデータが含まれています。スライディング・ウィンドウ・キャッシュ・グループの設定には、次の概念が含まれています。

スライディング・ウィンドウ・キャッシュ・グループを設定するには、次の手順を実行します。

  1. 列c1およびc2が含まれているt3というOracle表を作成します。
  2. CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 DATE);
  3. Oracle表t3から、タイムスタンプ列が含まれているキャッシュ・グループcg3を作成します。
  4. CREATE CACHE GROUP cg3 AUTOREFRESH INTERVAL 2 SECONDS
    FROM t3(c1 INT NOT NULL PRIMARY KEY,
    c2 TIMESTAMP, READONLY)
    WHERE c2 > SYSDATE - 3;

    毎日Oracle表に新しい行が挿入されると、それらの行はキャッシュに挿入されます。日付が最後のn日間外の行は更新されません。

例4.32

キャッシュ・グループから失効した行を削除するには、次のような文を入力します。

UNLOAD CACHE GROUP cg3
WHERE user1.t3.c2 < SYSDATE - CAST(3 AS INTERVAL DAY);

USERMANAGEDキャッシュ・グループのフラッシュ

1つ以上のキャッシュ・グループ表のPROPAGATIONが無効になっている(デフォルトの設定)場合は、FLUSH CACHE GROUP文を使用して、キャッシュ・グループで行った挿入または更新をTimesTenからOracleに選択的に伝播できます。FLUSH CACHE GROUPでは、削除は伝播されません。

FLUSH CACHE GROUP文にWHERE句またはWITH ID句を指定すると、Oracleにフラッシュするデータを選択的に制御できます。詳細は、『Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド』のFLUSH CACHE GROUPに関する項を参照してください。

例4.33

変更をWesternCustomersキャッシュ・グループからOracleにフラッシュするには、次のように入力します。

FLUSH CACHE GROUP WesternCustomers;
注意: FLUSH CACHE GROUPを使用するには、1つ以上の表がNOT PROPAGATEである必要があります。キャッシュ・グループ内のすべての表でREADONLYまたはPROPAGATEが有効になっている場合、FLUSH CACHE GROUP処理はエラーを返します。