このトピックは、完全復旧モデルまたは一括ログ復旧モデルにのみ関連します。
このトピックでは、SQL Server データベースの復元の一環としてトランザクション ログ バックアップを適用する方法について説明します。
このトピックでは:
トランザクション ログ バックアップを復元するための要件
トランザクション ログ バックアップを適用するには、次の要件を満たす必要があります。
復元シーケンスに十分なログ バックアップ: 復元シーケンスを完了するには、十分なログ レコードがバックアップされている必要があります。 必要に応じてログ末尾のバックアップを含め、必要な ログ バックアップ を復元シーケンスの開始前に使用できる必要があります。
正しい復元順序: 直前のデータベースの完全バックアップまたはデータベースの差分バックアップを最初に復元する必要があります。 その後、データベースの完全バックアップまたは差分バックアップの後に作成されたすべてのトランザクション ログを時系列で復元する必要があります。 このログ チェーンのトランザクション ログ バックアップが失われたり破損したりした場合は、不足しているトランザクション ログの前にトランザクション ログのみを復元できます。
データベースがまだ復旧されていません: 最終的なトランザクション ログが適用されるまで、データベースを復旧できません。 中間トランザクション ログ バックアップの 1 つを復元した後でデータベースを復旧する場合、ログ チェーンが終了する前は、データベースの完全バックアップから始まる完全な復元シーケンスを再起動しないと、その時点を超えてデータベースを復元することはできません。
ヒント
ベスト プラクティスは、すべてのログ バックアップを復元することです (RESTORE LOG database_name WITH NORECOVERY)。 次に、最後のログ バックアップを復元した後、別の操作でデータベースを復旧します (RESTORE DATABASE database_name WITH RECOVERY)。
回復ログとトランザクション ログ
復元操作を完了してデータベースを復旧すると、復旧によって不完全なトランザクションがすべてロールバックされます。 これは 元に戻すフェーズと呼ばれます。 データベースの整合性を復元するには、ロールバックが必要です。 ロールバック後、データベースはオンラインになり、これ以上トランザクション ログ バックアップをデータベースに適用することはできません。
たとえば、一連のトランザクション ログ バックアップには、実行時間の長いトランザクションが含まれています。 トランザクションの開始は最初のトランザクション ログ バックアップに記録されますが、トランザクションの終了は 2 番目のトランザクション ログ バックアップに記録されます。 最初のトランザクション ログ バックアップには、コミット操作またはロールバック操作のレコードがありません。 最初のトランザクション ログ バックアップが適用されたときに復旧操作が実行された場合、実行時間の長いトランザクションは不完全として扱われ、トランザクションの最初のトランザクション ログ バックアップに記録されたデータ変更はロールバックされます。 SQL Server では、この時点以降に 2 番目のトランザクション ログ バックアップを適用することはできません。
注
状況によっては、ログの復元中にファイルを明示的に追加できます。
ログ バックアップを使用した障害発生時点への復元
次の一連のイベントを想定します。
| 時間 | 出来事 |
|---|---|
| 午前 8:00 | データベースをバックアップして、データベースの完全バックアップを作成します。 |
| 昼 | トランザクション ログをバックアップします。 |
| 午後 4:00 | トランザクション ログをバックアップします。 |
| 午後 6:00 | データベースをバックアップして、データベースの完全バックアップを作成します。 |
| 午後 8:00 | トランザクション ログをバックアップします。 |
| 午後 9 時 45 分 | エラーが発生します。 |
注
このバックアップのシーケンス例の説明については、「 トランザクション ログ バックアップ (SQL Server)」を参照してください。
データベースを午後 9 時 45 分 (障害発生時点) の状態に復元するには、次のいずれかの別の手順を使用できます。
代替 1: 最新のデータベースの完全バックアップを使用してデータベースを復元する
障害発生時点で現在アクティブなトランザクション ログのログ末尾バックアップを作成します。
午前 8 時 00 分の完全データベース バックアップは復元しないでください。 代わりに、最新の午後 6 時 00 分の完全データベース バックアップを復元し、8:00 P.M. log バックアップとログ末尾バックアップを適用します。
代替 2: 以前の完全データベース バックアップを使用してデータベースを復元する
注
この代替プロセスは、午後 6 時 00 分の完全データベース バックアップを使用できなくなる問題が発生した場合に役立ちます。 このプロセスは、午後 6 時の完全データベース バックアップからの復元よりも時間がかかります。
障害発生時点で現在アクティブなトランザクション ログのログ末尾バックアップを作成します。
午前 8 時の完全データベース バックアップを復元し、4 つのトランザクション ログ バックアップをすべて順番に復元します。 これにより、完了したすべてのトランザクションが午後 9 時 45 分までロールフォワードされます。
この代替方法では、一連の完全データベース バックアップ全体でトランザクション ログ バックアップのチェーンを維持することで提供される冗長セキュリティが指摘されます。
注
場合によっては、トランザクション ログを使用して、特定の時点にデータベースを復元することもできます。 詳細については、「 SQL Server データベースを特定の時点に復元する (完全復旧モデル)」を参照してください。
関連タスク
トランザクション ログ バックアップを適用するには
復旧ポイントに復元するには
SqlRestore (SMO)
WITH NORECOVERY を使用してバックアップを復元した後にデータベースを復旧するには