微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – 无法在sql server中恢复数据库(single_user)

我正在尝试在我的sql server 2005 express版中恢复数据库.我知道要恢复数据库,我需要让它成为单个用户.我给这个命令让它成为单个用户
USE [master]
ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK IMMEDIATE

此命令正确执行,我甚至可以在此数据库的对象资源管理器中看到一个小图像,显示在这是单用户.

现在我按照这些步骤尝试恢复数据库
– >右键单击数据库和任务,然后恢复数据库.我正在选择备份文件所在的路径,然后单击“还原”.

但我仍然得到这个错误“因为数据库正在使用中无法获得独占访问权限(microsoft.sqlserver.smo).我错过了什么.我用google搜索它,所有网站都建议数据库需要在单个用户中模式,没有别的.

我没有尝试分离和附加数据库方法.我以前从未这样做过,想知道这样做是否安全.

编辑:谢谢你的答案.两个人都建议我回答相同,所以我选择了一个答案.

我甚至选择从选项覆盖现有数据库.

解决方法

首先,最好备份和恢复而不是分离和附加.

其次,你用来将数据库设置为SINGLE_USER的会话最有可能是当你尝试运行恢复时仍然拥有它的那个(因为你正在使用GUI,它在它自己的会话下连接所以它无法连接获得访问权限).

要么将还原作为文本命令,要么将查询窗口切换为首先使用其他数据库,例如master.或者您可以关闭查询窗口,使其不再连接.

您始终可以通过master.dbo.sysprocesses中的select *来查看连接的人员.

更新

假设您要还原的数据库已经存在,并且如果您在磁盘上有一个备份文件(其中没有多个备份)并且在还原完整备份后无需还原日志文件,则通过脚本进行还原是超级,超级简单:

RESTORE DATABASE dbname FROM disK = 'C:\path\dbnameBackup.bak';

学习这种语法将使您的生活更轻松,因为当您设置SINGLE_USER时,您已经处于连接的唯一会话中.另外,我发现键入restore命令比使用GUI更快,我喜欢控件.重复这一点最终会在你的脑海中巩固它,你不必再查找语法了.

恢复日志文件甚至都不困难.只需要记住一件简单的事情,WITH norECOVERY:

RESTORE DATABASE dbname FROM disK = 'C:\path\dbnameBackup.bak' WITH norECOVERY;
RESTORE LOG dbname FROM disK = 'C:\path\dbnameBackup1.log' WITH norECOVERY;
RESTORE LOG dbname FROM disK = 'C:\path\dbnameBackup2.log' WITH norECOVERY;
RESTORE LOG dbname FROM disK = 'C:\path\dbnameBackup3.log' WITH norECOVERY;
... 4 5 6 7 and so on
RESTORE LOG dbname FROM disK = 'C:\path\dbnameBackupX.log' WITH RECOVERY;

那里……你很容易恢复你的日志文件.您甚至可以使用WITH STOPAT恢复到准确的时间点!此外,如果您忘记并意外地使用norECOVERY提交上一个日志恢复语句,那么您只需发出RESTORE DATABASE dbname WITH RECOVERY;执行最后的步骤以使数据库可用(回滚未提交的事务等).

原文地址:https://www.jb51.cc/mssql/76932.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐