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

时间:2013-10-14 17:47:36

标签: sql sql-server backup

我正在尝试使用bak文件恢复我的sql

我收到错误

由于数据库正在使用中,无法获得独占访问

我试过

USE [master]
ALTER DATABASE myDB
SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

并运行查询

USE [master] RESTORE DATABASE  myDB
   FROM DISK = 'C:\MyDatabase.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 10

我也尝试从恢复向导中获得相同的结果。

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

5 个答案:

答案 0 :(得分: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...'

方法2

  alter database database_name
  set offline with rollback immediate
  alter database database_name
  set online

答案 1 :(得分:8)

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

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

答案 2 :(得分:7)

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

设置(或离开)此选项将尝试获取源数据库本身的尾部日志(即使您的还原源只是一个文件)。因此,如果源数据库正在使用(如果您正在执行生产数据库的副本,那么恢复将失败。)

答案 3 :(得分:0)

当我尝试将生产备份还原到已经拥有数据库的开发服务器时,我遇到了这个问题。我想恢复为副本,我通过更改目标数据库名称来实现,但问题实际上是文件。默认情况下,它试图覆盖已存在的文件。我通过检查&#34;将所有文件重新定位到文件夹&#34;来解决了这个问题。在&#34;文件&#34;恢复对话框的页面并选择一个新目录,这样就不会发生文件冲突。

答案 4 :(得分:0)

以上解决方案均不适合我。 经过多次试验和错误后,我停止了SQL Server Browser,然后还原成功完成