Sql server 2008 Umbraco数据库的SQL server还原失败(无法获得独占访问权限)-进程不断连接

Sql server 2008 Umbraco数据库的SQL server还原失败(无法获得独占访问权限)-进程不断连接,sql-server-2008,connection,restore,Sql Server 2008,Connection,Restore,我已将数据库设置为受限用户模式。我正在尝试从备份还原它,但出现以下错误: 无法获得独占访问权限,因为数据库正在使用中 在单用户模式下获得相同的错误 有一个进程连接,但是每次我关闭它时,一个具有不同SPID的进程连接。这是预期的还是问题所在(我不是DBA!) 我试过: 谷歌搜索解决方案:) 分离数据库(由于数据库上的锁出现类似错误而失败) 我很紧张要放弃DB(这只是UAT,但仍然…) 下一步是什么?此处介绍了正确的程序: 好的,这并不能解决我的问题,但是我遇到了这个问题,它可以杀死所有进程,这

我已将数据库设置为受限用户模式。我正在尝试从备份还原它,但出现以下错误:

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

在单用户模式下获得相同的错误

有一个进程连接,但是每次我关闭它时,一个具有不同SPID的进程连接。这是预期的还是问题所在(我不是DBA!)

我试过:

  • 谷歌搜索解决方案:)
  • 分离数据库(由于数据库上的锁出现类似错误而失败)
我很紧张要放弃DB(这只是UAT,但仍然…)


下一步是什么?

此处介绍了正确的程序:


好的,这并不能解决我的问题,但是我遇到了这个问题,它可以杀死所有进程,这是一个很好的脚本,因为它发现有两个进程连接在一起,并且在一次命中中就杀死了它们-也许它会对其他有相同问题的人起到同样的作用:

declare @sql as varchar(20), @spid as int
select @spid = min(spid)  from master..sysprocesses  where dbid = db_id('LesMillsCmsUat') 
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('LesMillsCmsUat') 
        and spid != @@spid
end 

print 'Process completed...'
该脚本成功地使DB脱机,但通过UI执行此操作失败-仍然无法为我解决问题-仍然存在相同的恢复问题:

alter database LesMillsCmsUat set offline with rollback immediate
alter database LesMillsCmsUat
set online
go

最重要的是我必须停止Umbraco使用的应用程序池(这就是DB的用途),就在这之前,我还根据Curt的建议停止并重新启动了DB服务器(请记住,这在过去为我解决了一个类似的问题,尽管我不确定这对我的情况是否真的有任何影响,并且可能没有必要)


推理:显然,Umbraco一直在连接。通常情况下,将数据库设置为受限用户是有效的,因为Umbraco应用程序使用的帐户没有提升的权限才能连接到数据库,所以我不明白为什么我需要停止池。如果有人能提供原因,这就是我一直在寻找的“原因”对于,我将把它标记为答案。

谢谢-这是不同的,它将DB设置为只读模式,但在restore@ChrisHalcrow如果你发布了你收到的准确的错误信息,也许会有所帮助。我已经经历了几十次这个过程,原因与你这么做的原因相同。也许还发生了其他事情:您也检查了错误日志吗?总是有最后的办法停止数据库服务器,但这也会影响其他数据库中的用户。。。