53

我尝试使用以下查询恢复数据库:

ALTER DATABASE [DatabaseName] SET Single_User WITH Rollback Immediate GO
RESTORE DATABASE DatabaseName FROM DISK = 'C:\DBName-Full Database Backup'
ALTER DATABASE [DatabaseName] SET Multi_User GO

但我没有恢复数据库,而是收到此错误:

消息 3159,第 16 层,状态 1,第 2 行

数据库“DatabaseName”的日志尾部尚未备份。BACKUP LOG WITH NORECOVERY如果日志包含您不想丢失的工作,则用于备份日志。使用语句的WITH REPLACEorWITH STOPAT子句RESTORE 仅覆盖日志的内容。消息 3013,级别 16,状态 1,线路 2RESTORE DATABASE异常终止。

4

5 回答 5

112

如果您不关心现有数据库或日志,您收到的错误消息会准确告诉您需要做什么。

RESTORE DATABASE DAtabaseName FROM DISK = 'C:\DBName-Full Database Backup' 
WITH REPLACE

在 SQL Server Management Studio(任务 > 还原)中,您可以WITH REPLACE通过打开左侧的“选项”页面并勾选“覆盖现有数据库”来添加选项。

于 2012-09-11T13:38:13.960 回答
29

对于那些使用Management Studio它的人应该可以:

在此处输入图像描述

于 2014-07-25T12:25:14.013 回答
7

或者,您可以将数据库恢复模型更改为Simple而不是Full.

  1. 右键单击数据库
  2. 选择properties->option
  3. 更改recovery modelsimple

那么你所写的应该可以正常工作而不会产生错误。

它对我很有效。

于 2014-10-29T16:40:08.400 回答
2

或者,您可以将数据库恢复模式更改为“简单”而不是“完整”。

右键单击数据库,选择“属性”,“选项”,将“恢复模型”更改为“简单”。

那么你所写的应该可以正常工作而不会产生错误。

于 2013-02-19T20:01:51.637 回答
1

如果日志包含您不想丢失的工作,请使用 BACKUP LOG WITH NORECOVERY 备份日志。

使用 RESTORE 语句的 WITH REPLACE 或 WITH STOPAT 子句仅覆盖日志的内容。

真的,这就是答案。就在那儿,在消息中。你想让我做什么?备份尾巴这样就不会丢失?替换没有备份的日志?你的来电。

于 2012-09-11T13:36:44.290 回答