分散DBMS-失敗とコミット
データベース管理システムは、多くの障害の影響を受けやすくなっています。この章では、障害の種類とコミットプロトコルについて学習します。分散データベースシステムでは、障害は大きくソフト障害、ハード障害、ネットワーク障害に分類できます。
ソフト障害
ソフト障害は、永続ストレージではなく、コンピューターの揮発性メモリの損失を引き起こすタイプの障害です。ここでは、メインメモリ、バッファ、キャッシュ、レジスタなどの非永続ストレージに保存されている情報が失われます。これらは、システムクラッシュとも呼ばれます。さまざまな種類のソフト障害は次のとおりです。
- オペレーティングシステムの障害。
- メインメモリがクラッシュします。
- トランザクションの失敗または中止。
- 整数オーバーフローやゼロ除算エラーなどのシステム生成エラー。
- サポートソフトウェアの障害。
- 停電。
ハード障害
ハード障害は、ディスクなどの永続ストレージまたは不揮発性ストレージのデータが失われる原因となるタイプの障害です。ディスク障害は、一部のディスクブロックのデータの破損、またはディスク全体の障害を引き起こす可能性があります。ハード障害の原因は次のとおりです。
- 停電。
- メディアの障害。
- 読み取り/書き込みの誤動作。
- ディスク上の情報の破損。
- ディスクの読み取り/書き込みヘッドクラッシュ。
新しい、フォーマットされた、すぐに使用できるディスクが予約されている場合、ディスク障害からの回復は短くなる可能性があります。それ以外の場合、期間には、注文書を取得し、ディスクを購入して準備するのにかかる時間が含まれます。
ネットワーク障害
ネットワーク障害は、分散データベースまたはネットワークデータベースでよく見られます。これらは、データの分散性とネットワークを介したデータ転送のためにデータベースシステムで発生したエラーで構成されます。ネットワーク障害の原因は次のとおりです-
- 通信リンク障害。
- ネットワークの混雑。
- 転送中の情報の破損。
- サイト障害。
- ネットワークパーティショニング。
コミットプロトコル
データベースシステムは、障害が発生した後でもトランザクションの望ましいプロパティが維持されることを保証する必要があります。トランザクションの実行中に障害が発生した場合、トランザクションによってもたらされたすべての変更がコミットされない可能性があります。これにより、データベースに一貫性がなくなります。コミットプロトコルは、トランザクションの取り消し(ロールバック)またはトランザクションのやり直し(ロールフォワード)のいずれかを使用して、このシナリオを防ぎます。
コミットポイント
トランザクションをコミットするか中止するかが決定される時点は、コミットポイントと呼ばれます。コミットポイントのプロパティは次のとおりです。
これは、データベースに一貫性がある時点です。
この時点で、データベースによってもたらされた変更は、他のトランザクションによって確認できます。すべてのトランザクションは、データベースの一貫したビューを持つことができます。
この時点で、トランザクションのすべての操作が正常に実行され、その影響がトランザクションログに記録されています。
この時点で、必要に応じてトランザクションを安全に取り消すことができます。
この時点で、トランザクションはそれによって保持されているすべてのロックを解放します。
トランザクションの取り消し
トランザクションによってデータベースに加えられたすべての変更を元に戻すプロセスは、トランザクションの元に戻すまたはトランザクションのロールバックと呼ばれます。これは主にソフト障害の場合に適用されます。
トランザクションのやり直し
トランザクションによってデータベースに加えられた変更を再適用するプロセスは、トランザクションのやり直しまたはトランザクションのロールフォワードと呼ばれます。これは主に、ハード障害からの回復に適用されます。
トランザクションログ
トランザクションログは、データベースアイテムに対するトランザクション操作を追跡するシーケンシャルファイルです。ログは本質的にシーケンシャルであるため、最初または最後からシーケンシャルに処理されます。
トランザクションログの目的-
- トランザクションをコミットまたはサポートするためのコミットプロトコルをサポートするため。
- 障害後のデータベースの回復を支援するため。
トランザクションログは通常ディスクに保持されるため、ソフト障害の影響を受けません。さらに、ログは定期的に磁気テープなどのアーカイブストレージにバックアップされ、ディスク障害からも保護されます。
トランザクションログのリスト
トランザクションログには、トランザクションのステータスに応じて5種類のリストが保持されます。このリストは、リカバリマネージャがトランザクションのステータスを確認するのに役立ちます。ステータスと対応するリストは次のとおりです-
トランザクション開始レコードとトランザクションコミットレコードを持つトランザクションは、コミットされたトランザクションであり、コミットリストに保持されます。
トランザクション開始レコードとトランザクション失敗レコードがあるが、トランザクション中止レコードがないトランザクションは、失敗したトランザクションであり、失敗したリストに保持されます。
トランザクション開始レコードとトランザクション中止レコードを持つトランザクションは中止されたトランザクションであり、中止リストに保持されます。
トランザクション開始レコードとトランザクションのコミット前レコードを持つトランザクションは、コミット前トランザクションです。つまり、すべての操作が実行されたがコミットされていないトランザクションであり、コミット前リストに保持されます。
トランザクション開始レコードはあるが、コミット前、コミット、中止、または失敗のレコードがないトランザクションは、アクティブなトランザクションであり、アクティブリストに保持されます。
即時更新と遅延更新
即時更新と遅延更新は、トランザクションログを維持するための2つの方法です。
に immediate updateモードでは、トランザクションが実行されると、トランザクションによって行われた更新がディスクに直接書き込まれます。古い値と更新値は、ディスク内のデータベースに書き込む前にログに書き込まれます。コミット時に、ディスクに加えられた変更は永続的になります。ロールバック時に、データベース内のトランザクションによって行われた変更は破棄され、古い値はログに保存されている古い値からデータベースに復元されます。
に deferred updateモードでは、トランザクションが実行されると、トランザクションによってデータベースに加えられた更新がログファイルに記録されます。コミット時に、ログの変更がディスクに書き込まれます。ロールバック時に、ログの変更は破棄され、データベースに変更は適用されません。