接続状態

接続状態には、保留状態および解放ペンディング状態現在の状態と休止状態の 2 つのタイプがあります

アプリケーション・プロセスが CONNECT ステートメントを実行し、サーバー名がアプリケーション・リクエスターには知られているもののアプリケーション・プロセスの既存の接続の中にない場合: (i) 現行接続は休止接続状態 になり、サーバー名が接続のセットに加えられ、その新しい接続は現行接続状態 および保持接続状態 になります。

サーバー名がアプリケーション・プロセスの既存の接続の中にすでにあり、アプリケーションが SQLRULES(STD) オプションを指定してプリコンパイルされている場合、エラー (SQLSTATE 08002) が起きます。

保持状態および解放ペンディング状態 接続を、保持状態か解放ペンディング状態のどちらにするかを制御するのは、RELEASE ステートメントです。 解放ペンディング 状態とは、次の正常なコミット操作で接続の切断が起こることを意味しています。 (ロールバックをしても接続には何も影響しません。) 保持 状態とは、次のコミット操作で接続が切断されない ことを意味しています。

すべての接続は最初は保持状態で、RELEASE ステートメントを使って解放ペンディング状態にすることができます。 いったん解放ペンディング状態になると、接続を保持状態に戻すことはできません。 ROLLBACK ステートメントが発行された場合、またはコミット操作が正常に行われずにロールバック操作が発生した場合でも、接続は作業単位の境界を越えて解放ペンディング状態のままになります。

接続が解放するものとして明示的にマークされていなくても、コミット操作が DISCONNECT プリコンパイラー・オプションの条件を満たしていれば、コミット操作によって切断することができます。

現行状態および休止状態 接続は、保持状態または解放ペンディングのどちらであるかに関係なく、現行状態または休止状態にもなることができます。 現行 状態にある接続は、この状態にある間に SQL ステートメントの実行に使用される接続のことです。 休止 状態にある接続とは、現行状態ではない接続のことです。

休止状態の接続で実行できる SQL ステートメントは、COMMIT、ROLLBACK、 DISCONNECT、RELEASE のみです。 SET CONNECTION および CONNECT ステートメントは指定したサーバーの接続状態を 現行状態に変え、既存の接続は休止状態になるか休止状態のままになります。 どの時点でも、現行状態にある接続は 1 つだけです。 同じ作業単位の中で休止接続が現行状態に変わると、 すべてのロック、カーソル、準備済みステートメントの状態は 最後にその接続が現行であったときと同じ状態になります。

接続の終了時

接続が終了すると、アプリケーション・プロセスが接続によって獲得していたすべてのリソース、 および接続を確立し維持するために使用されたすべてのリソースが割り振り解除されます。 例えば、アプリケーション・プロセスが RELEASE ステートメントを実行すると、 その次のコミット操作で接続が終了するときにオープンしているカーソルがすべてクローズされます。

接続は、通信障害によっても終了することがあります。 この接続が現行状態にあると、アプリケーション・プロセスは 未接続状態になります。

アプリケーション・プロセスの接続はすべて、そのプロセスが終了するときに終了します。