アプリケーションのプロセス、並行性、およびリカバリー
すべての SQL プログラムは、アプリケーション・プロセス またはエージェントの一部として実行されます。 アプリケーション・プロセスには 1 つ以上のプログラムの実行が関係しており、これがデータベース・マネージャーがリソースを割り当てたりロックしたりする場合の単位となります。 異なるいくつかのプログラムの実行、または同じプログラムの複数の異なる実行には、 異なる複数のアプリケーション・プロセスが関係していることがあります。
同時に複数のアプリケーション・プロセスが同じデータへのアクセスを要求できます。 そのような状況でデータ保全性を維持するために使用されるメカニズムとしてロック があります。これは、例えば 2 つのアプリケーション・プロセスが同時に同じデータ行を更新することを防ぐなどの効果があります。
データベース・マネージャーは、あるアプリケーション・プロセスによって行われた変更でまだコミットされていないものが、誤って他のプロセスによって認識されることがないように、ロックを獲得します。 アプリケーション・プロセスが終了すると、データベース・マネージャーは、そのプロセスのために獲得および保持していたロックをすべて解除します。 ただし、それより早い時期にロックを解除するように、アプリケーション・プロセスから明示的に要求することもできます。 これはコミット 操作を使用して行います。 これにより作業単位の間に獲得したロックが解除され、さらに作業単位の間に加えられた変更がデータベースにコミットされます。
作業単位 (UOW) とは、アプリケーション・プロセス内のリカバリー可能な一連の操作のことをいいます。 作業単位は、アプリケーション・プロセスが開始された時、またはアプリケーション・プロセスの終了以外の理由で直前の UOW が終了した時に開始します。 作業単位は、コミット操作、ロールバック操作、またはアプリケーション・プロセスの終了によって終了します。 コミットまたはロールバック操作は、終了する UOW の中で行われたデータベースへの変更にしか影響しません。
データベース・マネージャーは、アプリケーション・プロセスにより行われた変更でまだコミットされていないものをバックアウトするための手段を備えています。 これは、アプリケーション・プロセス側に障害が発生したとき、 またはデッドロックやロック・タイムアウト状態になった場合に必要になる場合があります。 アプリケーション・プロセスで行ったデータベースへの変更を取り消すように、同じプロセスで明示的に要求することができます。 これはロールバック 操作を使って行います。
このような変更がコミットされないまま残っている間は、他のアプリケーション・プロセスはそれらの変更を認識することはできませんし、変更をロールバックすることも可能です。 ただし、優先される分離レベルが非コミット読み取り (UR) である場合には、この限りではありません。 データベースの変更内容がコミットされると、他のアプリケーション・プロセスからその変更内容にアクセスできるようになり、ロールバックできなくなります。
Db2® コール・レベル・インターフェース (CLI) と組み込み SQL の両方で、 並行トランザクションと呼ばれる接続モードが許可されます。このモードでは、複数の接続がサポートされます。各接続は独立したトランザクションです。 1 つのアプリケーションに、同じデータベースへの複数の同時接続を持たせることができます。
データベース・マネージャーがアプリケーション・プロセスのために獲得したロックは、UOW が終了するまで保持されます。ただし、分離レベルがカーソル固定 (CS、カーソルが行から行に移動されるとロックは解除される) か非コミット読み取り (UR) の場合はこの限りではありません。
アプリケーション・プロセスがそれ自体のロックのために操作できなくなるということは決してありません。 ただし、アプリケーションが並行してトランザクションを使用する場合、一方のトランザクションによるロックのために他方のトランザクションの操作が影響を受ける可能性はあります。
UOW の開始と終了によって、アプリケーション・プロセス内の整合点 が定義されます。 例えば、銀行業務のトランザクションで、ある口座から別の口座へ資金を振り込むことがあります。 このようなトランザクションでは、その資金を第 1 の口座から減算してから、第 2 の口座に加算する、ということが必要になります。 減算のステップの直後の段階では、データに不整合があります。 資金を第 2 の口座に加算して初めて整合性が取り戻されます。 両方のステップが完了したときに、コミット操作を実行して UOW を終了させれば、 他のアプリケーション・プロセスが変更内容を利用できるようになります。 1 つの UOW が終了する前に障害が発生した場合、データベース・マネージャーはコミットされていない変更内容をロールバックし、データ整合性を回復します。

