Skip to the content.

まず結論

トランザクションとは、データベースに対する複数の処理を、ひとまとまりの処理として扱う考え方です。

SG試験では、トランザクションそのものの定義だけでなく、コミット、ロールバック、ロールフォワード、デッドロックとの違いを判断させる問題が出やすいです。

特に選択肢では、次のような混同に注意します。

  • 更新結果を確定する処理は コミット
  • 異常終了した未完了処理を取り消す処理は ロールバック
  • コミット済みの処理をログから復旧する処理は ロールフォワード
  • 複数の処理が互いにロック解除を待つ状態は デッドロック

つまり、SG試験では「誰が、何を、どの状態に戻すのか」を見ると選択肢を切りやすくなります。

直感的な説明

トランザクションは、銀行振込で考えるとわかりやすいです。

たとえば、AさんからBさんへ1万円を振り込む場合、内部では次のような処理が行われます。

  1. Aさんの口座残高を1万円減らす
  2. Bさんの口座残高を1万円増やす

この2つの処理は、どちらか片方だけ成功してはいけません。

Aさんの残高だけ減って、Bさんの残高が増えないと困ります。反対に、Aさんの残高は減らないのに、Bさんの残高だけ増えても困ります。

そこで、データベースではこれらをひとまとまりの処理として扱います。

  • すべて成功したら確定する
  • 途中で失敗したら最初の状態に戻す

この「全部成功するか、全部なかったことにするか」という考え方が、トランザクションの基本です。

定義・仕組み

トランザクションは、データベースの整合性を保つための基本的な仕組みです。

データベースでは、複数の利用者やシステムが同時にデータを更新することがあります。そのため、途中で障害が起きたり、複数の処理が同じデータを使おうとしたりすると、データの矛盾が発生する可能性があります。

そこで、トランザクションでは主に次の処理が重要になります。

用語 役割 判断ポイント
コミット 更新結果を確定する 正常終了した処理を反映する
ロールバック 更新を取り消す 異常終了した未完了処理を元に戻す
ロールフォワード 更新後ログで復旧する コミット済み処理を障害直前の状態まで進める
ロック 他の処理からの更新を制御する 同時更新による矛盾を防ぐ
デッドロック 互いにロック解除を待つ 処理が進まなくなる状態

SG試験では、これらの用語を単体で覚えるよりも、障害時にどの処理が使われるかを意識すると理解しやすいです。

たとえば、アプリケーションが処理途中で異常終了した場合、未確定の更新はデータベースに反映してはいけません。このときは、更新前ログを使ってロールバックします。

一方で、すでにコミットされた処理は、本来データベースに反映されるべき処理です。障害によって反映が不完全な場合は、更新後ログを使ってロールフォワードします。

データベースの基本的な出題範囲は、IPAの情報セキュリティマネジメント試験の出題内容でも、テクノロジ系の関連知識として扱われます。試験範囲を確認したい場合は、IPAの公式ページも参考になります。
情報セキュリティマネジメント試験 出題内容・シラバス

どんな場面で使う?

トランザクションは、データの正しさが重要な場面で使われます。

たとえば、次のような場面です。

  • 銀行の振込処理
  • ECサイトの注文処理
  • 在庫数の更新
  • 会員情報の更新
  • 売上データの登録

これらの処理では、途中で失敗したときに中途半端な状態が残ると困ります。

たとえば、ECサイトで「注文情報は登録されたのに、在庫数が減っていない」という状態になると、実際には在庫がない商品を販売してしまう可能性があります。

そのため、関連する処理をトランザクションとしてまとめ、正常に完了したらコミットし、途中で失敗したらロールバックします。

また、複数の利用者が同じデータを更新する場面では、ロックも重要です。

ロックは、他のトランザクションが同じデータを同時に更新して矛盾が起きないようにする仕組みです。ただし、ロックを使うときは、デッドロックにも注意が必要です。

よくある誤解・混同

ロールバックとロールフォワードを混同しない

SG試験では、ロールバックとロールフォワードを混同させる選択肢がよくあります。

用語 何をするか 使う場面
ロールバック 処理を取り消す 未完了のトランザクションを元に戻す
ロールフォワード 処理を再反映する コミット済みの更新を復旧する

選択肢で「異常終了したトランザクションをロールフォワードした」と書かれていたら注意です。

異常終了してコミットされていない処理は、基本的にロールバックで取り消します。

コミットとロールバックを混同しない

コミットは、更新結果を確定する処理です。

ロールバックは、更新結果を取り消して、トランザクション開始前の状態に戻す処理です。

そのため、「更新結果を確定するためにロールバックする」という選択肢は誤りです。更新結果を確定するのはコミットです。

ロックは解除ではなく、制御するために使う

ロックは、他のトランザクションに勝手に更新されないようにするための仕組みです。

選択肢で「他のトランザクションに更新されないようにするため、ロックを解除した」とあれば注意します。

ロックを解除すると、他のトランザクションが更新できるようになります。更新されたくない場合は、ロックを掛ける必要があります。

デッドロックは単なる障害ではなく、互いに待ち合う状態

デッドロックは、複数のトランザクションが互いに相手のロック解除を待ってしまい、処理が進まなくなる状態です。

たとえば、次のような状態です。

  • トランザクション1が資源Aをロックし、資源Bの解除を待つ
  • トランザクション2が資源Bをロックし、資源Aの解除を待つ

この場合、どちらも相手がロックを解除するのを待つため、処理が止まってしまいます。

SG試験では、「デッドロックが発生したので、DBMSが一部のトランザクションをロールバックした」という流れが正しい理解です。

まとめ(試験直前用)

  • トランザクションは、複数の処理をひとまとまりとして扱う考え方
  • 正常終了して更新を確定するのがコミット
  • 異常終了した未完了処理を取り消すのがロールバック
  • コミット済み更新をログから復旧するのがロールフォワード
  • デッドロックは、複数のトランザクションが互いにロック解除を待って止まる状態

SG試験では、用語を丸暗記するよりも、確定するのか、取り消すのか、復旧するのか、待ち状態なのかで判断すると選択肢を切りやすくなります。

🔗 関連記事


🏠 情報セキュリティマネジメントトップに戻る