pulpul 日本の試験

データベーススペシャリスト 概念書 · データベース

トランザクション制御と障害回復

要点と定義

トランザクションは、ひとまとまりとして扱う処理です。原子性は、処理がすべて反映されるか、まったく反映されないかという性質です。たとえば振替処理が途中で止まっても、引落しだけが残る状態にしないことが原子性の考え方です。原子性は、一貫性(処理前後でデータベースの制約を保つこと)や隔離性(並行実行時の相互影響に関する性質)とは区別します。

同時実行制御は、複数のトランザクションが同時にデータを更新するとき、データの整合性を保つための制御です。2相ロックでは、ロックを取得する拡大段階から解放する縮小段階へ移り、解放を始めた後は新しいロックを取得できません。この規則に従うスケジュールでは競合直列可能性が保証されますが、デッドロックは起こり得ます。

過去の出題で扱った補足として、待ちグラフはトランザクションを頂点、ロック解放待ちを有向辺で表し、閉路の有無からデッドロックを検出する方法です。

分散データベースの2相コミットでは、主サイトが各参加サイトに準備を求め、応答を集めます。全サイトがコミット可能と応答した場合、主サイトがコミットを指示します。ロックの取得・解放を扱う2相ロックとは、目的が異なります。

障害回復では、バックアップをリストアした状態にログを適用し、バックアップ後にコミットした更新を再適用する操作をロールフォワードといいます。未コミットの更新を取り消す操作はロールバックです。チェックポイントは、障害回復を効率化するための記録点です。

過去の出題で扱った補足として、WAL(Write Ahead Log)は、データページの更新より前に更新ログを記録する規約です。コミット時のログが記録媒体に書き出されていれば、コミット済みの更新がデータページに未反映でも、ログから回復できます。WAL自体はログ媒体の故障を防ぐ規約ではありません。

適用条件と例

2相ロックの例では、処理が商品情報を読む共有ロックを取り、続いて別の商品情報を更新するロックを取るとします。ロックを解放し始める前なら追加で取得できますが、解放を始めた後は取得できません。共有ロックか専有ロックかはアクセス内容などに応じます。

複数サイトで一つの更新を行う場合、主サイトは各参加サイトに準備できるかを問い合わせます。全サイトから準備完了の応答を得た場合にコミットを指示し、準備できないサイトがあれば中止となり得ます。通信異常があっても必ずコミットできるとは限りません。

この節の続き

ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。

アプリでこの節を読む