Tipps und Tricks #6 SQL
Für manche Wartungsarbeiten am SQL Server kann es notwendig sein, alle Datenbankverbindungen zu beenden. Dies kann man mit dem TSQL Befehl “kill” und der Session-ID der Prozesse erreichen.
In der Systemtabelle “sysprocesses” der Datenbank “master” kann man alle Prozesse einer oder aller Datenbanken auf dem Datenbankserver auslesen. Dort findet man auch die “spid ”, die Session-ID der jeweiligen Prozesse. Diese kann man dann mit dem Befehl “kill” "abschießen. In dem Script habe ich noch einige Filter eingebaut:
- Benutzer “Administrator” wird nicht abgeschossen
- Es werden nur Prozesse der aktuellen Datenbank abgeschossen
- Der Prozess schießt sich nicht selbst ab
- Es werden keine Systemprozesse abgeschossen (spid <= 50)
Hier das Beispielscript:
DECLARE @spid int
DECLARE CUR CURSOR FOR
SELECT spid FROM master..sysprocesses s
where s.loginame not like ‘%Administrator’ and — Nicht ggf. angemeldete Admins abschießen
db_name(s.dbid) = db_name() and — Nur Prozesse der aktuellen Datenbank
s.spid != @@spid and — nicht sich selbst abschießen
s.spid > 50 — Keine Systemprozesse
OPEN CUR
WHILE (1=1)
BEGIN
FETCH CUR INTO @spid
if @@fetch_status <> 0 break
execute (‘KILL ‘ + @spid)
print convert(varchar(3), @spid) + ‘ gekillt’
END
CLOSE CUR
DEALLOCATE CUR