システム管理キャッシュ・グループ(READONLY、AWTおよびSWT)で必要な処理が行われない場合は、CREATE USERMANAGED CACHE GROUP文を使用して、カスタマイズされたキャッシュ動作を実装するユーザー管理キャッシュ・グループを作成できます。
USERMANAGEDキャッシュ・グループの表定義は、システム管理キャッシュ・グループの表定義と同様ですが、次の機能が追加されています。
USERMANAGEDキャッシュ・グループ内の各表定義で、PROPAGATE属性またはREADONLY属性を指定して表レベルでライトスルーまたは読取り専用を定義することができます。詳細は、「キャッシュ表属性」を参照してください。
システム管理キャッシュ・グループREADONLYおよびWRITETHROUGHは、Oracleとそのキャッシュ・グループ間の変更を表レベルの粒度で伝播します。USERMANAGEDキャッシュ・グループは、行レベルのデータ(キャッシュ・インスタンスと呼ばれる)をOracleとTimesTenキャッシュ・グループ間で伝播します。
キャッシュ・インスタンスは、キャッシュ・グループのルート表の主キーによって識別される特定のデータ行です。キャッシュ・グループに複数の表がある場合、キャッシュ・インスタンスは、外部キー関係を介してルート表の行と関連付けられている行のセットで構成されます(図2.18を参照)。
キャッシュ・インスタンスは、Oracleからキャッシュにロードされ、キャッシュからOracleに伝播され、不要になるとエージ・アウトされるデータの単位です。キャッシュ・グループの表定義によっては、Oracle行データのサブセットの場合もあります。
図2.18は、図2.12で示したTargetCustomersキャッシュ・グループを示しています。ルート表の主キー122によって識別されるキャッシュ・インスタンスがキャッシュ・グループ内の各表で強調表示されています。このキャッシュ・インスタンス・キーは、ルート表の行およびルート表の行を参照する子表のすべての関連行を識別します。
キャッシュ・インスタンスによる行レベルの制御によって、USERMANAGEDキャッシュ・グループでは2つの機能を使用できます。これらの機能は、システム管理キャッシュ・グループでは使用できません。
キャッシュ・グループにDURATION属性を設定すると、一定時間の後、キャッシュ・グループからキャッシュ・インスタンスを削除できます。詳細は、「DURATION」を参照してください。
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固有の構文が禁止されています。
この例では、OracleのCustomer表から、西地区のZIPコードを持つ顧客に関連するデータのみをキャッシュするWHERE句を指定し、WesternCustomersキャッシュ・グループを作成します。
次に、LOAD CACHE GROUP文にさらにWHERE句を指定し、IDが100以下の西地区の顧客のみをキャッシュします。
CREATE USERMANAGED CACHE GROUP文およびLOAD CACHE GROUP文のWHERE句は、データがキャッシュ・グループにロードされる前にOracleで評価されます。
WHERE句を作成する場合に使用する構文は、TimesTenで解析可能である必要があります。たとえば、次のようなOracle固有のスカラー関数を含めることはできません。
次の表に、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句には、次の制限が適用されます。
この項では、カスタマイズされたキャッシュ・グループの作成に使用するCREATE USERMANAGED CACHE GROUP文の例を示します。
示す例は次のとおりです。
この例では、単一表CUSTOMERに対して、UpdateAnywhereCustomersというUSERMANAGEDキャッシュ・グループを作成します。TimesTenまたはOracleいずれかのCUSTOMER表への更新は、他方に双方向に伝播されます。
この例では、AUTOREFRESH属性が設定されているため、キャッシュ・グループは30秒ごとにOracleから増分更新されます。ユーザーはUSER1です。表記述内のPROPAGATE属性は、TimesTenキャッシュ内のCUSTOMER表への更新がOracleへ伝播されることを示しています。
この例では、WesternCustomersというUSERMANAGEDキャッシュ・グループを作成します。このキャッシュ・グループには、4つの関連表CUSTOMER、ORDERTAB、ORDERDETAILSおよびCUSTINTERESTが含まれています。
次に示すCREATE CACHE GROUP文の例のDURATION属性は、キャッシュ・インスタンスが、最後にロードされてから10分後にキャッシュからエージ・アウトされることを示しています。キャッシュする必要がある列およびそれらのデータ型が指定されています。
WesternCustomersキャッシュ・グループ内の各表には主キーがあります。キャッシュ・グループ内の表は、外部キー関係を介して互いにリンクされています。CUSTOMER表は、ルート表であるため、キャッシュ・グループ内の別の表を参照しません。ルート表には、ルート表にキャッシュされる行を制限するWHERE句が含まれています。
PROPAGATE属性は、キャッシュ内の表に対するすべての変更が、対応するOracle表にコミット時に自動的に伝播されるように指定します。