1.ビジネスの基本概念
事務
いわゆるトランザクションは、データベース操作のユーザー定義のシーケンスです。これらの操作はすべて実行されるか実行されないかのいずれかであり、これは分割できない作業単位です。
トランザクションの開始と終了は、ユーザーが表示および制御できます。ユーザーが定義されたトランザクションを表示しない場合、データベース管理システムはデフォルトの規制に従ってトランザクションを自動的に分割します。
SQLでトランザクションを定義するには、通常、次の3つのステートメントがあります。
-- 开启事务
BEGIN TRANSACTION;
-- 事务提交
COMMIT
-- 事务回滚
ROLLBACK
トランザクション特性ACID
トランザクションには、原子性、一貫性、分離、耐久性の4つの特性があります。
アトミシティ
トランザクションは、データベースの論理的な作業単位です。トランザクションに含まれる操作は、すべて完了または未完了のいずれかです(注意ステータス:成功または失敗のいずれか、部分的な成功ステータスはありません)。
一貫性
一貫性とは、トランザクションに含まれる操作が成功または失敗することも意味します。これは原子性と同じように見えます。ただし、一貫性とアトミック性の違いは、一貫性がデータの可視性に重点を置いていることです。中間状態のデータは外部からは見えず、初期状態と最終状態のデータのみが外部から見えます。たとえば、Aが銀行からBに100を転送する場合、アトミック性は操作全体が正しく正常に実行されたかどうかに関係し、一貫性はアカウントAが正常に差し引かれたかどうか、アカウントBが正常にクレジットされたかどうかに関係します。アカウントAはアカウントと同じである必要があります。Bは一貫しています。
隔離
トランザクションの実行は、他のトランザクションによって妨害されることはありません。
持続的
永続性は永続的とも呼ばれます。つまり、トランザクションがコミットされると、データベース内のデータへの変更は永続的になります。
2.失敗の種類
データベースシステムでは、データのセキュリティと整合性が破壊されるのを防ぎ、同時イベントが正しく実行されるようにするために、さまざまな対策が講じられています。しかし、いくつかの失敗は避けられません。データベースで発生する可能性のある障害は、大きく次のカテゴリに分類できます。
- トランザクションの内部障害:トランザクションの内部障害は予期しないものであり、操作のオーバーフロー、並行トランザクションなど、アプリケーションプログラムでは処理できません。
- システム障害:システム障害とは、システムの機能を停止させ、システムを再起動させるイベントを指します。
- メディア障害:システム障害はソフト障害と呼ばれ、メディア障害はハード障害(ハードディスクの損傷、磁場の干渉など)と呼ばれます。
- コンピュータウイルス
3.回復実現技術
リカバリメカニズムに関連する2つの重要な問題は、冗長データを作成する方法と、これらの冗長データを使用してデータベースリカバリを実現する方法です。冗長データを作成するために最も一般的に使用される手法は、データのダンプとログファイルの登録です。
データダンプ
データダンプは、データベース管理者がデータベース全体を定期的にバックアップするプロセスです。これらのバックアップされたデータは、バックアップコピーまたはバックアップコピーと呼ばれます。
ダンプは、静的ストレージと動的ストレージに分けることができます。
- 静的ストレージは、システムに実行中のトランザクションがない場合のダンプ操作であり、データの完全なコピーを取得できます。
- 動的ストレージ中にデータを変更できます。つまり、ダンプとユーザートランザクションを同時に実行できます。得られたデータが正確で有効であるという保証はありません。
データストレージの2つの方法は、それぞれ2つの方法で実行できます
。マスダンプ:毎回すべてのデータベースをダンプします。
インクリメンタルダンプ:最後のダンプ後に更新されたデータのみをダンプします。
マスダンプとインクリメンタルダンプの比較
リカバリの観点からは、次のようになります。多くの
場合、大規模なダンプから取得したバックアップコピーをリカバリに使用する方が便利です。データベースが大きく、トランザクション処理が非常に頻繁に行われる場合は、インクリメンタルダンプ方式の方が実用的で効果的です。
登録ログファイル
1.ログファイルの形式と内容
ログファイルは、トランザクションの更新操作をデータベースに記録するために使用されます。異なるデータベースで使用されるログファイル形式は、完全に同じではありません。:その前に二つのフォーマットがあるログファイルの単位記録中やログファイル単位でデータブロックが。
レコードに基づいてログファイルに登録する必要があるコンテンツは次のとおりです。
- 各トランザクションの開始マーク(BEGIN TRANSACTION)
- 各トランザクションの終了(COMMITまたはROLLBACK)
- 各トランザクションのすべての更新操作は
、ログファイルのログレコードとして扱われます。
各ログレコードの内容には、次のものが含まれます。
- トランザクションID(どのトランザクションであるかを示す)
- 操作タイプ(挿入、削除、または変更)
- 操作オブジェクト(レコードID、ブロック番号)
- 更新前のデータの古い値(挿入操作の場合、これはNULL値です)
- 更新されたデータの新しい値(削除操作の場合、この項目は空です)
データブロックを単位とするログファイルの場合、トランザクション識別子と更新されたデータブロックが含まれます。
2.ログファイルの役割
ログは、データ回復におけるトランザクション障害回復とシステム障害回復に使用できます。特定の機能:
- トランザクション障害回復とシステム障害回復では、ログファイルを使用する必要があります。
- 動的ダンプモードでは、ログファイルを確立する必要があり、バックアップコピーとログファイルを組み合わせてデータベースを効果的に復元できます。
- ログを静的ダンプで使用して、データが特定の瞬間に正しい状態に復元されるようにすることもできます。
3.登録ログファイル
データベースが回復可能であることを保証するには、ログファイルを登録するときに2つのルールに従う必要があります。
- 登録の順序は、同時トランザクション実行の時系列に厳密に従います。
- 最初にログファイルを書き込み、次にデータベースを書き込む必要があります
最初にログを書き込んでからデータベースを書き込む必要があるのはなぜですか?
ログへの書き込みとデータベースへの書き込みは2つの異なる操作であるため、これら2つの操作の間で障害が発生する可能性があります。つまり、2つの操作のうち1つだけが完了します。つまり、データベースが最初に書き込まれますが、ログは書き込まれません。この場合、変更を後で復元することはできません。
4.回復戦略
システムの実行中に障害が発生した場合は、コピーとログの回復を使用する必要がありますが、障害回復の戦略と方法が異なることに注意してください。
トランザクション障害の回復
この種の障害は、トランザクションが通常の終了まで実行される前に停止することを意味します。この時点で、リカバリサブシステムはログファイルを使用して、トランザクションがデータベースに対して行った変更を元に戻す必要があります。
回復手順は次のとおりです。
- ログを逆方向にスキャンして、トランザクションの更新操作を見つけます
- 更新された値に対して次の操作を実行します:挿入操作->挿入データの削除、変更操作->ポスト値を前の変更値に置き換え、削除操作->挿入操作。
- 取引開始に対応するマークを読むまで
システム障害の回復
システム障害が原因でデータベースの状態が不整合になる理由は2つあります。1つは未完了のトランザクションによってデータがデータベースに書き込まれたこと、もう1つはコミットされたトランザクションのデータ更新がまだキャッシュに残っている可能性があることです。解決策は、障害が発生したときに完了しなかったトランザクションを元に戻し、完了したトランザクションをやり直すことです。
回復手順:
- ログを前方にスキャンして、障害が発生する前にコミットされたトランザクションを見つけ、それらのIDをREDOキューに記録し、障害が発生したときに完了しなかったトランザクションを見つけ、レコードキャンセルキューを特定します。
- キャンセルキュー内の各トランザクションをキャンセルします
- 左側のキューから各トランザクションをやり直します
メディア障害の回復
メディア障害が発生すると、ディスク上の物理データファイルとログデータファイルが破壊されます。これは最も深刻なタイプの障害です。回復方法は、データベースを再インストールしてから、完了したトランザクションをやり直すことです。
5.チェックポイントを備えたリカバリテクノロジー
ログテクノロジを使用するリカバリサブシステムは、ログを検索して、どのトランザクションをやり直す必要があり、どのトランザクションを元に戻す必要があるかを判断する必要があります。これは、多くの時間を浪費します。この問題を解決するには、チェックポイントレコードを導入し、チェックポイントファイルの増加を新しい開始で記録し、動的リカバリサブシステムがログファイルのログ中にログを維持できるようにします。
チェックポイントレコードには次のものが含まれます。
- チェックポイント時に実行されているすべてのタスクのリストを作成します
- これらのトランザクションの最新のログレコードのアドレス
ログを動的に維持する方法は、チェックポイントを確立してデータベースのステータスを保存する操作を定期的に実行することです。具体的な手順は次のとおりです。
- 現在のログバッファ内のすべてのログレコードをディスクのログファイルに書き込みます
- ログファイルにチェックポイントレコードを書き込みます
- 現在のデータバッファ内のすべてのデータレコードをディスクデータベースに書き込みます
- ログファイルに記録されたチェックポイントのアドレスは、再起動されたファイルに書き込まれます。
リカバリサブシステムは、チェックポイントを定期的または不定期に設定したり、特定のルールに従ってチェックポイントを設定してデータベースの状態を保存したりできます。
サブシステム回復戦略:
- チェックポイントの前にトランザクションをコミットします。この場合、データはデータベースに書き込まれているため、処理する必要はありません。
- チェックポイントとシステム障害の間でコミットします。この場合、データベースがバッファ内のデータベースに書き込まれていない可能性があるため、やり直す必要があります。
- 失敗時に取引が提出されていない場合、取引はキャンセルされます。
元に戻すログは、トランザクションが開始する前の状態を記録するために使用され、トランザクションが失敗したときのロールバック操作に使用されます。REDOログは、トランザクションが実行された後の状態を記録し、成功したトランザクションによって更新されたデータを復元するために使用されます。データファイルに書き込まれていません。
システムはチェックポイント方式を使用して、ステップを復元します。
- 再起動ファイルからログファイルに記録された最後のチェックポイントのアドレスを見つけ、アドレスを変更してログファイルの最後のチェックポイントのレコードを見つけます。
- チェックポイントレコードは、チェックポイントが確立されたときに実行中のすべてのトランザクションのアクティブリストを取得します。2つのトランザクション・キューを作成します
-LIST -undo
-REDO-
LISTが一時的にUNDO-LISTキューにACTIVE-LISTを入れて、REDOキューが一時的に空です。 - ログファイルをチェックポイントからログファイルの終わりまで前方にスキャンします-
新しく開始されたトランザクションTiがある場合は、一時的にTiをUNDO-LISTキューに入れます
-コミットされたトランザクションTjがある場合は、TjをUNDO-LISTから移動しますREDO-LISTキューへのキュー;ログファイルの終わりまで - UNDO-LISTの各トランザクションでUNDO操作を実行し、REDO-LISTの各トランザクションでREDO操作を実行します
チェックポイントを使用する利点:スキャンログ時間を短縮して、リカバリ効率を向上させます
6.データベースのミラーリング
データベースミラーリングは、メディア障害に対する優れたソリューションです。つまり、複数のハードディスクを準備し、データベースミラーリングを使用して、1つのハードディスクから複数のハードディスクにデータをリアルタイムでバックアップします。