トランザクション管理
要点と定義
トランザクションは、関連する一連のデータベース処理をひとまとまりとして扱う単位です。正常に終われば更新を確定し、途中で失敗すれば開始前の状態へ戻すことで、処理の一貫性を保ちます。こうした処理の単位がトランザクション処理です。
トランザクションが正常に終わったとき、更新を確定する操作をコミットといいます。失敗したときに更新を取り消し、開始前の状態に戻す操作はロールバックです。
ACID特性の原子性は、一連の処理をすべて実行するか、すべて取り消す性質です。たとえば口座振替では、出金だけ、または入金だけが残らないよう、両方の処理を一単位として確定または取り消します。
DBMSは、データの検索・更新、同時実行制御、アクセス権管理、障害回復などを担います。ログファイルには更新履歴を記録し、異常終了時の復旧に利用します。
適用条件と例
複数の利用者やプログラムが共有データを扱うときは、同時実行制御で更新の競合を防ぎます。同じレコードを更新する間ロックし、処理後にアンロックする方法があります。ロックは共有データへのアクセスを調整する仕組みで、更新の確定を指すコミットとは別です。
並行更新では、読み込みと書き込みの順序も結果を左右します。たとえば初期値10を二つの処理が読み、一方が5を引いて5、もう一方が7を足して17を計算したとします。両方が10を読んでいた場合、先に5を書き込んでも後から17が書き込まれれば最終値は17です。ロックなどで処理を適切に調整しないと、片方の更新が反映されないことがあります。
DBMSの機能を問われたら、データ操作や同時実行制御、アクセス権管理、障害回復などを識別します。テーブルの正規化はデータベース設計の作業であり、ウイルスチェックはDBMS機能の例ではありません。正規化は、データの重複や更新時の不整合を減らすために表を整理する手法です。
誤りやすい点
コミットは成功した更新の確定、ロールバックは失敗した処理の取り消しです。ロックは同時更新の競合を防ぐ制御であり、どれも役割が異なります。
ログファイルは更新履歴を記録するものです。バックアップそのものと混同しないようにします。トランザクションが失敗したときの取り消しがロールバックで、障害後にログを使って復旧する処理とは目的や場面が異なります。
DBMSを導入すれば、同時アクセス時の一貫性を保つ制御ができます。ただし、処理の優先度を決めれば応答時間が必ず短くなる、あるいはデータ量にかかわらずアクセス時間が一定になる、とはいえません。
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む