获得数据库的排它访问权

异常:使用SQL语句恢复备份数据库出现错误:因为数据库正在使用,所以未能获得对数据库的排它访问权。 RESTORE DATABASE 操作异常终止

解决方案:

查询分析器中,用下面的代码来处理

/*
断开所有用户打开的连接
*/
USE master
go

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[p_killspid]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
	DROP PROCEDURE [dbo].[p_killspid]
GO

CREATE PROC p_killspid
	@dbname sysname --要关闭进程的数据库名
AS  
	DECLARE @s nvarchar(1000)
	
	DECLARE tb CURSOR LOCAL FOR
	SELECT s='kill '+CAST(spid AS VARCHAR)
	FROM master..sysprocesses 
	WHERE dbid=db_id(@dbname)

	OPEN tb 
	FETCH NEXT FROM tb INTO @s
	WHILE @@fetch_status=0
	BEGIN
		EXEC (@s)
		FETCH NEXT FROM tb INTO @s
	END
	CLOSE tb
	DEALLOCATE tb
GO

--用法  
EXEC p_killspid  'dbname'

Tag标签: SQL 管理 事务
发表于 2010-01-27 15:20:30 收藏 所属分类: 数据库 网摘收藏
相关文章: