分类: SQLServer
"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   '出问题的数据库名'

实际场景中可以开启防火墙,只允许本机访问数据库,然后执行这个存储过程即可正常进行各种操作;
不建议使用更改数据库为单用户模式,仍然会有类似提示,如下图:
还原报错


相关博文:

发表新评论