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