トランザクションをコミットする際には2フェーズコミットが実行されます。2フェーズ目の処理中にシステムに何らかの異常が発生すると、プリペア済みのトランザクションはコミットもロールバックもできず、インダウト状態となります。システムが異常終了した場合、Symfoware/RDBは以下のように振る舞います。
アプリケーションサーバが異常終了した場合
トランザクションが保持していたロックは解除されます。しかし、トランザクションの独立性を保障するため、インダウト状態となったトランザクションが更新した資源は一時的にアクセス禁止状態になります。これを資源のインダウト閉塞といいます。また、そのトランザクションを後でロールバックできるように、BIログがインダウトログファイルに保存されます。トランザクションが使用していたテンポラリログファイル内のトランザクションエントリやBIログ域、AIログ域は解放され、新しいトランザクションで利用されます。これ以降、Symfoware/RDBは運用を継続します。
Symfoware/RDBが異常終了した場合
Symfoware/RDBを再起動するとダウンリカバリ処理が行われます。ダウンリカバリ処理中にプリペア済みのトランザクションが存在した場合、Symfoware/RDBはそれをインダウト状態として“アプリケーションサーバが異常終了した場合”と同様、そのトランザクションが更新した資源をインダウト閉塞し、BIログをインダウトログファイルに保存し、テンポラリログファイル内の情報を削除します。ダウンリカバリが完了すると、Symfoware/RDBは運用を再開します。
資源がXAインダウト閉塞されているかどうかは、rdbinfコマンドにより確認できます。XAインダウト閉塞されている場合は、State欄に“INH”、Cause欄に“XAI”と表示されます。
$ rdbinf -i 在庫管理DB.在庫表IXDSI -a RDBII rdbinf DATE:2009/04/23 TIME:16/18/23 Directory : /home/rdbdir/DIR_FILE1 Database : 在庫管理DB DSI : 在庫票IXDSI Cond State Cause NON INH/PAG XAI TYPE Used Free Size INDEX 10% 90% 53248 BASE 70% 40% 53248 Name DBspace : DBSP_1 Cond State Cause Size NON ---/--- --- 53248 DBspace : DBSP_1 Cond State Cause Size NON ---/--- --- 53248
システムが異常終了した場合
システムが異常終了した場合、Symfoware/RDBは“Symfoware/RDBが異常終了した場合”と同様に振る舞います。