ユーザー管理キャッシュ・グループおよびREADONLYキャッシュ・グループに対するCREATE CACHE GROUP文の表定義にWHERE句を含めて、キャッシュにOracleデータをコピーする場合の検索条件を指定できます。
LOAD CACHE GROUP文、UNLOAD CACHE GROUP文、MERGE文およびFLUSH CACHE GROUP文にもWHERE句を指定できます。これらの文の使用方法の詳細は、「キャッシュ・グループの使用」を参照してください。LOAD CACHE GROUP文やREFRESH CACHE GROUP文などのいくつかの文では、キャッシュ・グループのWHERE句が文のWHERE句より前に評価される連結WHERE句が発生する場合があります。すべてのWHERE句はTimesTenによって解析されます。TimesTenでサポートされていないOracle SQL構文を使用しないでください。
この例では、Oracle上のcustomer表から、西地区のZIPコードを持つ顧客に関連するデータのみをキャッシュするWHERE句を指定し、western_customersキャッシュ・グループを作成します。
CREATE USERMANAGED CACHE GROUP western_customers
FROM
user1.customer (custid INTEGER NOT NULL,
name VARCHAR(2100) NOT NULL,
addr VARCHAR2(100),
zip VARCHAR2(10),
region VARCHAR2(10),
PRIMARY KEY(custid),
PROPAGATE)
WHERE (user1.customer.region = 'Western');
次に、LOAD CACHE GROUP文にさらにWHERE句を指定し、IDが100以下の西地区の顧客のみをキャッシュします。
LOAD CACHE GROUP western_customers WHERE (custid <= 100)
COMMIT EVERY 256 ROWS;
CREATE CACHE GROUP文およびLOAD CACHE GROUP文のWHERE句は、データがキャッシュ・グループにロードされる前にOracleで評価されます。
表2.5に、LOAD CACHE GROUP文、UNLOAD CACHE GROUP文、REFRESH CACHE GROUP文およびFLUSH CACHE GROUP文のWHERE句がTimesTenで評価されるか、Oracleで評価されるか、あるいはその両方で評価されるかを示します。また、CREATE CACHE GROUP文にWHERE句が含まれている場合、この追加のWHERE句がOracleで評価されるタイミングも示します。
SQL文
|
文のWHERE句の評価対象
|
CREATE CACHE GROUPのWHERE句の評価対象
|
---|---|---|
LOAD | Oracle | Oracle |
UNLOAD | TimesTen |
- |
REFRESH | TimesTenおよびOracle | Oracle |
FLUSH | TimesTen | - |
表2.6に、各SQL文のWHERE句が、TimesTenによってのみ解析されるか、TimesTenおよびOracleの両方によって解析されるかを示します。
SQL文
|
TimesTenによる解析
|
Oracleによる解析
|
---|---|---|
LOAD | 行われる | 行われる |
UNLOAD | 行われる |
行われない |
REFRESH | 行われる | 行われる |
FLUSH | 行われる | 行われない |
CREATE | 行われる | 行われる |
冗長ロギングを指定すると、Oracleに対して実行されるすべてのSQL文がOracleサーバー・ログに記録されます。キャッシュ・グループ処理の仕組みおよびパフォーマンスの詳細を理解するには、このログを確認します。『Oracle TimesTen In-Memory Databaseトラブルシューティング・プロシージャ・ガイド』のttDaemonLogユーティリティの使用に関する説明を参照してください。
Cache Connect to Oracleで使用されるWHERE句には、次の制限が適用されます。
キャッシュ・グループとOracle Database間の処理は、セッションで使用されるTimesTenグローバリゼーション・サポート接続属性の値を継承します。こうした処理には、パススルー、伝播、ロード、リフレッシュ、フラッシュおよび同期ライトスルーが含まれます。
特定のユーザー・セッションに直接関連付けられていないキャッシュ・グループ処理は、グローバリゼーション・サポート接続属性のデフォルト設定を使用します。これらの処理には、自動リフレッシュ、エージングおよび非同期ライトスルーが含まれます。たとえば、これらの処理はNLS_SORTの値としてBINARYを使用します。
キャッシュ・グループ処理がグローバリゼーション・サポート接続属性の異なる値を使用した場合、非一貫性が生じる可能性があります。たとえば、次の文について考えてみます。
CREATE CACHE GROUP cachegroup1 FROM table1(
column1 NUMBER NOT NULL PRIMARY KEY,
column2 NCHAR(30))
WHERE column2 < 'string';
WHERE句の文字列は、文字のバイナリ値を使用して比較されます。これによって、ロケールによっては、キャッシュ・グループ表への移入で意図しない結果が生じる場合があります。
WHERE句の文字列がその言語値を使用して比較されるようにするには、次のようなWHERE句を指定したCREATE CACHE GROUP文を使用します。
CREATE CACHE GROUP cachegroup1 FROM table1(
column1 NUMBER NOT NULL PRIMARY KEY,
column2 NCHAR(30))
WHERE
NLSSORT(column2,'NLS_SORT=TCHINESE_RADICAL')
< NLSSORT('string','NLS_SORT=TCHINESE_RADICAL');