アプリケーション・プロセス、並行性、およびリカバリー

SQL プログラムはすべてがアプリケーション・プロセス の一環として実行されます。 IBM® i オペレーティング・システムでは、アプリケーション・プロセスのことをジョブといいます。 ODBC、JDBC、OLE DB、.NET、および DRDA® の場合は、使用しているジョブが終了していなくて 再使用可能であっても、接続が終了した時点でアプリケーション・プロセスは終了します。

アプリケーション・プロセスは、1 つ以上の活動化グループから成り 立っています。活動化グループには、それぞれに 1 つ以上のプログラ ムの実行が含まれます。プログラムの実行は、非デフォルトの活動化グループ、またはデフォルトの活動化グループのもとで行われます。ILE コンパイラーにより作成されたプログラムを除き、すべてのプログラムはデフォルトの活動化グループのもとで実行されます。例えば、LANGUAGE JAVA 外部関数は、デフォルトの活動化グループのもとで実行されます。

活動化グループの詳細については、「ILE 概念」 Link to PDF を参照してください。

コミットメント制御を使用するアプリケーション・プロセスは、その実行に 1 つ以上のコミットメント定義を使用することができます。コミットメント定義を使用すると、コミットメント制御を活動化グループ・レベルまたはジョブ・レベルの範囲で行うことができます。コミットメント制御を使用する活動化グループは、一時点で、ただ 1 つのコミットメント定義に関連付けられます。

コミットメント定義を明示的に開始するには、コミットメント制御開始 (STRCMTCTL) コマンドを使用します。まだ開始されていないコミットメント定義の場合は、COMMIT(*NONE) 以外の分離レベルのもとで最初に SQL ステートメントが実行される時点で、暗黙に開始されます。1 つのジョブ・コミットメント定義を複数の活動化グループで共用することができます。

図 1 は、アプリケーション・プロセス、そのアプリケーション・プロセス内の活動化グループ、およびコミットメント定義の関係を示しています。活動化グループの A と B は、その活動化グループを有効範囲とするコミットメント制御を伴って実行されます。これらの活動化グループは、それぞれ独自のコミットメント定義を持っています。活動化グループ C の実行はどのようなコミットメント制御も伴いません。この活動化グループには、コミットメント定義がありません。

図 1. ジョブのコミットメント定義のない活動化グループ
ジョブのコミットメント定義のない活動化グループ

図 2 は、アプリケーション・プロセス、そのアプリケーション・プロセス内の活動化グループ、およびコミットメント定義を示しています。活動化グループの中には、ジョブのコミットメント定義によって実行されているものがあります。 活動化グループの A と B は、ジョブのコミットメント定義のもとで実行されています。コミットメント制御は同じコミットメント定義によって行われるので、活動化グループの A または B におけるコミットまたはロールバック操作は、両方の活動化グループが影響を与えます。この例の活動化グループ C は、別のコミットメント定義を持っています。この活動化グループで行われるコミットおよびロールバック操作は、C における操作にのみ影響します。

図 2. ジョブのコミットメント定義のある活動化グループ
ジョブのコミットメント定義のある活動化グループ

コミットメント定義についての詳細は、コミットメント制御のトピックを参照してください。