AWTキャッシュ・グループの使用の制限
AWTキャッシュ・グループを使用する場合は、一定の制限が適用されます。
AWTキャッシュ・グループを使用する場合は、次の制限が適用されます。
-
キャッシュ表定義では、
ON DELETE CASCADE
およびUNIQUE HASH ON
キャッシュ表属性のみを使用できます。「ON DELETE CASCADEキャッシュ表属性」を参照してください。
「キャッシュ表の主キー列に対するハッシュ索引の作成」を参照してください。
-
キャッシュ・グループに対して
FLUSH CACHE GROUP
文を発行できません。「ユーザー管理キャッシュ・グループのフラッシュ」を参照してください。
-
キャッシュ表定義に
WHERE
句を含めることはできません。「WHERE句の使用」を参照してください。
-
キャッシュ表に対して
TRUNCATE TABLE
文を発行できません。 -
AWTキャッシュ・グループでは、Oracle Databaseビューまたはマテリアライズド・ビューをキャッシュできません。
-
AWTキャッシュ・グループを作成または削除する前にレプリケーション・エージェントを停止する必要があります。
「レプリケーション・エージェントの起動および停止」を参照してください。
-
レプリケーション・エージェントが実行されていない場合、TimesTenキャッシュ表でコミットされた変更は、キャッシュされたOracle Database表に伝播されません。
-
AWTキャッシュ・グループを作成するには、TimesTenデータベースの絶対パス名の長さを248文字以内にする必要があります。
-
AWTキャッシュ・グループにキャッシュされているOracle Database表では、DML文を実行することは避けてください。これにより、エラー状態になる場合があります。キャッシュされたOracle Database表で挿入、更新または削除処理のいずれかを行うと、処理対象の行に対してTimesTenで実行される処理に不適切な影響を与える場合があります。TimesTenでは、Oracle Databaseで発生する更新競合は検出または解決されません。キャッシュされたOracle Database表で直接コミットされた変更は、キャッシュ表の更新がOracle Databaseに伝播されたときに、TimesTenキャッシュ表でコミットされた更新によって上書きされる場合があります。さらに、キャッシュされたOracle Database表で行を削除すると、TimesTenがすでに存在しない行に対して更新を試みたときに、更新が適用されなくなる場合があります。
Oracle DatabaseですべてのデータがDML文から制限を受けることがないようにするために、Oracle Databaseでデータを分割して、AWTキャッシュ・グループに含まれているデータとAWTキャッシュ・グループから除外されるデータとを分けることができます。
-
TimesTenでは、単一のSQL文によって一意索引の制約違反が発生するかどうかを判別するときに、遅延チェックを実行します。
たとえば、キャッシュされたOracle Database表の
NUMBER
列に一意索引があり、TimesTenキャッシュ表の同じNUMBER
列にも一意索引があるとします。キャッシュされたOracle Database表には5つの行があり、キャッシュ表にも同じ5つの行があります。NUMBER
列の値の範囲は1から5です。キャッシュ表に対して
UPDATE
文を発行し、すべての行のNUMBER
列の値を1増分します。この処理は、キャッシュ表では成功しますが、キャッシュされたOracle Database表に伝播されると失敗します。これは、TimesTenでは、一意索引の制約のチェックが、すべての行が更新された後、文の処理の最後に行われるために発生します。ただし、Oracle Databaseでは、1行更新されるたびに制約のチェックが実行されます。
したがって、
NUMBER
列の値が1であるキャッシュ表の行が2に変更され、この更新がOracle Databaseに伝播されると、キャッシュされたOracle Database表のNUMBER
列の値が2となった行で一意制約違反が発生します。