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