阿赛·游梦鱼·郭言赛·阿赛工作室
技术分类
推荐技术
近期热门技术

快速断开当前数据库的所有连接的方法

  •  字体:
  • 以前我喜欢执行这个脚本,然后当要断开所有连接的时候就执行一下这个脚本,但是当我重装SQLSERVER的时候,又要在代码库里

    找到这个脚本执行觉得很不方便,实际上分离数据库也能够断开所有连接

    复制代码
     1 USE master
     2 GO
     3 SET ANSI_NULLS ON
     4 SET QUOTED_IDENTIFIER ON
     5 go
     6 
     7 ALTER PROC [dbo].[Sp_KillAllProcessInDB] @DbName VARCHAR(100)
     8 AS 
     9     IF DB_ID(@DbName) = NULL 
    10         BEGIN
    11             PRINT 'DataBase dose not Exist'
    12         END
    13     ELSE 
    14         BEGIN
    15             DECLARE @killspId VARCHAR(30)
    16             DECLARE TmpCursor CURSOR
    17             FOR
    18                 SELECT  'Kill ' + CONVERT(VARCHAR, spid) AS spId
    19                 FROM    master..SysProcesses
    20                 WHERE   DB_NAME(dbid) = @DbName
    21                         AND spid <> @@spid      --终止不是当前进程的进程(不等于当前进程)
    22                         AND dbid <> 0           --数据库ID不是0
    23             OPEN TmpCursor
    24             FETCH NEXT FROM TmpCursor
    25 
    26 INTO @killspId      --select into  @killspId
    27             WHILE @@FETCH_STATUS = 0 
    28                 BEGIN
    29                     EXEC (@killspId)
    30                     FETCH NEXT FROM TmpCursor
    31 INTO @killspId
    32 
    33                 END
    34 
    35             CLOSE TmpCursor
    36             DEALLOCATE TmpCursor
    37         END
    38        
    39        
    40 --exec Sp_KillAllProcessInDB '要访问的数据库'
    复制代码

    但是今晚我发现其实分离数据库更快,不过唯一不方便的地方是,分离数据库之后,你需要重新附加数据库

    点击“确定”就OK了,所有连接都断开

    不过,当数据库中的数据文件或者事务日志文件比较多的时候,不像我这样,只有一个数据文件和一个事务日志文件

    附加的时候就要写sql语句指定数据文件和日志文件的位置了

    复制代码
     1 --语法
     2 EXEC [sys].[sp_attach_db] @dbname = NULL, -- sysname
     3     @filename1 = N'', -- nvarchar(260)
     4     @filename2 = N'', -- nvarchar(260)
     5     @filename3 = N'', -- nvarchar(260)
     6     @filename4 = N'', -- nvarchar(260)
     7     @filename5 = N'', -- nvarchar(260)
     8     @filename6 = N'', -- nvarchar(260)
     9     @filename7 = N'', -- nvarchar(260)
    10     @filename8 = N'', -- nvarchar(260)
    11     @filename9 = N'', -- nvarchar(260)
    12     @filename10 = N'', -- nvarchar(260)
    13     @filename11 = N'', -- nvarchar(260)
    14     @filename12 = N'', -- nvarchar(260)
    15     @filename13 = N'', -- nvarchar(260)
    16     @filename14 = N'', -- nvarchar(260)
    17     @filename15 = N'', -- nvarchar(260)
    18     @filename16 = N'' -- nvarchar(260)
    复制代码
    复制代码
     1 --指定文件的位置
     2  EXEC [sys].[sp_attach_db] @dbname = DLGPOS, -- sysname
     3      @filename1 = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\DLGPOS.mdf', -- nvarchar(260)
     4      @filename2 = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\DLGPOS_1.ldf' -- nvarchar(260)
     5 
     6  ----------------------------------------------
     7  --或者如果数据文件和日志文件超过16个,建议使用下面这个语句
     8  CREATE DATABASE DLGPOS FOR ATTACH 
     9  on --数据文件   
    10  (   
    11    name = '', --数据文件逻辑名   
    12    filename = '',--数据文件存放路径   
    13    size = 1MB,--初始大小   
    14    maxsize = 10MB,--最大大小   
    15    filegrowth = 1MB--增长速度   
    16  )   
    17  log on --日志文件   
    18  (   
    19    name = '', --日志文件逻辑名   
    20    filename = '',--日志文件存放路径   
    21    size = 1MB,--初始大小   
    22    maxsize = 10MB,--最大大小   
    23    filegrowth = 1MB--增长速度   
    24  )
    复制代码

     

    -----------------------------------------华丽的分割线-----------------------------------------
    看来用GUI还不能解决问题,最后还是使用潇湘隐者大侠的方法

    复制代码
    1 USE master
    2 GO
    3 ALTER DATABASE [GPOSDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    4 GO
    5 --查看是否还有用户连接
    6 SELECT * FROM sys.[sysprocesses] WHERE DB_NAME([dbid])='gposdb'
    7 GO
    8 ALTER DATABASE [GPOSDB] SET MULTI_USER 
    9 GO
    复制代码

     

    虽然都是利用SQL语句,但是他的方法很简单,4句话就可以断开数据库所有连接了!!

    再次感谢潇湘隐者大侠提供的方法!!

    Powered by eesai.Com ©  2017  阿赛工作室 All Rights Reserved
    本网站由 阿赛工作室 提供源代码技术支持.  备案号:苏ICP备08114364号

    网站地图建议反馈MapRssXml回到顶部