AWTキャッシュ・グループの使用の制限

AWTキャッシュ・グループを使用する場合は、一定の制限が適用されます。

AWTキャッシュ・グループを使用する場合は、次の制限が適用されます。

  • 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となった行で一意制約違反が発生します。