TSQL Kill - Glück IT

Werbung
Glück IT
IT Beratung, Schulung und Entwicklung
1. Tipps & Tricks
2. MS SQL Server
TSQL Kill - Verbindungen trennen
Um offene Verbindungen zu einer Datenbank trennen zu können gibt es im TSQL den Befehl KILL.
Welche Prozesse gerade aktiv sind verrät die Systemtabelle MASTER..SysProcesses.
Folgende Prozesse sollten nicht beendet werden:
Spalte: cmd
AWAITING COMMAND
Hierbei handelt es sich um offene Verbindungen, beispielsweise des Microsoft SQL Server Management Studio.
Je nach dem was man gerade vorhat, müssen aber genau diese weg. Beispielsweise wenn die Datenbank gelöscht werden soll und das von
aktiven Verbindungen unterbunden wird.
CHECKPOINT SLEEP
LAZY WRITER
LOCK MONITOR
SIGNAL HANDLER
Das folgende SQL listet alle Verbindungen auf dem SQL Server auf.
SELECT * FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName)
Das folgende Skript listet alle Verbindungen zu einer Datenbank auf und gibt diese per PRINT aus. Mit dem Kill Befehl würden diese Prozesse
beendet. Damit dies nicht aus versehen passiert ist der Befehl auskommentiert so das das Skript erst einmal gefahrlos ausprobiert werden kann.
DECLARE @DatabaseName nvarchar(50)
DECLARE @SPId int = -1
SET @DatabaseName = N´´
WHILE (NOT @SPId IS NULL)
BEGIN
SET @SPId = (SELECT TOP(1) SPId
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId AND spid>@SPId
ORDER BY spid)
PRINT @SPId
-- KILL @SPId
END
GO
Als Procedure sieht das dann wie folgt aus:
CREATE PROCEDURE KillDBProccess(@DatabaseName nvarchar(50))
AS
-- EXECUTE AS { SELF | OWNER | ´user_name´ }
-- SELF ist der Ersteller der SP
-- OWNER ist der aktuelle Besitzer der SP
-- ´user_name´ ist irgend ein User
-- Immer daran denken das das Skript/die Prozedur im Kontext eines Users ablaufen muss der die Rechte hat!
DECLARE @SPId int = -1;
DECLARE @SQL varchar(max) = '';
WHILE (NOT @SPId IS NULL)
BEGIN
SET @SPId = (SELECT TOP(1) SPId
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@DatabaseName) AND SPId <> @@SPId AND spid>@SPId
ORDER BY spid)
PRINT @SPId
-- KILL @SPId /* Es könnte so einfach sein, leider erlaubt TSQL keine Variable im Kontext zu KILL daher:
SET @SQL = 'KILL ' + @SPId
07.04.2017 16:45:13 by CMAssist
http://www.dozent.net/Tipps-Tricks/MS-SQL-Server/260-TSQL%20Kill
Seite 1
Glück IT
IT Beratung, Schulung und Entwicklung
EXEC (@SQL)
END
Schulung Microsoft SQL Server-Transact SQL Programmierung (TSQL) In dieser Schulung lernen Sie die Sprachelemente von Transact SQL
kennen.
Schulung SQL - Die Datenbanksprache Diese Schulung vermittelt die Grundlagen von SQL und ist die Voraussetzung für die TSQL Schulung
Artikel als PDF herunterladen
07.04.2017 16:45:13 by CMAssist
http://www.dozent.net/Tipps-Tricks/MS-SQL-Server/260-TSQL%20Kill
Seite 2
Herunterladen