还原前执行结尾日志备份(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 恢复模式下无法执行结尾日志备份。