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

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

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

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

但我仍然得到这个错误“因为数据库正在使用中无法获得独占访问权限(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;执行最后的步骤以使数据库可用(回滚未提交的事务等).

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03