我备份了一个数据库:
BACKUP DATABASE MyDatabase TO DISK = 'MyDatabase.bak' WITH INIT --overwrite existing
然后尝试恢复它:
RESTORE DATABASE MyDatabase FROM DISK = 'MyDatabase.bak' WITH REPLACE --force restore over specified database
现在数据库卡在恢复状态。
有人推测这是因为备份中没有日志文件,需要使用以下方式前滚:
RESTORE DATABASE MyDatabase WITH RECOVERY
当然,除了失败:
Msg 4333, Level 16, State 1, Line 1 The database cannot be recovered because the log was not restored. Msg 3013, Level 16, State 1, Line 1 RESTORE DATABASE is terminating abnormally.
在灾难性情况下,您想要的正是无法进行的恢复。
备份包含数据和日志文件:
RESTORE FILELISTONLY FROM DISK = 'MyDatabase.bak' Logical Name PhysicalName ============= =============== MyDatabase C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase.mdf MyDatabase_log C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\MyDatabase_log.LDF
您需要将该WITH RECOVERY选项与您的数据库RESTORE命令一起使用,以使您的数据库在线作为恢复过程的一部分。
WITH RECOVERY
RESTORE
当然,这仅适用于您不打算恢复任何事务日志备份的情况,即您只希望恢复数据库备份然后能够访问数据库。
你的命令应该是这样的,
RESTORE DATABASE MyDatabase FROM DISK = 'MyDatabase.bak' WITH REPLACE,RECOVERY
使用 SQL Server Management Studio 中的还原数据库向导可能会获得更多成功。这样,您可以选择特定的文件位置、覆盖选项和 WITH Recovery 选项。