1.数据库属性要用完全模式或者大容量日志模式
2.要有一个原始备份。加日志备份。
/* 使用STANDBY模式的完整还原流程 1. 首先还原完整备份(保持不变) sql RESTORE DATABASE [bhgl4] FROM DISK = N'K:\temp\y-09.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10 2. 应用第一个事务日志(使用STANDBY) sql RESTORE LOG [bhgl4] FROM DISK = N'K:\temp\yxw\20251009-235229.bak' WITH FILE = 658, STANDBY = N'K:\temp\yxw\standby_undo1.dat', NOUNLOAD, STATS = 10 3. 应用第二个事务日志到指定时间点(使用STANDBY) sql RESTORE LOG [bhgl4] FROM DISK = N'K:\temp\yxw\20251010-003336.bak' WITH FILE = 658, STANDBY = N'K:\temp\yxw\standby_undo2.dat', NOUNLOAD, STATS = 10, STOPAT = N'2025-10-10T15:07:28' 现在关键部分来了:4. 检查数据是否正确 此时数据库处于STANDBY模式,您可以查询数据:sql -- 数据库处于只读状态,可以查询 SELECT * FROM bhgl4.dbo.您的表 WHERE ... 5. 如果时间点不对,继续应用下一个日志文件 情况A:如果第二个日志的STOPAT时间点不对,继续应用第三个日志sql -- 继续应用第三个日志文件(仍然使用STANDBY) RESTORE LOG [bhgl4] FROM DISK = N'K:\temp\yxw\20251010-010926.bak' WITH FILE = 658, STANDBY = N'K:\temp\yxw\standby_undo3.dat', NOUNLOAD, STATS = 10 情况B:如果还想在第三个日志中指定新的时间点sql -- 在第三个日志中指定新的STOPAT时间点 RESTORE LOG [bhgl4] FROM DISK = N'K:\temp\yxw\20251010-010926.bak' WITH FILE = 658, STANDBY = N'K:\temp\yxw\standby_undo3.dat', NOUNLOAD, STATS = 10, STOPAT = N'2025-10-10T15:20:00' -- 新的时间点 6. 最终确定恢复 当找到正确的时间点后,完成恢复:sql -- 完成恢复,数据库变为可读写 RESTORE DATABASE [bhgl4] WITH RECOVERY*/--查看备份的时间点 --RESTORE HEADERONLY FROM DISK = N'K:\temp\yxw\20251010-154146 .bak' WITH FILE =658, NOUNLOAD --原始的完整备份 RESTORE DATABASE [bhgl4] FROM DISK = N'K:\temp\y-09.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10 --接近时间点的增量备份。其实就是日志 RESTORE LOG [bhgl4] FROM DISK = N'K:\temp\yxw\20251009-235229.bak' WITH FILE = 658, NORECOVERY, NOUNLOAD, STATS = 10--还原怀疑出错的地方 然后用 STANDBY 的方式。 加时间点,一个一个时间还原加去然后查数据。时间只能看顺序还原,不能逆向(比如还原到 10:23:10,就不能再还原到 10:22:00) RESTORE LOG [bhgl4] FROM DISK = N'K:\temp\yxw\20251010-150414.bak' WITH FILE = 658, STANDBY = N'K:\temp\yxw\standby_undo1.dat', NOUNLOAD, STATS = 10 --STANDBY 的文件名不要重复--恢复到时间点后就可以查数据了。 --确定好就恢复状态 RESTORE DATABASE [bhgl4] WITH RECOVERY