PROPAGATEキャッシュ表属性
PROPAGATE
キャッシュ表属性は、ユーザー管理キャッシュ・グループ内のキャッシュ表に対してのみ指定できます。
PROPAGATE
は、TimesTenトランザクションの一部としてTimesTenキャッシュ表でコミットされた変更が、キャッシュされたOracle Database表に自動的に同期して伝播されるように指定します。PROPAGATE
キャッシュ表属性を指定しない場合、ユーザー管理キャッシュ・グループ内のキャッシュ表のデフォルトの設定は、NOT PROPAGATE
キャッシュ表属性になります(キャッシュ表でコミットされた変更は、キャッシュされたOracle表に伝播されません)。
キャッシュ表でアプリケーションによって実行されるSQL文はすべて、キャッシュ表に即座に適用されます。これはの処理はすべて、トランザクションがコミットされるまで、またはメモリーの上限に達するまでバッファされます。この時点で、すべての処理がOracle Database内の表に伝播されます。
ノート:
TimesTenデータベースまたはそのデーモンが予期せずに失敗した場合、TimesTenデータベースまたはOracle Databaseでのトランザクションの結果は保証されません。
トランザクションでの処理はTimesTenデータベースとOracle Databaseの両方の表に適用されるため、コミットのプロセスは次のようになります。
-
処理がOracle Databaseに伝播されると、Oracle Databaseではまずコミットが試行されます。
-
Oracle Databaseの表で処理が適用されたときにエラーが発生した場合は、Oracle Databaseの表ですべての処理がロールバックされます。Oracle Databaseでコミットが失敗すると、TimesTenデータベースではコミットが試行されず、アプリケーションはTimesTenトランザクションをロールバックする必要があります。ユーザーが別の文を実行しようとすると、ロールバックが必要であることを示すエラーが表示されます。このため、Oracle DatabaseはTimesTenでコミットされた更新を見落とすことがなくなります。
-
-
Oracle Databaseでコミットが成功すると、TimesTenデータベースでコミットが試行されます。
-
Oracle Databaseでトランザクションが正常にコミットされると、TimesTenでユーザーのトランザクションがコミットされ(トランザクション・ログのコミット・ログ・レコードにより示されます)、アプリケーションに通知されます。TimesTenがローカル・コミットに成功したことを通知する前にアプリケーションが突然終了した場合でも、TimesTenは、トランザクション・ログに保存されている内容を基にして、TimesTenでトランザクションのコミットをファイナライズできます。
-
Oracle Databaseでトランザクションが正常にコミットされた一方、TimesTenではコミットのステータスを返す前に障害が発生した場合、成功したコミットのレコードはトランザクション・ログには書き込まれず、トランザクションはロールバックされます。
-
TimesTenでコミットが失敗すると、失敗の原因を示すエラー・メッセージがTimesTenから返されます。この場合は、手動でキャッシュ表をOracle Database表と再同期化する必要があります。
ノート:
キャッシュ表をOracle Database表と再同期化する方法の詳細は、「同期ライトスルー(SWT)キャッシュ・グループ」を参照してください。
-
ttCachePropagateFlagSet
組込みプロシージャを使用して、TimesTenキャッシュ表でコミットされた変更をOracle Databaseに伝播することを無効化できます。この組込みプロシージャを使用すると、現在のトランザクションでTimesTenのキャッシュ表でコミットされた変更が、キャッシュされたOracle Database表に伝播されないようにするために、自動伝播を有効または無効にできます。後で、ttCachePropagateFlagSet
組込みプロシージャでこのフラグを1に再設定することによって、DML文の伝播を再有効化できます。このフラグの設定を1に戻した後は、Oracle Databaseに対してコミットされた変更の伝播が再開されます。伝播フラグは、トランザクションのコミット後またはロールバック後に自動的に1に再設定されます。『Oracle TimesTen In-Memory Databaseリファレンス』の「ttCachePropagateFlagSet」を参照してください。
PROPAGATE
キャッシュ表属性を使用する場合は、次の制限が適用されます。
-
キャッシュ・グループで
AUTOREFRESH
キャッシュ・グループ属性を使用する場合は、すべてのキャッシュ表でPROPAGATE
キャッシュ表属性を指定するか、またはいずれのキャッシュ表にもPROPAGATEキャッシュ表属性を指定しないようにする必要があります。AUTOREFRESH
キャッシュ・グループ属性の使用方法の詳細は、「キャッシュ・グループの自動リフレッシュ」を参照してください。 -
キャッシュ・グループで
AUTOREFRESH
キャッシュ・グループ属性を使用する場合は、いずれのキャッシュ表に対してもNOT PROPAGATE
キャッシュ表属性を明示的に指定できません。 -
PROPAGATE
とREADONLY
キャッシュ表属性の両方を同じキャッシュ表で使用することはできません。READONLY
キャッシュ表属性の使用方法の詳細は、「READONLYキャッシュ表属性」を参照してください。 -
1つ以上のキャッシュ表で
PROPAGATE
キャッシュ表属性もREADONLY
キャッシュ表属性も使用していない場合を除いて、キャッシュ・グループに対してFLUSH CACHE GROUP
文を発行できません。FLUSH CACHE GROUP
文の詳細は、「ユーザー管理キャッシュ・グループのフラッシュ」を参照してください。 -
キャッシュ表に
PROPAGATE
キャッシュ表属性が指定されると、キャッシュ・グループを削除して再度作成する場合を除いて、この属性を変更できません。 -
Oracle Databaseマテリアライズド・ビューをキャッシュする場合は、
PROPAGATE
キャッシュ表属性を使用できません。 -
TimesTenでは、キャッシュされたOracle Database表で直接更新されたデータが、伝播処理によって上書きされないようにするための競合チェックを実行しません。したがって、TimesTenキャッシュ表またはキャッシュされたOracle Database表で更新を直接実行し、両方の表では更新を実行しないようにしてください。