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

適用対象:SQL Server

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

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

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

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

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

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

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

    ヒント

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

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

復元操作を完了してデータベースを復旧すると、データベースの整合性を確保するために、復旧プロセスが実行されます。 復旧プロセスの詳細については、「復元と復旧の概要 (SQL Server)」を参照してください。

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

注意

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

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

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

時刻 イベント
午前 8 時 データベースの完全バックアップを作成するために、データベースをバックアップします。
正午 トランザクション ログのバックアップ。
午後 4 時 トランザクション ログのバックアップ。
午後 6 時 データベースの完全バックアップを作成するために、データベースをバックアップします。
午後 8 時 トランザクション ログのバックアップ。
午後 9 時 45 分 障害が発生します。

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

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

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

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

  2. 午前 8 時 00 分の完全データベース バックアップは復元しないでください。 代わりに、最新の午後 6 時 00 分の完全データベース バックアップを復元し、午後 8 時 00 分のログ バックアップとログ末尾のバックアップを適用します。

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

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

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

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

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

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

関連作業

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

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

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

関連項目

トランザクション ログ (SQL Server)
SQL Server トランザクション ログのアーキテクチャと管理ガイド