この節では、Teradataセッション モードとANSIセッション モードでのロールバック(アボート)処理について説明します。
ABORT文およびROLLBACK文の詳細については、<Teradata Vantage™ - SQLデータ操作言語、B035-1146>を参照してください。
ANSIセッション モードでのロールバック処理
ANSIでは、アプリケーションからCOMMIT [WORK]またはABORT/ROLLBACK [WORK]リクエストを実行した場合にだけトランザクションの終了が認識されます。データベースの整合性を保持する上で必要でない限り、トランザクションがシステムによって終了されることはありません。
リクエストにエラーがある場合には、現在のリクエストだけがロールバックされ、そのトランザクション内で前に実行された他のリクエストはロールバックされません。つまり、これが起きるリクエストは分割不能ということになります(詳細については、トランザクションのACIDプロパティを参照)。ロック マネージャは、ロールバックされるリクエストに設定されているロックを解放しません。
- ABORTまたはROLLBACK
- デッドロックが発生した。
- アボートされたDDL文。
トランザクションによって保持されるロックが解放される前に、上記の状況のどちらかが必要になります。
- リクエストはブロックされ、かつLOCKING NOWAITオプションが指定されていたので、拒否された。
Teradataセッション モードでのロールバック処理
トランザクションについては、実行したリクエストがすべて実行されるか、何も実行されないかのいずれかです。言い換えれば、Teradataセッション モードのトランザクションはすべて分割不能ということです(詳細については、トランザクションのACIDプロパティを参照)。
何らかの理由でトランザクションを正常に完了できなかったか、あるいは時間切れになった場合は、そのトランザクション全体がアボートされ、ロールバック処理が実行されます。
Teradataセッション モードの場合、ロールバック(アボート)処理では次のアクションが実行されます。
- トランザクションの実行結果としてデータベースに加えられた変更がすべてロールバックされます。
- トランザクション内のリクエストの結果として適用されたロックを解放します。
- 部分的に蓄積された結果(スプール)がすべて消去されます。
トランザクション回復処理は、ロールバック処理によって実行されます。
- トランザクションのために適用されたロックによって、他のセッションがブロックされる場合があります。
- トランザクションは、多大なロックの累積が原因で失敗することがあります。
- 失敗、タイムアウト、ABORT/ROLLBACK、ログオフ、またはシステムの再始動が発生した場合、トランザクションによってすでに実行された作業のロールバックにより、ロックが解放され、ロックされたオブジェクトが使用可能になるまでに時間がかかることがあります。
- トランザクションの実行中にシステムを再始動する必要がある場合に、すでにトランザクションによってロールバックが実行されていると、再始動後、システムが使用できるようになるまで時間がかかります。
アプリケーション始動非同期アボート
ANSIセッション モードでもTeradataセッション モードでも、アプリケーションによって開始された非同期のアボートによって、トランザクションが完全にロールバックされます。この場合の用語アプリケーションは、クライアント ベースでもサーバー ベースでも、データベース管理システムのコンポーネントのことであり、ユーザーが記述したアプリケーションではありません。
これは、例えばCLIv2アボート リクエストという手段で、セッションを適切にクリーンアップせずにアプリケーションが終了したときにTDPによって、またはTeradata Studio™などのTeradataツールを使用するなどのさまざまな方法で発生する可能性があります。