DBMS-データ復旧
クラッシュリカバリ
DBMSは非常に複雑なシステムであり、毎秒数百のトランザクションが実行されます。DBMSの耐久性と堅牢性は、その複雑なアーキテクチャと、基盤となるハードウェアおよびシステムソフトウェアに依存します。トランザクション中に失敗またはクラッシュした場合、システムは何らかのアルゴリズムまたは手法に従って失われたデータを回復することが期待されます。
故障分類
問題が発生した場所を確認するために、次のように障害をさまざまなカテゴリに一般化します。
トランザクションの失敗
トランザクションは、実行に失敗したとき、またはそれ以上進むことができないポイントに達したときに中止する必要があります。これはトランザクション障害と呼ばれ、少数のトランザクションまたはプロセスのみが損傷します。
トランザクションが失敗する理由は次のとおりです。
Logical errors −コードエラーまたは内部エラー状態が原因でトランザクションを完了できない場合。
System errors−データベースシステム自体がアクティブなトランザクションをDBMSで実行できないために終了する場合、または何らかのシステム条件のためにトランザクションを停止する必要がある場合。たとえば、デッドロックまたはリソースが使用できない場合、システムはアクティブなトランザクションを中止します。
システムクラッシュ
システムの外部に問題があり、システムが突然停止し、システムがクラッシュする可能性があります。たとえば、電源の中断は、基盤となるハードウェアの障害またはソフトウェアの障害を引き起こす可能性があります。
例には、オペレーティングシステムエラーが含まれる場合があります。
ディスク障害
テクノロジーの進化の初期には、ハードディスクドライブまたはストレージドライブが頻繁に故障するという一般的な問題がありました。
ディスク障害には、不良セクタの形成、ディスクへの到達不能、ディスクヘッドのクラッシュ、またはディスクストレージの全部または一部を破壊するその他の障害が含まれます。
ストレージ構造
ストレージシステムについてはすでに説明しました。簡単に言えば、ストレージ構造は2つのカテゴリに分類できます-
Volatile storage−名前が示すように、揮発性ストレージはシステムクラッシュに耐えることができません。揮発性ストレージデバイスはCPUの非常に近くに配置されます。通常、それらはチップセット自体に埋め込まれています。たとえば、メインメモリとキャッシュメモリは揮発性ストレージの例です。それらは高速ですが、保存できる情報はごくわずかです。
Non-volatile storage−これらのメモリは、システムのクラッシュに耐えるために作成されています。それらはデータストレージ容量が巨大ですが、アクセシビリティは遅くなります。例としては、ハードディスク、磁気テープ、フラッシュメモリ、不揮発性(バッテリバックアップ)RAMなどがあります。
回復と原子性
システムがクラッシュすると、複数のトランザクションが実行され、データ項目を変更するためにさまざまなファイルが開かれる場合があります。トランザクションは、本質的にアトミックなさまざまな操作で構成されます。ただし、DBMSのACIDプロパティによれば、トランザクション全体のアトミック性を維持する必要があります。つまり、すべての操作が実行されるか、実行されないかのいずれかです。
DBMSがクラッシュから回復するとき、DBMSは以下を維持する必要があります-
実行されていたすべてのトランザクションの状態をチェックする必要があります。
トランザクションが何らかの操作の途中である可能性があります。この場合、DBMSはトランザクションのアトミック性を保証する必要があります。
トランザクションを今すぐ完了できるかどうか、またはロールバックする必要があるかどうかを確認する必要があります。
トランザクションがDBMSを不整合な状態のままにすることは許可されません。
トランザクションのアトミック性を回復および維持する際にDBMSを支援できる2種類の手法があります。
各トランザクションのログを維持し、実際にデータベースを変更する前に、それらを安定したストレージに書き込みます。
変更が揮発性メモリで行われるシャドウページングを維持し、後で実際のデータベースが更新されます。
ログベースのリカバリ
ログは一連のレコードであり、トランザクションによって実行されたアクションのレコードを維持します。ログは実際の変更の前に書き込まれ、フェイルセーフである安定したストレージメディアに保存されることが重要です。
ログベースのリカバリは次のように機能します-
ログファイルは安定したストレージメディアに保存されます。
トランザクションがシステムに入り、実行を開始すると、トランザクションに関するログが書き込まれます。
<Tn, Start>
トランザクションがアイテムXを変更すると、次のようにログが書き込まれます。
<Tn, X, V1, V2>
これは、Tを読み取るN Vから、Xの値を変更した1 Vに2。
- トランザクションが終了すると、ログに記録されます-
<Tn, commit>
データベースは、2つのアプローチを使用して変更できます-
Deferred database modification −すべてのログは安定したストレージに書き込まれ、トランザクションがコミットされるとデータベースが更新されます。
Immediate database modification−各ログは、実際のデータベースの変更に従います。つまり、データベースはすべての操作の直後に変更されます。
並行トランザクションによる回復
複数のトランザクションが並行して実行されている場合、ログはインターリーブされます。リカバリ時に、リカバリシステムがすべてのログをバックトラックしてからリカバリを開始するのは困難になります。この状況を緩和するために、最新のDBMSのほとんどは「チェックポイント」の概念を使用しています。
チェックポイント
ログをリアルタイムおよび実環境で保持および維持すると、システムで使用可能なすべてのメモリスペースがいっぱいになる場合があります。時間の経過とともに、ログファイルが大きくなりすぎてまったく処理できなくなる可能性があります。チェックポイントは、以前のすべてのログがシステムから削除され、ストレージディスクに永続的に保存されるメカニズムです。チェックポイントは、DBMSが一貫した状態になり、すべてのトランザクションがコミットされる前のポイントを宣言します。
回復
同時トランザクションのあるシステムがクラッシュして回復すると、次のように動作します。
リカバリシステムは、ログを最後から最後のチェックポイントまで逆方向に読み取ります。
元に戻すリストとやり直しリストの2つのリストを維持します。
リカバリシステムが< Tn、Start>および<T n、Commit>または単に<T n、Commit>のログを検出した場合、トランザクションはREDOリストに入れられます。
リカバリシステムが< Tn、Start>のログを検出したが、コミットまたはアボートログが見つからなかった場合、トランザクションは元に戻すリストに入れられます。
その後、元に戻すリスト内のすべてのトランザクションが元に戻され、それらのログが削除されます。REDOリスト内のすべてのトランザクションとその前のログが削除され、ログを保存する前にやり直されます。