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