我已将我的数据库设置为受限用户模式。我正在尝试从备份中恢复它,但出现以下错误:
无法获得独占访问权限,因为数据库正在使用中。
在单用户模式下得到同样的错误
连接了一个进程,但是每次我将其终止时,都会连接一个具有不同 SPID 的进程。这是预期的还是问题所在(我不是 DBA!)
我试过了:
- 谷歌搜索解决方案:)
- 分离数据库(失败并出现关于数据库锁定的类似错误)
我很紧张放弃数据库(它只是 UAT,但仍然......)
接下来是什么?
我已将我的数据库设置为受限用户模式。我正在尝试从备份中恢复它,但出现以下错误:
无法获得独占访问权限,因为数据库正在使用中。
在单用户模式下得到同样的错误
连接了一个进程,但是每次我将其终止时,都会连接一个具有不同 SPID 的进程。这是预期的还是问题所在(我不是 DBA!)
我试过了:
我很紧张放弃数据库(它只是 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...'
并且此脚本成功使数据库脱机,但通过 UI 执行此操作失败 - 虽然仍然没有为我解决问题 - 仍然是相同的恢复问题:
alter database LesMillsCmsUat set offline with rollback immediate
alter database LesMillsCmsUat
set online
go
最主要的是我不得不停止 Umbraco 使用的应用程序池(这是 DB 的用途),就在此之前,我还根据 Curt 的建议停止并重新启动了 DB 服务器(现在请记住,这已经解决了类似的问题过去对我来说是个问题,尽管我不确定这对我的情况是否真的有任何影响并且可能没有必要)。
推理:显然 Umbraco 一直在连接。通常将数据库设置为受限用户是因为 Umbraco 应用程序使用的帐户没有提升权限才能连接到数据库,所以我不明白为什么我需要停止池。如果有人可以提供原因,这就是我一直在寻找的“原因”,我会将其标记为答案。