すべてのプロダクト
Search
ドキュメントセンター

PolarDB:トランザクション制御

最終更新日:Dec 17, 2024

いくつかの状況下では、データベースに対するすべての更新が正常に行われること、または何らかのエラーが発生した場合には何も行われないことが望ましい。 1つのユニットとして正常に発生するか、または発生しないデータベース更新のセットは、トランザクションであると言われる。

銀行業務の一般的な例は、2つの口座間の送金です。 取引の2つの部分は、1つの口座からの資金の引き出しと別の口座への資金の入金です。 このトランザクションの両方の部分が発生する必要があります。 さもなければ、銀行の本はバランスが崩れます。 入金と出金は1回の取引です。

次の条件を満たす場合、Oracleデータベースと互換性のあるトランザクション制御のスタイルを使用するSPLアプリケーションを作成できます。

  • polar_comp_stmt_level_txパラメーターはTRUEに設定する必要があります。 これにより、例外が発生した場合にBEGIN/ENDブロック内のすべてのデータベース更新を無条件にロールバックするアクションが防止されます。

  • アプリケーションは自動コミットモードで実行してはいけません。 自動コミットモードがオンの場合、成功した各データベース更新は直ちにコミットされ、元に戻すことはできません。 自動コミットモードをオンまたはオフにする方法は、アプリケーションに依存する。

トランザクションは、SPLプログラムで最初のSQL文に遭遇したときに開始されます。 後続のすべてのSQL文は、そのトランザクションの一部として含まれます。 次のいずれかの条件が発生すると、トランザクションは終了します。

  • 未処理の例外が発生します。 この場合、トランザクション中に行われたすべてのデータベース更新の影響はロールバックされ、トランザクションは中止されます。

  • COMMITステートメントに遭遇します。 この場合、トランザクション中に行われたすべてのデータベース更新の効果は永続的になります。

  • ROLLBACKステートメントが発生します。 この場合、トランザクション中に行われたすべてのデータベース更新の影響はロールバックされ、トランザクションは中止されます。 新しいSQL文に遭遇すると、新しいトランザクションが開始されます。

  • 制御は、JavaやPostgreSQLなどの呼び出し元アプリケーションに戻ります。 この場合、アプリケーションのアクションは、トランザクションがPRAGMA AUTONOMOUS_TRANSACTIONが宣言されているブロック内にない限り、トランザクションがコミットされるかロールバックされるかを決定します。

説明

Oracleとは異なり、CREATE TABLEなどのDDLステートメントは、独自のトランザクション内で暗黙的に発生しません。 したがって、DDLステートメントは、Oracleのようにデータベースの即時コミットを自動的に引き起こすことはなく、DDLステートメントはDMLステートメントと同様にロールバックされる可能性があります。

トランザクションは、1つまたは複数のBEGIN/ENDブロックにまたがってもよく、または単一のBEGIN/ENDブロックが1つまたは複数のトランザクションを含んでもよい。

次のトピックでは、COMMITステートメントとROLLBACKステートメントについて詳しく説明します。