Web design and hosting, database, cloud and social media solutions that deliver business results
  • Obchodní řešení
    • Databázové služby
      • Integrace dat
    • Robotická automatizace procesů
    • Návrh webových stránek
      • Zabezpečení webových stránek
    • Obchodní služby
      • Microsoft Azure
    • Microsoft Office
    • Sociální Média
  • Akademie
    • Výuka návrhu databáze
      • Zprávy
      • Pomocí serveru SQL Pivot-Unpivot
      • Použití dat serveru SQL Server
      • Používání funkcí dat serveru SQL Server
      • Používání funkcí serveru SQL Server
      • SQL Server 2008 plán údržby
    • Výuka designu webových stránek
      • CSS
      • ASP NET
  • O nás
    • Portfolio
    • tým
      • Gavin Clayton
      • Chester Copperpot
      • Suneel Kumar
عربى (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)

Uložená procedura zabije všechna připojení k vybrané databázi nebo serveru

Procedura SQL Stored zabije všechna připojení k vybrané databázi nebo serveru s výjimkou procesu, který ji volá.

Úvod

Mohou nastat situace, kdy potřebujete odpojit všechny uživatele od vaší databáze, jedním příkladem je replikace protokolu. Tento kód níže byl použit na serveru sestav, který byl aktualizován každých 20 minut, protože databázi je třeba otevřít ve výhradním režimu pomocí úlohy obnovení.

Níže uvedený kód přijme název databáze, takže je třeba jej napsat pouze jednou a uložit jej do hlavní databáze nebo databáze obslužných programů (pokud jste ji vytvořili). Poté jej lze vyvolat z jakéhokoli jiného procesu, v našem případě z úplného plánu údržby v dokumentu nad tímto.

Jedná se o poměrně jednoduchou uloženou proceduru, která jednoduše získá seznam aktivních připojení a smyček, které zabijí proces a připojení.

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 Policymapa stránek

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
Nastavení na této stránce jsou nastaveny povolit všechny soubory cookie. Ty mohou být změněny na našich zásad a nastavení stránky cookie. Nadále používat tento web souhlasíte s použitím cookies.
Ousia Logo
Logout
Ousia CMS Loader