ITパスポート 令和5年度 問66:databaseに関する問題
トランザクション処理におけるコミットの説明として,適切なものはどれか。
- aあるトランザクションが共有データを更新しようとしたとき,そのデータに対する他のトランザクションからの更新を禁止すること
- bトランザクションが正常に処理されたときに,データベースへの更新を確定させること正答
- c何らかの理由で,トランザクションが正常に処理されなかったときに,データベースをトランザクション開始前の状態にすること
- d複数の表を,互いに関係付ける列をキーとして,一つの表にすること
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは b です。
「コミット」とは、一連の作業がぜんぶ無事に終わったときに「よし、これで確定!」とデータベースに書き込みを正式に保存することです。お買い物で言えば、カゴに入れた商品をレジで“お会計完了”にするイメージ。完了するまでは途中なので、後で取り消せます。
👉 覚え方:「コミット=確定(保存OK!)」。レジで会計を済ませる。
ほかの選択肢:a=他の人に勝手にいじらせない“ロック”/c=失敗したから最初の状態に戻す“ロールバック(取り消し)”/d=表をくっつける“結合”の話。
なぜこれが正解か
正解は b。コミット(commit)は、トランザクション(一連の処理のまとまり)が正常に完了したときに、その更新内容をデータベースに確定・永続化する操作。コミット後の変更は確定し、他のトランザクションからも見えるようになる。
各選択肢の解説
- a:他トランザクションからの更新を禁止する=排他制御(ロック)の説明。
- c:異常時に開始前の状態へ戻す=ロールバックの説明(コミットの対義)。
- d:複数の表をキーで関係付けて1つにする=結合(JOIN)の説明。
覚え方・ひっかけ注意
「正常終了→コミット(確定)/異常→ロールバック(取消)」をペアで暗記。aロック・d結合は無関係な操作を混ぜたダミー。ACID特性の「A(原子性)」とセットで押さえると迷わない。
理論的背景
トランザクション(Transaction)はデータベース処理における「一連の操作をひとつの不可分な作業単位として扱う論理的な処理単位」であり、ACID特性(Atomicity・Consistency・Isolation・Durability)によってその信頼性が保証される。
Atomicity(原子性):トランザクション内のすべての操作が完全に実行されるか、一つも実行されないかのどちらかであることを保証する。コミット(Commit)はすべての操作が成功したことを確認して変更を確定する、ロールバック(Rollback)はいずれかの操作が失敗した場合に途中の変更をすべて取り消して開始前の状態に戻すという2つの操作がAtomicityを実現する。
コミット(Commit)の正確な定義:トランザクションが正常に完了した時点で、そのトランザクション内のすべてのデータ更新をデータベースに「永続的に確定」させる操作。コミット後は電源断・システム障害が発生しても更新内容は失われない(Durability:永続性の保証)。コミットが完了する前の更新は「未確定状態(uncommitted)」であり、他のトランザクションからは見えない(分離レベルによる)。
ロールバック(Rollback)との対比:コミットが「成功時の確定」、ロールバックが「失敗時の取消し」であり、トランザクションの二つの終了方法を構成する。
実務での使われ方
コミットとロールバックの最も典型的な実務例は銀行振込処理である。「A口座から1万円引き落とし → B口座へ1万円入金」という2つの更新は、同一トランザクションとして処理される。引き落とし成功後・入金前にシステム障害が発生した場合、ロールバックによって引き落とし操作も取り消され、A口座の残高が元の状態に戻る。コミットはその逆で、両方の操作が成功した後に確定を行い、以後の障害があってもデータが保護される。
実装技術面では、RDBMSはコミット前の変更をWAL(Write-Ahead Logging:先行書き込みログ)またはREDO/UNDOログに記録し、障害発生時にはログを再生(REDO)または取り消し(UNDO)することでデータベースの一貫性を回復する。現代のRDBMS(PostgreSQL・MySQL InnoDB・Oracle・SQL Server)はすべてWALベースのトランザクション管理を実装している。
分散トランザクション(複数のデータベースにまたがるトランザクション)では2フェーズコミット(2PC:Two-Phase Commit)プロトコルが使われ、フェーズ1(全参加者への「コミット可否の確認」)とフェーズ2(全参加者が合意した場合のみコミット実行)の2段階で原子性を保証する。マイクロサービスアーキテクチャの普及により、2PCの代替としてSagaパターン(各サービスが局所的なトランザクションを実行し、補償トランザクションで取り消しを実現)が注目されている。
試験での位置づけ
ITパスポートのテクノロジ系・データベース分野では、トランザクション管理の4概念(コミット・ロールバック・排他制御・ACID特性)が安定して出題される。本問の選択肢はそれぞれトランザクション管理の異なる側面を表しており、正確な用語の対応関係を把握していることが問われる。
- コミット → 正常時の確定(本問の正解)
- ロールバック → 異常時の取消し(選択肢c)
- 排他制御(ロック) → 同時更新時の矛盾防止(選択肢a)
- JOIN操作 → テーブルの結合(選択肢d)
各用語の機能・目的を明確に整理しておけば、選択肢を素早く分類できる。基本情報技術者試験ではACID特性の各要素の詳細定義・2相ロッキングプロトコル・デッドロック(循環待ちによるロック解放不能)の概念・分離レベル(READ UNCOMMITTED・READ COMMITTED・REPEATABLE READ・SERIALIZABLE)まで問われる。
選択肢の発展補足
選択肢a(他のトランザクションからの更新を禁止する)=排他制御(ロック):複数のトランザクションが同一データを同時に更新しようとすると、データの矛盾(最後に書いた方が勝つ「ロストアップデート」など)が発生するリスクがある。これを防ぐため、あるトランザクションがデータを更新する際に他のトランザクションからの更新をブロックする仕組みが排他制御(Exclusive Lock:排他ロック)である。排他ロックが複数のトランザクション間で相互に掛け合うと「デッドロック(Dead Lock)」が発生し、DBMSが自動的に一方をロールバックして解消する。
選択肢c(開始前の状態に戻す)=ロールバック:コミットと対をなすトランザクション処理の終了操作。エラー発生・制約違反・明示的なROLLBACK文により、トランザクション内のすべての変更をなかったことにする。分散トランザクションにおけるSaga補償トランザクション(Compensating Transaction)はロールバックの分散版として機能する。
選択肢d(複数の表を一つにまとめる)=結合(JOIN操作):SELECT文のJOIN句(INNER JOIN・LEFT OUTER JOIN・RIGHT OUTER JOIN・FULL OUTER JOIN)によって、関係付けられる列(結合キー)をもとに複数のテーブルのデータを組み合わせて一つの結果セットとして取得する操作。トランザクション制御(コミット・ロールバック)とは全く異なるSQLのクエリ操作の概念である。
出典:IPA(情報処理推進機構)公式 ITパスポート試験 令和5年度 問66/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。