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

来源:互联网 发布:java ssl 单向认证 编辑:程序博客网 时间:2024/06/06 00:28

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

方法一:

[sql] view plaincopyprint?
  1. USE master;   
  2. GO   
  3. DECLARE @SQL VARCHAR(3000);  
  4. SET @SQL = '';  
  5. SELECT @SQL = @SQL+'; KILL ' + RTRIM(SPID)  
  6. FROM [sys].[sysprocesses] AS sps  
  7. WHERE [sps].[dbid] = DB_ID('test');   
  8. SET @SQL = SUBSTRING(@SQL, 2, LEN(@SQL));  
  9. EXEC(@SQL);  
  10. GO  

方法二:

[sql] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. DECLARE @DBName SYSNAME;  
  2. SET @DBName = 'BI_Monitor'--这个是要删除的数据库库名      
  3.        
  4. DECLARE @KSQL NVARCHAR(1000)  
  5. DECLARE tb CURSOR LOCAL  
  6. FOR    
  7. SELECT  
  8.     KSQL = 'KILL ' + CAST([sps].[spid] AS NVARCHAR(10))  
  9. FROM [sys].[sysprocesses] AS sps  
  10. WHERE dbid = DB_ID(@DBName)--查询@DBName相关的线程  
  11.       
  12. --循环杀掉要删除数据的相关线程  
  13. OPEN tb  
  14. FETCH NEXT FROM tb INTO @KSQL  
  15. WHILE @@FETCH_STATUS = 0    
  16. BEGIN    
  17.     EXECUTE(@KSQL);  
  18.     FETCH NEXT FROM tb INTO @KSQL  
  19. END   
  20. CLOSE tb      
  21. DEALLOCATE tb  

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

[sql] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. ALTER DATABASE [test] SET MULTI_USER;--设置为多用户模式  

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 卡贴机网速很慢怎么办 苹果手机wifi慢怎么办 苹果wifi网速慢怎么办 苹果下载app慢怎么办 苹果手机突然很难充进电怎么办 winsxs误删了怎么办 cad打开有问号怎么办 网络连接超时怎么办 宽带 绝地求生很卡怎么办 吃鸡更新错误怎么办 iac账号封号了怎么办 凭证号不连续怎么办 我的世界延迟怎么办 黄金棒打不开怎么办 枪火游侠黑屏怎么办 老虎直播封了怎么办 网卡及驱动异常怎么办 电脑刺激战场卡怎么办 grub 文件兼容性错误怎么办 电脑程序不兼容怎么办 运行程序不兼容怎么办 usb驱动删了怎么办 电脑卡死 点不开怎么办 电脑开机找不到驱动程序怎么办 显卡关了黑屏怎么办 xp全部程序打不开怎么办 七彩凤电脑打不开怎么办 鹦鹉鱼不敢吃食怎么办 甘油三酯1.87怎么办 手机移动数据网打不开怎么办 苹果手机浏览器打不开没网怎么办 玩多人游戏很紧张怎么办 dnf容易掉线怎么办 qq名字改不了怎么办 手被打火机烧伤怎么办 无效的菜单句柄怎么办 网课被发现刷课怎么办 华硕笔记本玩游戏卡怎么办 手机玩游戏卡顿怎么办? 360n4s玩游戏卡怎么办 手机玩游戏卡死怎么办