2011-10-18 116 views
8

好的,所以我遇到了一些问题 - 我在SQL Server上执行了一些代码,但没有意识到我没有选择WHERE位。当然,当我看到"608 rows affected"而不是"1 row affected"时,我吓了一跳。SQL Server备份还原问题?

幸运的是,我保存了一个备份,但出于某种原因,我遇到了一些问题。现在,我把服务器关闭,所以我知道它没有被使用的任何人,但它给我下面的错误

"Restore failed for Server 'myserver'.

System.Data.sqlclient.sqlerror: Exclusive access could not be obtained because the database is in use. (Microsoft.SqlServer.Smo)"

我看到的东西,说我应该使用

Alter Database Databases 
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

RESTORE DATABASE PRODUCT 
FROM DISK = '' 

但我对这个代码有三个保留。首先,我完全不确定如何重新启用multi_user。其次,我不知道程序在哪里存储备份。第三,这个SQL稍微高于我的头脑 - 说实话,我对语言比较陌生,所以我不确定这会对事情产生什么影响。

任何人有任何答案我的麻烦?

回答

4

将数据库设置为单个用户是正确的。当你完成你恢复你执行这个

alter database YourDb 
set multi_user 

至于您的.bak文件所在,你必须事先找到它恢复。

+0

哈哈,应该对我很明显。谢谢。 – Kulahan

3

吓人。

好,有些事情要检查:

  1. 请确保您连接到服务器的唯一的人。
  2. 确保没有其他应用程序,Web服务器,应用程序服务器等与您的数据库保持连接。
  3. 确保您的SQL管理器没有打开窗口或数据库中的其他对象。

那么你应该能够做到没有单用户的东西恢复。

+0

其实我闭嘴关闭服务器本身,这样除了我自己之外,没有人能连接到它,唯一应该连接到它的程序将是服务器管理工​​作室程序,所以我认为我在那里很好。 – Kulahan

8

我可能会建议您不要覆盖备份中的现有数据库,而是使用不同的数据库名称恢复备份......这样您可以并排存储当前数据库和以前的数据库。

然后,您可以简单地编写一条更新语句来从该特定表中恢复数据,而不是重置整个数据库。

编辑:具体情况将取决于您的环境,但恢复将是这个样子:

restore database PRODUCT_OLD 
from disk='C:\PRODUCT.bak' 
with 
    move 'PRODUCT_Data' to 'C:\PRODUCT_OLD_Data.MDF', 
    move 'PRODUCT_Log' to 'C:\PRODUCT_OLD_Log.LDF' 

然后更新语句也将根据您的具体表...

+0

关于如何做到这一点的任何示例? – Kulahan

+0

+1,这是一个好得多的方法 - 不要通过删除您留下的唯一良好数据来增加您的问题。 –

+0

虽然这是一个更好的答案,但我最终还是恢复了整个数据库,因为还有一些我需要修复的错误,并且备份抓住了所有这些错误。不过谢谢! – Kulahan

0

转到活动监视器并查看用户是否仍然登录,然后使用相应的数据库终止该用户的进程。 然后继续恢复备份

6

权上的数据库点击任务 - >takeoffline,当它的成功做同样的事情,但把它联机 然后尝试还原数据库

+1

这些似乎帮助了我。感谢这个想法。虽然,离线似乎需要很长时间。 –

相关问题