リファレンスガイド> TDV SQLスクリプト> SQLスクリプトの手順と構造> 独立したトランザクション
 
独立したトランザクション
SQLスクリプトの独立したトランザクションは、メイントランザクションに何が起こったかに関係なく、それ自体でロールバックまたはコミットできる一連の作業です。
構文
INDEPENDENT [<option> …] TRANSACTION
備考
オプション(<option> ...)では大文字と小文字は区別されません。
次の表に、独立したトランザクションのオプションフラグを示します。
オプションフラグ
重要性
ROLLBACK_ON_FAILURE |
BEST_EFFORT
このフラグのペアは、COMMIT中に障害が発生した場合(デフォルトのROLLBACK_ON_FAILURE)にトランザクションをロールバックする必要があるかどうか(BEST_EFFORT)を示します。これらのフラグの両方を同時に設定することはできません。
ROLLBACK_ON_FAILUREを使用すると、トランザクションのいずれかの部分のコミットに失敗すると、コミットされていない部分が破棄され、すでにコミットされている部分が補正されます(COMPENSATE/NOCOMPENSATEオプションに従って)。
BEST_EFFORTを使用すると、トランザクションの一部をコミットできない場合でも、可能な限り多くの他の部分がコミットされます。故障した部品はログに記録されます。
COMPENSATE | NOCOMPENSATE
このフラグのペアは、トランザクションがロールバックした場合(COMPENSATE、デフォルト)に補正ブロックを実行する必要があるかどうか(NOCOMPENSATE)を示します。これらのフラグの両方を同時に設定することはできません。
NOCOMPENSATEは、補償のリスクを冒してパフォーマンスを向上させます。ただし、これをCOMPENSATEに設定しても、補正ブロックを定義しない限り、パフォーマンスコストは発生しません。
IGNORE_INTERRUPT |
LOG_INTERRUPT |
FAIL_INTERRUPT
このフラグのグループは、サーバーがダウンした場合、またはトランザクションのコミットが部分的に完了したときに中断された場合に、システムが何をすべきかを示します。これらのフラグを一度に複数設定することはできません。
IGNORE_INTERRUPT(デフォルト)により、サーバーは再起動時に特別なアクションを実行しません。
LOG_INTERRUPTにより、サーバーはコミットを開始する前に基本的なトランザクション情報を保存し、再起動時に進行中のトランザクションを検出して失敗をログに記録できるようにします。このオプションでは、トランザクションごとに2つのメタコミット(開始と停止)が必要です。
FAIL_INTERRUPTにより、サーバーは、進行中のトランザクションのサーバー起動時に、要求された障害モデルを実行するのに十分な情報を格納します。このオプションは、トランザクションの開始、トランザクションの終了、およびコミットするソースの各ペア間でメタコミットを要求するため、コストがかかります。
BEGINステートメントの後には、トランザクション指定子を続けることができます。 (複合ステートメントでBEGINを使用する方法については、複合ステートメントを参照してください。)指定子がない場合、ブロックは親のトランザクション内で実行され、実行する作業は一部です。親トランザクションの。
複合ステートメントが独立したトランザクションを持つと宣言されている場合、そのスコープ内のすべてのアクションはトランザクションの一部です。複合ステートメントの宣言については、複合ステートメントを参照してください。
COMMITを呼び出すことをお勧めしますが、必須ではありません。 COMMITを参照してください。
スコープからの通常の終了により、トランザクションがコミットされます。
未処理の例外を介してスコープを終了すると、トランザクションのロールバックが発生します。
処理された例外を介して終了しても、トランザクションが暗黙的にロールバックされることはありません。必要に応じて、トランザクションを明示的にロールバックする必要があります。 ROLLBACKを参照してください。
SQLスクリプトでは、次のようにBEST_EFFORTおよびNOCOMPENSATEオプションを使用できます。
PROCEDURE myProcedure ( )
BEGIN INDEPENDENT BEST_EFFORT NOCOMPENSATE TRANSACTION
-- Add your code here
END
エラー
次の表は、トランザクションの解決中に発生する可能性のあるエラーについて説明しています。
エラーメッセージ
原因
Conflicting options(競合するオプション)
2つの相互に排他的なオプションが宣言されています。