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

前へ
前へ
次へ
次へ
 

ユーザー管理キャッシュ・グループの作成

システム管理キャッシュ・グループ(READONLY、AWTおよびSWT)で必要な処理が行われない場合は、CREATE USERMANAGED CACHE GROUP文を使用して、カスタマイズされたキャッシュ動作を実装するユーザー管理キャッシュ・グループを作成できます。

USERMANAGEDキャッシュ・グループの表定義

USERMANAGEDキャッシュ・グループの表定義は、システム管理キャッシュ・グループの表定義と同様ですが、次の機能が追加されています。

表レベルでのライトスルーおよび読取り専用の制御

USERMANAGEDキャッシュ・グループ内の各表定義で、PROPAGATE属性またはREADONLY属性を指定して表レベルでライトスルーまたは読取り専用を定義することができます。詳細は、「キャッシュ表属性」を参照してください。

キャッシュ・インスタンス

システム管理キャッシュ・グループREADONLYおよびWRITETHROUGHは、Oracleとそのキャッシュ・グループ間の変更を表レベルの粒度で伝播します。USERMANAGEDキャッシュ・グループは、行レベルのデータ(キャッシュ・インスタンスと呼ばれる)をOracleとTimesTenキャッシュ・グループ間で伝播します。

キャッシュ・インスタンスは、キャッシュ・グループのルート表の主キーによって識別される特定のデータ行です。キャッシュ・グループに複数の表がある場合、キャッシュ・インスタンスは、外部キー関係を介してルート表の行と関連付けられている行のセットで構成されます(図2.18を参照)。

キャッシュ・インスタンスは、Oracleからキャッシュにロードされ、キャッシュからOracleに伝播され、不要になるとエージ・アウトされるデータの単位です。キャッシュ・グループの表定義によっては、Oracle行データのサブセットの場合もあります。

例2.9

図2.18は、図2.12で示したTargetCustomersキャッシュ・グループを示しています。ルート表の主キー122によって識別されるキャッシュ・インスタンスがキャッシュ・グループ内の各表で強調表示されています。このキャッシュ・インスタンス・キーは、ルート表の行およびルート表の行を参照する子表のすべての関連行を識別します。

図2.18 キャッシュ・グループ内のキャッシュ・インスタンス

キャッシュ・インスタンスによる行レベルの制御によって、USERMANAGEDキャッシュ・グループでは2つの機能を使用できます。これらの機能は、システム管理キャッシュ・グループでは使用できません。

キャッシュ・インスタンスのエージング

キャッシュ・グループにDURATION属性を設定すると、一定時間の後、キャッシュ・グループからキャッシュ・インスタンスを削除できます。詳細は、「DURATION」を参照してください。

WHERE句

CREATE USERMANAGED CACHE GROUP文の表定義にWHERE句を含めて、キャッシュにOracleデータをコピーする場合の検索条件を指定できます。LOAD CACHE GROUP文、UNLOAD CACHE GROUP文、REFRESH CACHE GROUP文およびFLUSH CACHE GROUP文にもWHERE句を指定できます。LOAD CACHE GROUP文やREFRESH CACHE GROUP文などの一部の文では、キャッシュ・グループのWHERE句が文のWHERE句より前に評価される連結WHERE句が発生する場合があります。また、すべてのWHERE句はTimesTenによって解析されます。TimesTenでは、一部のOracle固有の構文が禁止されています。

例2.10

この例では、OracleのCustomer表から、西地区のZIPコードを持つ顧客に関連するデータのみをキャッシュするWHERE句を指定し、WesternCustomersキャッシュ・グループを作成します。

CREATE USERMANAGED CACHE GROUP WesternCustomers
    DURATION 10
    FROM
    User1.Customer (CustId int NOT NULL,
        Name CHAR(100) NOT NULL,
        Addr CHAR(100),
        Zip CHAR(10),
        Region CHAR(10),
        PRIMARY KEY(CustId),
        PROPAGATE)
    WHERE (User1.Customer.Region = 'Western');

次に、LOAD CACHE GROUP文にさらにWHERE句を指定し、IDが100以下の西地区の顧客のみをキャッシュします。

LOAD CACHE GROUP WesternCustomers WHERE (CustId <= 100);

CREATE USERMANAGED CACHE GROUP文およびLOAD CACHE GROUP文のWHERE句は、データがキャッシュ・グループにロードされる前にOracleで評価されます。

WHERE句を作成する場合に使用する構文は、TimesTenで解析可能である必要があります。たとえば、次のようなOracle固有のスカラー関数を含めることはできません。

WHERE DECODE(COL1, 1, 'A', 2, 'B') = 'A')

次の表に、LOAD CACHE GROUP文、UNLOAD CACHE GROUP文、REFRESH CACHE GROUP文およびFLUSH CACHE GROUP文のWHERE句がTimesTenまたはOracle(あるいはその両方)で評価されるかどうかを示します。また、CREATE USERMANAGED CACHE GROUP文にWHERE句が含まれている場合、この追加のWHERE句がOracleで評価されるタイミングも示します。

キャッシュ・グループ文
文のWHERE句の評価対象
CREATE CACHE GROUPのWHERE句の評価対象
LOAD
Oracle
Oracle
UNLOAD
TimesTen

-

REFRESH
TimesTenおよびOracle
Oracle
FLUSH
TimesTen
-

次の表に、各キャッシュ・グループの文のWHERE句が、TimesTenによってのみ解析されるか、TimesTenおよびOracleの両方によって解析されるかを示します。

キャッシュ・グループ文
TimesTenによる解析
Oracleによる解析
LOAD
行われる
行われる
UNLOAD
行われる

行われない

REFRESH
行われる
行われる
FLUSH
行われる
行われない
CREATE
行われる
行われる

冗長ロギングを指定すると、Oracleに対して実行されるすべてのSQL文がサーバー・ログに記録されます。キャッシュ・グループ処理の仕組みおよびパフォーマンスの詳細を理解するには、このログを確認します。『Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド』のUNIXでのTimesTenデーモン・ログ・メッセージおよびサーバー・ログ・メッセージの表示に関する項を参照してください。

Cache Connect to Oracleで使用されるWHERE句には、次の制限が適用されます。

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

この項では、カスタマイズされたキャッシュ・グループの作成に使用するCREATE USERMANAGED CACHE GROUP文の例を示します。

示す例は次のとおりです。

例2.11

この例では、単一表CUSTOMERに対して、UpdateAnywhereCustomersというUSERMANAGEDキャッシュ・グループを作成します。TimesTenまたはOracleいずれかのCUSTOMER表への更新は、他方に双方向に伝播されます。

図2.19 単純なUSERMANAGEDキャッシュ・グループ

この例では、AUTOREFRESH属性が設定されているため、キャッシュ・グループは30秒ごとにOracleから増分更新されます。ユーザーはUSER1です。表記述内のPROPAGATE属性は、TimesTenキャッシュ内のCUSTOMER表への更新がOracleへ伝播されることを示しています。

CREATE USERMANAGED CACHE GROUP UpdateAnywhereCustomers
AUTOREFRESH
       MODE INCREMENTAL
       INTERVAL 30 SECONDS
FROM
USER1.CUSTOMER (CUSTID INT NOT NULL,
       NAME CHAR(100) NOT NULL,
       ADDR CHAR(100),
       ZIP CHAR(10),
       PRIMARY KEY (CUSTID)),
       PROPAGATE);
例2.12

この例では、WesternCustomersというUSERMANAGEDキャッシュ・グループを作成します。このキャッシュ・グループには、4つの関連表CUSTOMER、ORDERTAB、ORDERDETAILSおよびCUSTINTERESTが含まれています。

図2.20 複雑なUSERMANAGEDキャッシュ・グループ

次に示すCREATE CACHE GROUP文の例のDURATION属性は、キャッシュ・インスタンスが、最後にロードされてから10分後にキャッシュからエージ・アウトされることを示しています。キャッシュする必要がある列およびそれらのデータ型が指定されています。

WesternCustomersキャッシュ・グループ内の各表には主キーがあります。キャッシュ・グループ内の表は、外部キー関係を介して互いにリンクされています。CUSTOMER表は、ルート表であるため、キャッシュ・グループ内の別の表を参照しません。ルート表には、ルート表にキャッシュされる行を制限するWHERE句が含まれています。

PROPAGATE属性は、キャッシュ内の表に対するすべての変更が、対応するOracle表にコミット時に自動的に伝播されるように指定します。

CREATE USERMANAGED CACHE GROUP WesternCustomers
    DURATION 10
    FROM
    USER1.CUSTOMER (
       CUSTID INT NOT NULL,
       NAME CHAR(100) NOT NULL,
       ADDR CHAR(100),
       ZIP CHAR(10),
       REGION CHAR(10),
       PRIMARY KEY (CUSTID)),
       PROPAGATE)
       WHERE (CUSTOMER.REGION = 'Western'),
    USER1.ORDERTAB(ORDERID INT NOT NULL,
       CUSTID INT NOT NULL,
       PRIMARY KEY (ORDERID),
       FOREIGN KEY (CUSTID) REFERENCES CUSTOMER(CUSTID),
       PROPAGATE),
    USER1.ORDERDETAILS(ORDERID INT NOT NULL,
       ITEMID INT NOT NULL,
       QUANTITY INT NOT NULL,
       PRIMARY KEY (ORDERID, ITEMID),
       FOREIGN KEY (ORDERID) REFERENCES ORDERTAB(ORDERID),
       PROPAGATE),
    USER1.CUSTINTEREST( CUSTID INT NOT NULL,
       INTEREST CHAR(10) NOT NULL,
       PRIMARY KEY (CUSTID, INTEREST),
       FOREIGN KEY (CUSTID) REFERENCES CUSTOMER(CUSTID),
       PROPAGATE);