「トランザクション処理」の解説
データベース管理システムの機能
データベースでは、情報共有を実現する一方で、確実にデータ保全を行う必要があります。データベースの一貫性を保つために「排他制御」や「トランザクション処理」、「リカバリ機能」といった機能が用意されています。
排他制御
「排他制御」は、データべースに対するアクセスや更新を必要に応じて制御する機能です。「ロック(Lock)」と呼ばれることもあります。データベースへの書き込み処理が行われる際、一時的に、他の利用者からのアクセスやデータの読み書きを制限して利用できないようにします。これによってデータの整合性を保ちます。
排他制御の種類として、データの更新と参照の両方をロックする「占有ロック(排他ロック)」と、データの更新だけロックする「共有ロック(読込ロック)」があります。

- デッドロック
- 複数の利用者が、それぞれデータに排他制御を掛けた状態で、互いのデータを参照する、という状況の発生する場合があります。このような状況はデッドロックと呼ばれます。利用者は、一つのデータをロックしながら、他のあるデータのロック解除を待ちます。しかしそのデータは、先の利用者がロックしているデータのロック解除を待っており、処理を進めることができません。
- デッドロックが発生するのは、データベースの排他制御の指定方法や設計に何らかの問題がある場合です。デッドロックを避けるため、慎重な排他制御を行う必要があります。
トランザクション処理
データベースを利用する場合、処理の一貫性を保つために関連する一連の処理全体を一つの処理単位として管理する仕組みを「トランザクション処理」と呼びます。データベースでは複数の処理が関連してくるため、個々の小さな処理単位で成功・失敗を判断するだけでは十分でなく、全体として処理が誤りなく遂行されたかを評価する必要があります。
例えば、「銀行口座から送金する」という事例を想定した場合、行うべき処理として「送金元の口座から金額を減らす」、「資金の移動を送金先の口座に通知を行う」、「送金先の口座の金額を増やす」といった処理があります。このとき、途中の送金先の口座に通知を行う処理だけ失敗に終わったとしたら、送金元の口座の金額だけが減る、という矛盾した事態が生じます。
トランザクション処理は、上記の例でいえば「送金元の口座から金額を減らし、送金先の口座に通知を行い、送金先の口座の金額を増やす」という一連の流れを一個の処理単位とみなし、処理の整合性を保ちます。最後まで処理が完了しなければ、最初から処理が行われなかったと同じとみなします。
リカバリ機能
データベースに格納されているデータを更新した場合、データベース管理システムではログファイルとして更新情報を自動的に保存します。このログファイルは、ハードウェアに障害が発生した際などにシステム復旧を行うためのバックアップとして重要になります。もし、障害が発生しても、ログファイルの情報があれば、故障したハードウェアを交換して最終更新日の時点までデータベースを復旧させることができます。このような機能を「リカバリ機能」と呼びます。
リカバリ機能は、「ロールフォワード」と「ロールバック」の2種類に分けられます。
ポイント
データベースの処理方法を理解しましょう。
データベースは複数の利用者からデータの参照や更新が行われるため、排他制御とリカバリ機能により一貫性を保つ必要があることを理解しましょう。