Wer ist mit dem MSSQL Server verbunden?

Heute ging mir beim Restore eines MSSQL Servers ein Client auf die Nerven. Nachdem ich alle Benutzer gebeten habe, wegen eben der Rücksicherung einer Datenbank entsprechende Anwendungen zu beenden, war noch immer jemand auf der Datenbank. Doch wer? Ein Blick in die System-Prozesse zeigt den entsprechenden User:

select spid, status, loginame, hostname, blocked, db_name(dbid), cmd from master..sysprocesses

Da ich keine Lust hatte, mit dem entsprechenden User zu diskutieren, wieso er jetzt nicht die Sache beenden konnte, entschied ich mich für die radikale Methode und den entsprechenden Prozess abzuschießen. Der Benutzer würde sich schon im Falle des Falles bei mir melden.

Ein SQL Script sucht mir die Prozesse die auf die entsprechende Datenbank zugreifen und killt diese:

-- use the master database
USE master
go
DECLARE @DatabaseName varchar(30), 
    @ServerProcessID varchar(10), 
    @StartTime datetime

-- Set our database name to my_database (change this to your db)
SELECT @StartTime = current_timestamp, 
    @DatabaseName = 'my_database'

-- Timeout after 3 minutes
while(exists(Select * FROM sysprocesses 
            WHERE dbid = db_id(@DatabaseName)) AND
            datediff(mi, @StartTime, current_timestamp) < 3)
begin
        DECLARE spids CURSOR FOR
            SELECT convert(varchar, spid) FROM sysprocesses
                WHERE dbid = db_id(@DatabaseName)
        OPEN spids
        while(1=1)
        BEGIN
            FETCH spids INTO @ServerProcessID
            IF @@fetch_status < 0 BREAK
            exec('kill ' + @ServerProcessID)
        END
        DEALLOCATE spids
end

Danach klappte der Restore problemlos und prompt meldete sich auch der entsprechende Benutzer per Telefon zu Wort. Ich nahm den Hörer zur Hand und meldete mich zuckersüß mit den Worten "Simon, Operator hier?"...

Author:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert