エラー発生時のデフォルトの対応方法を指定します。「R=復旧」または「A=アボート」のいずれかを指定します。
通常は、オプションを適切に選択することで、エラー処理のための特別なユニットは必要ありません。デフォルトのオプションでは対応が適当でない場合に、エラーイベントのユニットを作成することでデフォルト設定を変更します。
A=アボート …… エラーが発生すると、現在のトランザクションがロールバックされます。
物理トランザクションおよび遅延トランザクションのいずれの場合にも、現在のデータビューを削除し、エラーが発生したタスクをアボートします。
この方式は、「ロックエラー」や「不正ログオン」のような、エンドユーザが回復できるエラーに対しては、適用されません。エラーによってタスクが中断された場合、実行時のタスクツリーはそのトランザクションを開いたタスクより上位で適切に閉じられます。さらに、エラー・イベントのハンドラが適切に実行されます。
R=復旧 …… できる限り現在のデータビューを維持して現行タスクにとどまり、エンドユーザがエラーから回復できるようにします。復旧を使用すると、エンドユーザはエラー発生後でもアプリケーション内で作業を続行することができます。
この方式では、「ロックエラー」や「最大接続数超過」のエラーなどに対しては、 エンドユーザの介入なしに、Magic xpaは自動的に処理を繰り返します。
以下は、エラーのリストと選択された対応動作に基づいて自動的に行われる処理内容について説明したものです。各動作の詳細は、「エンジンの対応」を参照してください。
エラー |
アボート |
復旧 遅延トランザクションを使用したオンライン、またはインタラクティブなリッチクライアント |
復旧 物理トランザクションを使用したオンライン、バッチと非インタラクティブなリッチクライアント |
テーブルがロックできない |
自動リトライ※※ |
自動リトライ 失敗した場合は、ユーザによってリトライ |
自動リトライ 失敗した場合は、ロールバックと再起動 |
レコードロック |
自動リトライ |
自動リトライ 失敗した場合は、ユーザによってリトライ |
自動リトライ 失敗した場合は、ロールバックと再起動 |
最大接続数に到達 |
タスクをアボート |
自動リトライ 失敗した場合は、ユーザによってリトライ |
自動リトライ 失敗した場合は、ロールバックと再起動 |
重複インデックス |
タスクをアボート |
ユーザによってリトライ |
ユーザによってリトライ |
制約違反 |
タスクをアボート |
ユーザによってリトライ |
ユーザによってリトライ |
トリガ失敗 |
タスクをアボート |
ユーザによってリトライ |
ユーザによってリトライ |
レコードが更新されていた |
タスクをアボート |
ロールバックと再起動 |
ロールバックと再起動 |
レコードを別ユーザが変更※ |
タスクをアボート |
ロールバックと再起動 |
ロールバックと再起動 |
テーブルのオープンに失敗 |
タスクをアボート |
タスクをアボート |
タスクをアボート |
注意: |
※他のユーザによってレコードが変更された場合、レコードにパークした時、(データはキャッシュにあるため)変更されたことを確認することができません。しかし、データを修正しようとした時点で、現在の値がディスクから読まれ、「レコードは変更されました-再読み込みします」のメッセージが表示されます。 ※※自動リトライは、動作環境の[コマンド処理のリトライ間隔]の設定に依存します。
[キャッシュ範囲]特性を「位置とデータ」に設定すると、レコードの実際のデータもキャッシュに保存します。このレコードから再度読み込んだ場合、キャッシュに保存されている古い値を取得することになります。別のタスクによってこのデータが変更されても、現在のタスクからは参照できないため注意してください。別のタスクで修正されたレコードを更新しようとすると、エラーメッセージが表示されます。 |