区画済み環境では、DB2 は SQL ステートメントをサブセクションに細分化し、その各部分が関連データを持つ区画で処理されます。結果として、アプリケーションにアクセスできない区画で、エラーが発生することがあります。これは、単一区画環境では生じません。
次の事柄を考慮する必要があります。
重大エラーが原因でアプリケーションが異常終了した場合、未確定トランザクションがデータベースに残っている可能性があります。 (1 つのフェーズが正常に完了すると、未確定トランザクションはグローバル・トランザクションに関係付けられますが、後続のフェーズが完了する前にシステムに障害が起き、データベースは不整合状態のままになります。) それらの処理に関する情報は、 管理の手引き を参照してください。
重大エラーが DB2 ユニバーサル・データベースで発生すると、以下のいずれかが発生します。
活動中の作業単位がロールバックされません。
この状況では、ノード、および遮断が生じたときにノードで活動中だったデータベースを回復する必要があります。
そのデータベースのすべての作業単位がロールバックされます。
この状況では、エラーの発生したノードにあるデータベースが、不整合とマークされます。それにアクセスしようとすると、SQLCODE -1034 (SQLSTATE 58031) または SQLCODE -1015 (SQLSTATE 55025) のいずれかが戻されます。ユーザーまたは別のノードの他のアプリケーションが、このノードのデータベースにアクセスできるようにするには、そのデータベースに対して RESTART DATABASE コマンドを実行する必要があります。このコマンドについては、コマンド解説書 を参照してください。
重大エラー SQLCODE -1224 (SQLSTATE 55032) は、さまざまな理由で発生します。このメッセージを受け取ったならば、SQLCA を調べてみます。そこに、障害が起きたノードが示されています。その後、ノード間で共用している db2diag.log ファイルで、詳細を調べます。追加情報については、エラーを戻した区画を識別するを参照してください。
1 つの SQL ステートメントは、異なるノード上の多数のエージェントが実行することができ、各エージェントが異なるエラーまたは警告のために異なる SQLCA を戻すことがあります。コーディネーター・エージェントも独自の SQLCA を持っています。さらに、SQLCA には、グローバル数を示すフィールドもあります (行カウントを示す sqlerrd フィールドなど)。アプリケーションに整合性のある視点を提供するため、すべての SQLCA 値を 1 つの構造にマージします。この構造は、SQL 解説書 に解説されています。
アプリケーションは、最初のエラーまたは警告の原因となった問題を修正した後、続いて次のエラーまたは警告を受け取ることがあります。エラーは SQLCA に報告されて、検出した最初のエラーが他のエラーに優先するかを確認します。これは、以前のエラーが引き起こしたエラーが、修正したばかりのエラーを重ね書きしていないか確認するためです。重大エラーおよびデッドロック・エラーは、最高の優先順位を与えられています。なぜなら、それらについてはコーディネーター・エージェントがただちに処置を行う必要があるからです。
区画がエラーまたは警告を戻す場合、その番号が SQLCA の SQLERRD(6) フィールドに示されます。このフィールド内の番号は、db2nodes.cfg ファイルでその区画に指定されたものと同じです。
SQL ステートメントまたは API 呼び出しが成功した場合は、このフィールドの区画番号は無効です。
SQLCA については、SQL 解説書 を参照してください。