我如何恢复到两天前做的SQL备份?

数据库灾难只发生在其他人身上,对吗? 对?!?

我相信这是从计算机历史开始以来从未发生过的,但是,不pipe信不信,我遇到了数据库还原的问题。 也许你可以帮忙。 我希望这真的很简单。

问:如何恢复到两天前的备份?

GUI似乎没有工作,我找不到正确的TSQL手动。

细节

我在2009年11月9日星期一上午9:30左右使用SQL Server Management Studio使用以下选项备份了SQL Server 2005数据库:

恢复模式:简单
备份types:完整
备份组件:数据库
过期后:0天后失效
目的地:磁盘

我想恢复这个备份,但我遇到了一些问题。

尝试#1:使用GUI

在“还原数据库”对话框中使用以下选项:

到数据库:[MyDatabaseName]到一个时间点:'11 / 9/2009 12:00:00 AM 0毫秒从数据库:[MyDatabaseName]覆盖现有的数据库:true。 恢复状态:通过回滚使数据库保持可用状态

错误消息:由于数据库正在使用,无法获得独占访问权限。 我尝试设置为single_user,重新启动SQL Server服务等。永远不可能知道如何终止现有的连接在恢复数据库GUI。

尝试#2:使用TSQL

ALTER DATABASE [MyDatabaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO

ALTER DATABASE [MyDatabaseName] SET RECOVERY FULL GO

RESTORE DATABASE [MyDatabaseName] FROM DISK = N'F:\ DatabaseLocation \ BackupName.bak'WITH FILE = 1,NOUNLOAD,RECOVERY,REPLACE,STATS = 10,STOPAT ='2009年11月9日'

消息:此备份集包含在指定时间点之前logging的logging。 数据库正处于恢复状态,以便可以执行更多的前滚。

我已经尝试了REPLACE,NORECOVERY,RECOVERY等上面的不同版本。我是否需要知道备份时间到精确的毫秒? 如果是这样,我怎么find?

您无法将时间恢复到SIMPLE恢复数据库。 只有FULL或BULK恢复模式数据库才能恢复到指定的时间点。

有关特定语法,请参阅恢复到特定时间点 (该选项在RESTORE LOG时间指定,而不是在RESTORE DATABASE时间指定)。 另请参阅在备份中将数据库还原到点以获取有关使用STOP AT的更多通用点。

听起来你已经修复了,但是我在StackOverflow上input了我的答案,然后发现qustion已经closures并移到了这里,所以这里是我在T_SQL中正常的数据库恢复命令序列,如果你需要的话

你将需要使用

 RESTORE FILELISTONLY FROM DISK ='X:\ path \ MyBackupFilename.BAK'

以获取逻辑设备的名称(如果恢复到备份所在的同一数据库,则这些名称将保持不变),但否则可能会不同)

 USE master  - (正在恢复时不能坐在数据库中)
走

 -  ALTER DATABASE MyDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
 ALTER DATABASE MyDatabase SET OFFLINE WITH ROLLBACK IMMEDIATE
走

 RESTORE DATABASE MyDatabase
     FROM DISK ='X:\ path \ MyBackupFilename.BAK'
     WITH
        更换,
         NORECOVERY, - 允许恢复更多的DIFF / TLogs
         STATS = 10, - 显示进度(每10%)
     MOVE'MyLogicalName_data'TO'X:\ MSSQL \ path \ MyDatabaseFile.mdf', 
     MOVE'MyLogicalName_log'TO'X:\ MSSQL \ path \ MyDatabaseFile.ldf'
走

 - 如果需要恢复以后的DIFF备份(在完全备份之后进行):

 RESTORE DATABASE MyDatabase
     FROM DISK ='X:\ path \ MyDatabaseBackup_yyyymmdd_hhmm_Diff.BAK'
     WITH
         STATS = 10, - 显示进度(每10%)
         NORECOVERY  - 允许恢复更多TLog
走


 - 额外的TRANSACTION LOGs的可选恢复
 - 按顺序为每个事务日志重复以下步骤

 RESTORE LOG MyDatabase
     FROM DISK ='X:\ path \ MyDatabaseBackup_yyyymmdd_hhmm_Trans.BAK'
     WITH
         NORECOVERY  -  Allo恢复更多TLogs
走

 - 完成恢复所有备份文件“激活”数据库
使用RECOVERY恢复数据库MyDatabase
走

 -  **如果**数据库是用不同的逻辑名称“重命名”那些现在
 ALTER DATABASE MyDatabase修改文件 
 (NAME ='LogicalNameFromBackup_data',NEWNAME ='NewLogicalName_data')
走
 ALTER DATABASE MyDatabase修改文件 
 (NAME ='LogicalNameFromBackup_log',NEWNAME ='NewLogicalName_log')
走

 - 如果在单个/限制用户的数据库中进行备份 
 - 将访问权限改回“正常”
 -  ALTER DATABASE MyDatabase SET MULTI_USER,READ_WRITE WITH ROLLBACK IMMEDIATE
走

如果数据库已恢复到不同的服务器上,则还需要将数据库用户与服务器login名重新同步。

您可以从GUI中轻松地删除现有的连接。 只要去pipe理 – >活动监视器。 按数据库进行sorting,然后右键单击并杀死那些你想要恢复的数据库。

[编辑]

这一切都假定您的帐户不是默认使用相同的数据库,当然! 如果是这样,你会想改变它,然后重新连接。

你有没有试过

1-停止Sql服务器。

2-删除或移动到另一个崩溃的数据库(.mdf和.log)的物理文件。

3-启动Sql Server。

4-负载备份

你从哪个数据库运行恢复? 确保它不是你正在还原的数据库,而且在Sql Management Studio中没有任何活动的查询。