此命令正确执行,我甚至可以在此数据库的对象资源管理器中看到一个小图像,显示现在这是单用户.
现在我按照这些步骤尝试恢复数据库
– >右键单击数据库和任务,然后恢复数据库.我正在选择备份文件所在的路径,然后单击“还原”.
但我仍然得到这个错误“因为数据库正在使用中无法获得独占访问权限(microsoft.sqlserver.smo).我错过了什么.我用google搜索它,所有网站都建议数据库需要在单个用户中模式,没有别的.
我没有尝试分离和附加数据库方法.我以前从未这样做过,想知道这样做是否安全.
编辑:谢谢你的答案.两个人都建议我回答相同,所以我选择了一个答案.
我甚至选择从选项覆盖现有数据库.
解决方法
其次,你用来将数据库设置为SINGLE_USER的会话最有可能是当你尝试运行恢复时仍然拥有它的那个(因为你正在使用GUI,它在它自己的会话下连接所以它无法连接获得访问权限).
要么将还原作为文本命令,要么将查询窗口切换为首先使用其他数据库,例如master.或者您可以关闭查询窗口,使其不再连接.
您始终可以通过master.dbo.sysprocesses中的select *来查看连接的人员.
更新
假设您要还原的数据库已经存在,并且如果您在磁盘上有一个备份文件(其中没有多个备份)并且在还原完整备份后无需还原日志文件,则通过脚本进行还原是超级,超级简单:
@H_502_2@RESTORE DATABASE DBName FROM DISK = 'C:\path\DBNameBackup.bak';学习这种语法将使您的生活更轻松,因为当您设置SINGLE_USER时,您已经处于连接的唯一会话中.另外,我发现键入restore命令比使用GUI更快,我喜欢控件.重复这一点最终会在你的脑海中巩固它,你不必再查找语法了.
恢复日志文件甚至都不困难.只需要记住一件简单的事情,WITH NORECOVERY:
@H_502_2@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;执行最后的步骤以使数据库可用(回滚未提交的事务等).