アプリケーション開発の手引き

エラー処理考慮事項

区画済み環境では、DB2 は SQL ステートメントをサブセクションに細分化し、その各部分が関連データを持つ区画で処理されます。結果として、アプリケーションにアクセスできない区画で、エラーが発生することがあります。これは、単一区画環境では生じません。

次の事柄を考慮する必要があります。

重大エラーが原因でアプリケーションが異常終了した場合、未確定トランザクションがデータベースに残っている可能性があります。 (1 つのフェーズが正常に完了すると、未確定トランザクションはグローバル・トランザクションに関係付けられますが、後続のフェーズが完了する前にシステムに障害が起き、データベースは不整合状態のままになります。) それらの処理に関する情報は、 管理の手引き を参照してください。

重大エラー

重大エラーが DB2 ユニバーサル・データベースで発生すると、以下のいずれかが発生します。

重大エラー SQLCODE -1224 (SQLSTATE 55032) は、さまざまな理由で発生します。このメッセージを受け取ったならば、SQLCA を調べてみます。そこに、障害が起きたノードが示されています。その後、ノード間で共用している db2diag.log ファイルで、詳細を調べます。追加情報については、エラーを戻した区画を識別するを参照してください。

マージされた複数の SQLCA 構造

1 つの SQL ステートメントは、異なるノード上の多数のエージェントが実行することができ、各エージェントが異なるエラーまたは警告のために異なる SQLCA を戻すことがあります。コーディネーター・エージェントも独自の SQLCA を持っています。さらに、SQLCA には、グローバル数を示すフィールドもあります (行カウントを示す sqlerrd フィールドなど)。アプリケーションに整合性のある視点を提供するため、すべての SQLCA 値を 1 つの構造にマージします。この構造は、SQL 解説書 に解説されています。

エラー報告は次のようになされます。

アプリケーションは、最初のエラーまたは警告の原因となった問題を修正した後、続いて次のエラーまたは警告を受け取ることがあります。エラーは SQLCA に報告されて、検出した最初のエラーが他のエラーに優先するかを確認します。これは、以前のエラーが引き起こしたエラーが、修正したばかりのエラーを重ね書きしていないか確認するためです。重大エラーおよびデッドロック・エラーは、最高の優先順位を与えられています。なぜなら、それらについてはコーディネーター・エージェントがただちに処置を行う必要があるからです。

エラーを戻した区画を識別する

区画がエラーまたは警告を戻す場合、その番号が SQLCA の SQLERRD(6) フィールドに示されます。このフィールド内の番号は、db2nodes.cfg ファイルでその区画に指定されたものと同じです。

SQL ステートメントまたは API 呼び出しが成功した場合は、このフィールドの区画番号は無効です。

SQLCA については、SQL 解説書 を参照してください。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]