从.bak文件恢复sql server无法获取独占访问权限

baa*_*roz 16 sql sql-server backup

我试图使用bak文件恢复我的SQL

我收到了错误

由于数据库正在使用,因此无法获得独占访问权限

我试过了

USE [master]
ALTER DATABASE myDB
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
Run Code Online (Sandbox Code Playgroud)

并运行查询

USE [master] RESTORE DATABASE  myDB
   FROM DISK = 'C:\MyDatabase.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 10
Run Code Online (Sandbox Code Playgroud)

我也尝试从恢复向导得到相同的结果.

由于数据库正在使用,因此无法获得独占访问权限.

MAS*_*MAS 19

方法1

    declare @sql as varchar(20), @spid as int

    select @spid = min(spid)  from master..sysprocesses  where dbid = db_id('<database_name>')  and spid != @@spid    

    while (@spid is not null)

    begin

    print 'Killing process ' + cast(@spid as varchar) + ' ...'

    set @sql = 'kill ' + cast(@spid as varchar)

exec (@sql)

select 

    @spid = min(spid)  

from 

    master..sysprocesses  

where 

    dbid = db_id('<database_name>') 

    and spid != @@spid
 end 

 print 'Process completed...'
Run Code Online (Sandbox Code Playgroud)

方法2

  alter database database_name
  set offline with rollback immediate
  alter database database_name
  set online
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了方法2,它对我有用. (2认同)

小智 8

不需要编写任何查询来解决此问题.我有几次同样的问题并通过这种方法解决它:当你恢复数据库时

  1. 转到还原数据库窗口中的选项选项卡
  2. 检查(覆盖现有数据库(WITH REPLACE))
  3. 检查(关闭与目标数据库的现有连接)
  4. 然后单击确定

恢复数据库正在启动...

  • 这个答案让我走上了正轨。在我的恢复选项中,我还必须取消选中“恢复前尾部日志备份”。我的情况是:我有一个生产数据库备份,我想在我们的开发数据库上恢复它,以使用产品数据有效地“刷新”我们的开发数据库。我不在乎在我们的开发数据库上保留任何内容。唯一检查的选项应该是上面的 #2 和 #3。其他一切都必须不受检查。 (3认同)

小智 7

任何人都有上面列出的问题,并且没有任何建议有效.只需关闭'选项'下的Taillog备份..

设置(或离开)此选项将尝试获取源数据库本身的尾部日志(即使您的还原源只是一个文件).因此,如果源数据库正在使用(如果您正在执行生产数据库的副本通常就是这种情况),则还原将失败.