TimesTenでのJTA機能
TimesTenでJTAを使用する場合の考慮事項を示します。
XAに関するTimesTenデータベース要件
グローバル・トランザクションの一貫性を保証するには、TimesTen XAのトランザクション・ブランチが永続的である必要があります。
xa_prepare()
、xa_rollback()
およびxa_commit()
ファンクションのTimesTenの実装では、DurableCommits
一般接続属性の設定値またはttDurableCommit
組込みプロシージャを使用したかどうかに関係なく、実行された処理をファイル・システムに記録します。障害からのリカバリが必要な場合は、リソース・マネージャおよびTimesTenトランザクション・マネージャの両方に、障害発生時に準備された状態でアクティブだったトランザクション・ブランチに関する一貫性のあるビューが含まれています。
TimesTenでのグローバル・トランザクションのリカバリ
障害発生または予期しない終了の後にデータベースがファイル・システムからロードされてリカバリが行われると、準備されたもののコミットされていないグローバル・トランザクションが保留中(インダウト)の状態のままになります。すべてのインダウト・トランザクションの処理が解決されるまで、処理は実行できません。
接続およびリカバリが完了すると、TimesTenはインダウト・トランザクションを確認します。インダウト・トランザクションがない場合は、操作を続行できます。インダウト・トランザクションがあると、他の接続を作成することはできますが、インダウト・トランザクションが解決されるまでは、これらの接続でのすべての処理が事実上禁止されます。他のすべてのJDBCのコールは次のエラーになります。
Error 11035 - "In-doubt transactions awaiting resolution in recovery must be
resolved first"
インダウト・トランザクションのリストは、xa_recover()
のXA実装によって取得した後、XAでxa_commit()
、xa_rollback()
またはxa_forget()
を適切にコールすることによって処理できます。インダウト・トランザクションがすべて消去されると、操作を続行できます。
トランザクション・マネージャでは、接続後にまずxa_recover()
をコールする必要があるため、この方法はトランザクション・マネージャで厳密に制御された状態で動作するシステムに適しています。
トランザクション・マネージャを使用できない場合またはインダウト・トランザクションを解決できない場合は、ttXactAdmin
ユーティリティの-HCommit
または-HAbort
オプションを使用して、個々のトランザクション・ブランチを個別にコミットまたはロールバックできます。ただし、これらのttXactAdmin
オプションにはADMIN
権限が必要であることに注意してください。『Oracle TimesTen In-Memory Databaseリファレンス』のttXactAdminを参照してください。
TimesTenでのXAエラー処理
XA仕様では、XAインタフェース・コールから返される可能性がある一定のエラーが厳密に定義されています。ODBCのSQLError
メカニズムは、他の補足情報(ある場合)とともにXAの定義済エラーを返します。
TimesTenのXA関連エラーは、11000番から始まります。エラー11002から11020は、XA標準で定義済のエラーに対応しています。
『Oracle TimesTen In-Memory Databaseエラー・メッセージおよびSNMPトラップ』のエラーおよび警告を参照してください。