Share via


トランザクション ログ バックアップの適用 (SQL Server)

このトピックは完全復旧モデルと一括ログ復旧モデルのみに関連します。

このトピックでは、SQL Server データベースの復元の一環として行う、トランザクション ログ バックアップの適用について説明します。

このトピックの内容

  • トランザクション ログ バックアップを復元するための要件

  • 復旧とトランザクション ログ

  • ログ バックアップを使用した障害発生時までの復元

  • 関連タスク

トランザクション ログ バックアップを復元するための要件

トランザクション ログ バックアップを適用するには、次の要件を満たしている必要があります。

  • 復元シーケンスに必要なログ バックアップの保持: 復元シーケンスを完了できるだけのログ レコードがバックアップされている必要があります。 復元シーケンスを開始する前に、必要なログ バックアップ (必要な場合はログ末尾のバックアップも含む) が用意されている必要があります。

  • 正しい復元順序: 先に、データベースの前回の完全バックアップまたは差分バックアップを復元する必要があります。 次に、その完全バックアップまたは差分バックアップの後に作成されたすべてのトランザクション ログを日時順に復元する必要があります。 このログ チェーン内のトランザクション ログ バックアップが失われたかまたは損傷している場合は、失われたトランザクション ログよりも前のトランザクション ログのみを復元できます。

  • データベースはまだ復旧されていない: データベースは、最後のトランザクション ログが適用されるまで復旧できません。 いずれかの中間トランザクション ログ バックアップを復元した後 (ログ チェーンが終わる前) にデータベースを復旧する場合、その時点以降にデータベースを復元するには、データベースの完全バックアップから復元シーケンス全体を再度開始する必要があります。

    ヒントヒント

    すべてのログ バックアップを復元することをお勧めします (RESTORE LOG database_name WITH NORECOVERY)。 最後のログ バックアップを復元した後、別の操作でデータベースを復旧します (RESTORE DATABASE database_name WITH RECOVERY)。

復旧とトランザクション ログ

復元操作を完了してデータベースを復旧すると、すべての不完全なトランザクションがロールバックされます。 これを元に戻すフェーズと呼びます。 データベースの整合性を復元するためにロールバックが必要です。 ロールバック後、データベースはオンラインになり、そのデータベースにそれ以上のトランザクション ログ バックアップを適用できなくなります。

たとえば、一連のトランザクション ログ バックアップに、実行時間が長いトランザクションが含まれているとします。 トランザクションの開始は最初のトランザクション ログ バックアップに記録されていますが、トランザクションの終了は 2 番目のトランザクション ログ バックアップに記録されています。 最初のトランザクション ログ バックアップには、コミットやロールバック操作は記録されていません。 最初のトランザクション ログ バックアップが適用されたときに復旧操作を実行すると、実行時間が長いトランザクションは不完全だと見なされ、そのトランザクションに関して最初のトランザクション ログ バックアップに記録されたデータ変更がロールバックされます。 SQL Server では、この時点より後で 2 番目のトランザクション ログ バックアップを適用することはできません。

注意

状況によっては、ログの復元中にファイルを明示的に追加できます。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

ログ バックアップを使用した障害発生時までの復元

次のような一連のイベントが発生したとします。

時刻

イベント

午前 8 時

データベースの完全バックアップを作成するために、データベースをバックアップします。

正午

トランザクション ログのバックアップ。

午後 4 時

トランザクション ログのバックアップ。

午後 6 時

データベースの完全バックアップを作成するために、データベースをバックアップします。

午後 8 時

トランザクション ログのバックアップ。

午後 9 時 45 分

障害が発生します。

注意

この一連のバックアップの例の詳細については、「トランザクション ログのバックアップ (SQL Server)」を参照してください。

午後 9時 45分の状態にデータベースを復元するには (障害の時点)、次の代替手順のいずれかを使用します。

代替手順 1: データベースの最新の完全バックアップを使用したデータベースの復元

  1. 障害発生時点にアクティブなトランザクション ログのログ末尾のバックアップを作成します。

  2. 午前 8 時に作成した データベースの完全バックアップは復元しません。 代わりに、より近い時刻の午後 6 時の データベースの完全バックアップを復元してから、午後 8 時の ログ バックアップとログ末尾のバックアップを適用します。

代替手順 2: データベースの以前の完全バックアップを使用したデータベースの復元

注意

この代替手順は、問題が生じて午後 6 時の データベースの完全バックアップが使用できない場合に役立ちます。 この方法では、午後 6 時のデータベースの完全バックアップからの 復元よりも処理に時間がかかります。

  1. 障害発生時点にアクティブなトランザクション ログのログ末尾のバックアップを作成します。

  2. 午前 8 時に作成した データベースの完全バックアップを復元し、4 つすべてのトランザクション ログ バックアップを順に復元します。 これにより、午後 9 時 45 分までに完了したすべてのトランザクションがロールフォワードされます。

    この代替手順は、一連のデータベースの完全バックアップにまたがるトランザクション ログ バックアップのチェーンを保持することにより、冗長性を伴うセキュリティが提供されることになります。

注意

場合によっては、トランザクション ログを使用して特定の時点までデータベースを復元することもできます。 詳細については、「SQL Server データベースを特定の時点に復元する方法 (完全復旧モデル)」を参照してください。

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連タスク

トランザクション ログのバックアップを適用するには

復旧ポイントまで復元するには

WITH NORECOVERY を使用してバックアップを復元した後、データベースを回復するには

[トップに戻る] リンクで使用される矢印アイコン[先頭に戻る]

関連項目

概念

トランザクション ログ (SQL Server)