リストア前にログ末尾のバックアップを取得する (NORECOVERY / NO_TRUNCATE)
SQL Serverリストアと復旧コマンド
-- A) Healthy DB: back up the tail and put the DB into RESTORING (no new writes):
BACKUP LOG [Musteri]
TO DISK = N'D:\Backup\Musteri_tail.trn'
WITH NORECOVERY, CHECKSUM, INIT;
-- B) Damaged DB / data file lost, log file intact:
-- BACKUP LOG [Musteri]
-- TO DISK = N'D:\Backup\Musteri_tail_damaged.trn'
-- WITH NO_TRUNCATE, CONTINUE_AFTER_ERROR, INIT;
SELECT name, state_desc FROM sys.databases WHERE name = N'Musteri';概要
最後のログバックアップ以降に書き込まれたログ部分 (末尾) をバックアップする。これによりリストアチェーンが障害発生時点まで到達し、最後の数分間のトランザクションが失われない。
使用する場面
同じデータベースに上書きリストアする前、データファイルのディスクに障害が発生した場合、または移行の最終切り替え時に。
注意
NORECOVERY はデータベースを RESTORING 状態にし、ユーザーアクセスを終了させるため、誤ったデータベースで実行しない。ログ末尾のバックアップなしで WITH REPLACE によりリストアすると、最後のログバックアップ以降のトランザクションは完全に破棄される。NO_TRUNCATE で取得したバックアップには不完全なメタデータが含まれる場合があるため、リストア後に DBCC CHECKDB を実行する。SIMPLE 復旧モデルではログ末尾のバックアップは取得できない。