SE基本情報に出るIT用語

トランザクションのアボートとは?強制的に処理(SQL)を中断すること

「データベースのトランザクションがアボートされる」というのは、強制的に処理(SQL)を中断されることだと思ってください。

基本情報技術者試験で点をとるためにやってきてくれたなら、「データの入れ替えに失敗したからロールバックする(巻き戻す)しかない」が理解できれば大丈夫。

たぶんですが、お仕事の世界でなら、よく見るメッセージは、この2つ。

  • 【Oracle】「Abortによる切断」
    →DB接続しようとして途中でキャンセルしたとき
    →そもそもDB接続自体、できていないので、何も起きない
  • 【PostgreSQL】「現在のトランザクションがアボートしました。トランザクションブロックが終わるまでコマンドは無視されます」
    →DB更新時にエラーになるSQLを実行したとき。ロールバックするしかない

※PostgreSQLが日本語じゃないと「current transaction is aborted, commands ignored until end of transaction block.」って出るけど、これもアボートしたってこと。

OracleとPostgreSQL(かっこよく言うと「RDBMS」)で、アボート(中断)の意味合いは全く異なります。「トランザクションがアボート」と言えば、ほぼ、PostgreSQLのことかと。

一つだけいえるのは、もし、アボートされたら、「最後のコミットより後のSQLでは、何も更新されていない」ということ。SQLが悪いので、作り直して再トライです。

スポンサーリンク

トランザクションのアボートとは、処理(SQL)が中断されること

トランザクションのアボートとは、処理(SQL)が中断されること。英語でabortは、「失敗する」とか「無駄に終わる」という意味らしいです。

知識が固まってない人向けに、簡単に、トランザクション、コミット、ロールバックについて解説します。

※急いでる人、ある程度の基礎知識がある人は、読む必要ないです。

トランザクションとは?

トランザクションは、一連の流れ、まとまった処理を表します。

ゲームに例えると、電源を付けてから、ゲームをプレイ、終了するまでの流れ。

データベースの世界でいえば、「データを入れ替えするときのまとまった処理」のようなイメージを持ってください。「データ入れるよ!」→「入れ終わったよ!」みたいな感じです。

コミット・ロールバックとは?

コミットは、トランザクション(データの入れ替え)を確定すること。ゲームでいえばセーブです。

ロールバックは、トランザクション(データの入れ替え)をなかったことにすること、開始前に巻き戻すことです。ゲームでいえば、リセットです。

トランザクションのアボートは、データの入れ替え(SQL)の中断

結局、「トランザクションのアボート」は、「データの入れ替え(SQL)の中断」です。

いろいろデータを登録したり更新したりしようとしたけど、ブチッっと中断された状態。データの入れ替えに失敗しています。

原因は、SQLにエラーがある(ほぼ、これ)、通信障害が発生したかのどっちかです。

スポンサーリンク

トランザクションがアボートしたら、ロールバックしかない

そして、トランザクションがアボートしたら、ロールバック(巻き戻し)するしかありません。

突然、SQLがブチッっと中断されて、データがどうなったかもわからないのに、コミット(確定)はできません

PostgreSQLでも「現在のトランザクションがアボートしました。トランザクションブロックが終わるまでコマンドは無視されます」と出てきた状態で、強引にコミットしようとしたら、また同じメッセージが出てくるので、ロールバックするしかなかったはず・・・です。

トランザクションがアボートされた場合は、最後のコミットより後は何も更新されない

トランザクションがアボートされた場合は、最後のコミットより後は何も更新されない状態です。

たとえば、トランザクションA→B→Cをバッチか何かで順番に実行したときに。

トランザクションA・Bはコミットされたけど、Cでアボートされたとします。

すると、トランザクションCはロールバックするしかないので、コミットされたのは、A・Bのみ。

処理を再開するなら、Cから「もう一回遊べるドン!」となるわけです。

※余談だけど、トランザクションBでアボートされて、プログラムなりバッチがおかしくて、Cまで処理が流れてしまうという最低最悪の作りの場合(BはエラーだからCに行ってほしくない場合)。それも、Cはコミットされちゃったとしたら、素直にAの開始前にデータベースをリストアしたほうがいい(範囲が特定できるなら補正でもいいけど)・・・です。ウソみたいなホントの話だけど、本番環境で経験したんだから(*´ω`)。

基本情報技術者試験での出題例

基本情報技術者試験での出題例を挙げます。

トランザクションがアボートしたら、○○するしかないのがわかっていれば、楽勝かと。

まとめ

トランザクションのアボートときたら、強制的に処理(SQL)を中断されることです。

データの入れ替えに失敗しています。失敗しているのに、コミット(確定)はできないので、ロールバック(巻き戻し)一択です。

実際のお仕事で出くわしたら、SQLを修正して、もう一度実行してやってくださいまし(-_-;)。

スポンサーリンク

▼この記事がいいと思ったら、下の画像をクリックしてくれたら励みになります!

にほんブログ村 IT技術ブログ システムエンジニアへ

コメント

タイトルとURLをコピーしました