Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server备份还原问题?_Sql_Sql Server 2005 - Fatal编程技术网

SQL Server备份还原问题?

SQL Server备份还原问题?,sql,sql-server-2005,Sql,Sql Server 2005,好的,所以我有一点问题-我在我的SQL Server上执行了一些代码,但没有意识到我没有选择WHERE位。当然,当我看到“608行受影响”而不是“1行受影响”时,我有点害怕 幸运的是,我保存了一个备份,但由于某些原因,我遇到了一些问题。现在,我关闭了服务器,所以我知道它没有被任何人使用,但它给了我以下错误 “服务器“myserver”的还原失败 System.Data.sqlclient.sqlerror:无法获得独占访问权限 因为数据库正在使用。(Microsoft.SqlServer.Smo

好的,所以我有一点问题-我在我的SQL Server上执行了一些代码,但没有意识到我没有选择WHERE位。当然,当我看到
“608行受影响”
而不是
“1行受影响”
时,我有点害怕

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

“服务器“myserver”的还原失败

System.Data.sqlclient.sqlerror:无法获得独占访问权限 因为数据库正在使用。(Microsoft.SqlServer.Smo)

我看到了一些我应该使用的东西

Alter Database Databases
SET SINGLE_USER WITH ROLLBACK IMMEDIATE

RESTORE DATABASE PRODUCT
FROM DISK = ''
但是我对这个代码有三点保留。首先,我完全不确定如何重新启用multi_用户。其次,我不知道程序在哪里存储备份。第三,这个SQL有点超出我的理解力——老实说,我对这门语言还比较陌生,所以我不确定这会对事情产生什么影响

有人能回答我的问题吗?

吓人

好的,有些事情需要检查:

  • 确保您是唯一连接到服务器的人
  • 确保没有其他应用程序、web服务器、应用程序服务器等与数据库保持连接
  • 确保您的SQL manager没有打开数据库中的表或其他对象的窗口

  • 然后您应该能够在不使用单用户的情况下执行恢复。

    将数据库设置为单用户是正确的。完成恢复后,您将执行此操作

    alter database YourDb
    set multi_user
    

    至于.bak文件所在的位置,您必须在恢复之前找到它。

    我建议您使用不同的数据库名称恢复备份,而不是从备份中覆盖现有数据库。。。这样,您就可以同时拥有当前数据库和以前的数据库

    然后,您可以简单地编写一条update语句,仅从一个特定表恢复数据,而不是重置整个数据库

    编辑:具体情况取决于您的环境,但恢复过程如下所示:

    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'
    

    然后update语句也将基于您的特定表…

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

    在数据库上单击任务->Takeffline,当备份成功时,执行相同的操作,但将备份置于联机状态
    然后尝试恢复您的数据库

    我实际上关闭了服务器本身,这样除了我自己,没有人可以连接到它,唯一应该连接到它的程序是server management studio程序,所以我认为我在这方面做得很好。有没有关于如何做的示例?+1,这是一种更好的方法-不要删除剩下的唯一好数据,从而使问题更加复杂。虽然这是一个更好的答案,但我最终恢复了整个数据库,因为我还需要修复另外两个错误,备份捕获了所有错误。不过,谢谢!这些似乎对我有帮助。谢谢你的主意。尽管如此,离线似乎需要很长时间。