"SQLServer数据库正在使用,所以无法获得对数据库的独占访问权"的问题解决方法
SQLServer2008R2在还原数据库的时候报错,“因为数据库正在使用,所以无法获得对数据库的独占访问权。”,如下图:
出现该问题的原因已经很明确了,就是有其他用户还在连接着数据库,可以先尝试重启数据库,如果还是如此的话,可采用下面方法:
在master中创建一个存储过程,用来断开和数据库的所有链接:
USE [master]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--建一个存储过程,断开所有用户连接。
create proc [dbo].[killspid] (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status<>-1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
GO
断开和库的所有链接:
use master
exec killspid '出问题的数据库名'
实际场景中可以开启防火墙,只允许本机访问数据库,然后执行这个存储过程即可正常进行各种操作;
不建议使用更改数据库为单用户模式,仍然会有类似提示,如下图:
Tag标签:「防火墙 独占 访问权」更新时间:「2021-11-15 11:23:06」阅读次数:「939」