トランザクションをコミットする際には2フェーズコミットが実行されます。2フェーズ目の処理中にシステムに何らかの異常が発生すると、プリペア済みのトランザクションはコミットもロールバックもできず、インダウト状態となります。システムが異常終了した場合、Symfoware/RDBは以下のように振る舞います。
アプリケーションサーバが異常終了した場合
トランザクションが保持していたロックは解除されます。しかし、トランザクションの独立性を保障するため、インダウト状態となったトランザクションが更新した資源は一時的にアクセス禁止状態になります。これを資源のインダウト閉塞といいます。
Symfoware/RDBが異常終了した場合
Symfoware/RDBを再起動するとダウンリカバリ処理が行われます。ダウンリカバリ処理中にプリペア済みのトランザクションが存在した場合、Symfoware/RDBは、それをインダウト状態として“アプリケーションサーバが異常終了した場合”と同様に、そのトランザクションが更新した資源をインダウト閉塞します。ダウンリカバリが完了すると、Symfoware/RDBは運用を再開します。
注意
インダウト状態のトランザクションが存在している間は、トランザクション完了に必要なデータをテンポラリログファイルに保存し続けます。そのため、業務再開後に以下のメッセージが出力され、アプリケーションが異常終了する場合があります。
JYP5004E テンポラリログ域の領域が不足しました.
qdg12826u テンポラリログファイルの領域が不足しました
JYP5005E 同時に実行できるトランザクション数の上限値を超えました.
qdg02518u 同時に実行できるトランザクション数の上限値を超えました
インダウト状態のすべてのトランザクションを復旧すれば、解消されます。
資源がXAインダウト閉塞されているかどうかは、rdbinfコマンドにより確認できます。XAインダウト閉塞されている場合は、State欄に“INH”、Cause欄に“XAI”と表示されます。
> rdbinf -i 在庫管理DB.在庫表IXDSI -a RDBII rdbinf DATE:2009/04/23 TIME:16/18/23 Directory : D:¥SFWD¥RDB¥USR¥DIR¥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が異常終了した場合”と同様に振る舞います。