Posted on 14th May 2009No Responses
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

Comments
Leave a Response
XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>