【问题标题】:restore sql server from .bak file Exclusive access could not be obtained从 .bak 文件恢复 sql server 无法获得独占访问权限
【发布时间】:2013-10-22 08:40:48
【问题描述】:

我正在尝试使用 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

我也尝试过恢复向导,结果相同。

无法获得独占访问权限,因为数据库正在使用中。

【问题讨论】:

  • 有时我删除数据库,退出 SQL Management Studio,然后重新打开它,然后使用 Studio 界面从完整备份磁盘 sql 文件重新创建数据库...小心!!!
  • 确保没有在其他查询窗口中打开 MyDB。
  • 您的解决方案在这里stackoverflow.com/questions/15511895/…
  • 如果我得到这个错误怎么办 - 恢复一个不存在的数据库?我什至将数据库名称更改为荒谬的名称,并确保文件也是一些不存在的荒谬文件名 - SSMS 仍然告诉我数据库(显然甚至不存在)正在使用中。 编辑显然取消选中“备份尾日志...”有效。最初是如何启用的?我不知道。

标签: sql sql-server backup


【解决方案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...'

方法二

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

【讨论】:

  • 方法 2 失败,因为“ALTER DATABASE 失败,因为无法在数据库上放置锁”。我运行 sp_who2 来确定阻塞进程,然后 Kill 摆脱它,之后方法 2 对我有用。
【解决方案2】:

不需要编写任何查询来解决这个问题。 我多次遇到同样的问题并通过这种方法解决: 恢复数据库时

  1. 转到“还原数据库”窗口中的“选项”选项卡
  2. 检查(覆盖现有数据库(使用替换))
  3. 检查(关闭与目标数据库的现有连接)
  4. 然后点击确定

正在恢复数据库...

【讨论】:

  • 这个答案让我走上了正轨。在我的还原选项中,我还必须取消选中“还原前的尾部日志备份”。我的情况是:我有一个生产数据库备份,我想通过我们的开发数据库进行恢复,以便使用产品数据有效地“刷新”我们的开发数据库。我不在乎在我们的开发数据库上保留任何东西。选中的唯一选项应该是上面的#2 和#3。必须取消选中其他所有内容。
【解决方案3】:

任何遇到上述问题的人,但没有任何建议有效。只需关闭“选项”下的 Taillog 备份即可。

设置(或保留)此选项将尝试获取源数据库本身的尾日志(即使您的还原源只是一个文件)。因此,如果源数据库正在使用中(如果您正在制作生产数据库的副本,通常会出现这种情况),则还原失败。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      以上解决方案都不适用于我。 经过多次尝试和错误,我停止了 SQL Server Browser,然后恢复成功完成

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-07
        • 1970-01-01
        • 2016-08-05
        • 2014-04-08
        • 1970-01-01
        • 1970-01-01
        • 2012-01-19
        相关资源
        最近更新 更多