数据库 'xxx' 已打开,并且一次只能有一个用户访问

早上过来准备将服务器的数据库分离,因为这个服务器的数据已经不在需要,但是在分离的时候发现出现如下错误:数据库 ‘xxx’ 已打开,并且一次只能有一个用户访问,后来查看数据库的选项,果然被设置为了[SINGLE_USER],导致无法分离,估计是昨晚在备份数据库之后不知道如何的就设置为了[SINGLE_USER]吧,现在需要将其设置为多用户的模式,在设置多用户模式的时候可能会因为还有其它进程的连接导致设置无法进行,所以需要杀掉所有连接的进程。使用如下SQL语句即可。

方法一:

USE master; 
GO 
DECLARE @SQL VARCHAR(3000);
SET @SQL = '';
SELECT @SQL = @SQL+'; KILL ' + RTRIM(SPID)
FROM [sys].[sysprocesses] AS sps
WHERE [sps].[dbid] = DB_ID('test'); 
SET @SQL = SUBSTRING(@SQL, 2, LEN(@SQL));
EXEC(@SQL);
GO

方法二:

DECLARE @DBName SYSNAME;
SET @DBName = 'BI_Monitor'; --这个是要删除的数据库库名    
     
DECLARE @KSQL NVARCHAR(1000)
DECLARE tb CURSOR LOCAL
FOR  
SELECT
    KSQL = 'KILL ' + CAST([sps].[spid] AS NVARCHAR(10))
FROM [sys].[sysprocesses] AS sps
WHERE dbid = DB_ID(@DBName)--查询@DBName相关的线程
    
--循环杀掉要删除数据的相关线程
OPEN tb
FETCH NEXT FROM tb INTO @KSQL
WHILE @@FETCH_STATUS = 0  
BEGIN  
    EXECUTE(@KSQL);
    FETCH NEXT FROM tb INTO @KSQL
END 
CLOSE tb    
DEALLOCATE tb

最后再将相应数据库设置为多用户模式即可。

ALTER DATABASE [test] SET MULTI_USER;--设置为多用户模式

    原文作者:xiongnanbin
    原文地址: https://blog.csdn.net/xiongnanbin/article/details/25281673
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞