PSQL Programmer's Guide (v11)

Pervasive PSQL データベースのアトミシティ(リレーショナル インターフェイス)

アトミシティの原則は、所定のステートメントの実行が完了しなかった場合、データベースに部分的またはあいまいな影響を残してはいけない、ということです。たとえば、あるステートメントが 5 レコードの内 3 レコードを挿入したあとに失敗して、その 3 レコードを元に戻さなかった場合、操作を再試行するときにデータベースの一貫性は失われています。ステートメントがアトミックで実行の完了に失敗した場合、すべての変更はロールバックされ、データベースの一貫性は保たれます。この例では、5 レコードの挿入で 1 つでも失敗した場合は、1 つのレコードも挿入されてはいけません。

アトミシティの規則は、複数のレコードまたはテーブルを変更するステートメントで特に重要です。また、アトミシティの規則は、失敗した操作の再試行をより簡単にします。前の試行による部分的な影響も残っていないことが保証されるからです。

Pervasive PSQL は 2 つの方法でアトミシティを実施します。

  1. UPDATE、INSERT、DELETE ステートメントはアトミックと定義されています。Pervasive PSQL は複数のレコードまたは複数のテーブルの変更操作が失敗した場合、変更の影響がデータベースにまったく残らないことを保証します。
    プロシージャの内部または外部のいずれで実行されたかにかかわらず、Update、Insert、Delete 操作でアトミシティは保証されます。
  2. ストアド プロシージャを作成する際、ATOMIC として指定することができます。このようなプロシージャは、その実行全体にアトミシティの規則を適用します。したがって、ATOMIC プロシージャ内の UPDATE、INSERT、DELETE ステートメントがアトミックに実行されるだけでなく、そのプロシージャ内のほかのどのステートメントが失敗した場合でも、そのプロシージャの実行による影響はロールバックされます。

プロシージャ内のトランザクション制御

トリガーは常に外部のデータ変更ステートメント(INSERT、DELETE、または UPDATE)によって開始され、すべてのデータ変更ステートメントはアトミックであるため、次のステートメントは、トリガー内またはトリガーによって起動されるプロシージャ内では使用できません。

言い換えると、トリガーは ATOMIC 複合ステートメントと同じ規則に従います。

ユーザーが起動した COMMIT WORK、ROLLBACK WORK、RELEASE SAVEPOINT、ROLLBACK TO SAVEPOINT ステートメントは、(アトミシティの目的で)システムが開始したトランザクションを終了させることはありません。


並行制御 (リレーショナル インターフェイス)

インターナショナル ソート規則を使用したコレーションのサンプル