19

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

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

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

4

5 回答 5

20

方法一

    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

于 2014-01-09T07:48:07.277 回答
16

无需编写任何查询即可解决此问题。我多次遇到同样的问题并通过这种方法解决它:当您恢复数据库时

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

正在恢复数据库...

于 2016-09-27T07:09:53.630 回答
12

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

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

于 2017-07-04T08:41:21.993 回答
0

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

于 2017-03-09T00:51:54.150 回答
0

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

于 2020-01-28T22:46:24.043 回答