Web design and hosting, database, cloud and social media solutions that deliver business results
  • 商务解决方案
  • 数据库咨询服务
    • 报告
      • Claytabase Server Disk IOPs Calculator
      • SQL代码备份
      • SQL打印机
    • 技术文章
      • SQL-Server
      • SQL Server 2008的维护计划
      • 使用SQL Server函数
      • 使用SQL Server日期
      • 使用SQL Server透视-取消透视
  • 网站设计
    • 怀特岛
    • 技术文章
      • ASP-NET
      • CSS
    • 网站安全
  • 产品展示
  • 社交媒体
  • 关于我们
    • 投资组合
    • 球队
      • 切斯特Copperpot
  • 学院
عربى (AR)čeština (CS)Deutsch (DE)English (EN-US)English (EN-GB)Español (ES)فارسی (FA)Français (FR)हिंदी (HI)italiano (IT)日本語 (JA)polski (PL)Português (PT)русский (RU)Türk (TR)中国的 (ZH)

存储过程将终止与所选数据库或服务器的所有连接

SQL存储过程将终止与选定数据库或服务器的所有连接,但调用该进程的进程除外。

介绍

有时您需要断开所有用户与数据库的连接,其中一个示例是“日志传送”复制。下面的代码在每20分钟更新一次的报表服务器上使用,因为还原任务需要以独占模式打开数据库。

下面的代码将接受一个数据库名称,因此只需编写一次即可并将其存储在master或Utility(如果已创建)数据库中。然后可以从任何其他过程中调用它,对于我们来说,是上面文档中完整的维护计划。

这是一个非常简单的存储过程,它仅获取活动连接的列表,并循环遍历每个连接,从而杀死进程和连接。

SQL Code

CREATE PROC maint.KillConnections(@database VARCHAR(50)) AS BEGIN
SET NOCOUNT ON;
DECLARE @spid INT
DECLARE @killstatement NVARCHAR(10)--Declare a cursor to select the users connected to the specified database
DECLARE c1 CURSOR FAST_FORWARD FOR SELECT request_session_id                    
FROM sys.dm_tran_locks
WHERE resource_type='DATABASE'
AND (DB_NAME(resource_database_id)=@database OR @database IS NULL)
OPEN c1
FETCH c1 INTO @spid
WHILE @@FETCH_STATUS= 0 BEGIN
      IF @@SPID<>@spid--Don't kill the connection of the user executing this statement
      BEGIN
            -- Construct dynamic sql to kill spid
            SET @killstatement ='KILL '+CAST(@spid AS VARCHAR(5))
            EXEC sp_executesql @killstatement
            PRINT @spid -- Print killed spid           
      END
      FETCH NEXT FROM c1 INTO @spid
END
-- Clean up
CLOSE c1
DEALLOCATE c1
END
GO

Author

Was this helpful?

Please note, this commenting system is still in final testing.
Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

RSSLoginLink Cookie政策网站地图

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom
此网站上的设置设置为允许所有Cookie。 这些可以在我们的Cookie政策和设置页面上更改。继续使用本网站即表示您同意使用Cookie。
Ousia Logo
Logout
Ousia CMS Loader