Please enable / Bitte aktiviere JavaScript!
Wir benötigen diese Funktion um Besucher abzuweisen, die Adblocker nutzen.

Manchmal gibt es Situationen, da ist eine Datenbank so „vor die Wand gefahren“, dass der Zugriff durch ein simples „ALTER DATABASE … ROLLBACK IMMEDIATE“ nicht wieder hergestellt werden kann.

Das kann zum Beispiel passieren, wenn ein fehlerhafter Restore-Prozess gestartet wird. So im Falle meines Kunden geschehen. Restore über die MSSQLSMS-GUI gestartet, Medium ausgewählt, LDF und MDF-Datei ausgetauscht, aber das Ziel vergessen. Endeffekt beim SQL-Server 2008: Ziel- und Quelldaten(banken) komplett gesperrt und eine riesige Menge offener Transaktionen, die sich nicht beenden lassen. Es gibt aber noch Hoffnung:

 

Folgendes Script killt alle Transaktionen zu einer bestimmten Datenbank.

Bitte ‚DB_NAME‘ gegen den tatsächlichen Namen der gesperrten Datenbank austauschen und abfeuern.

USE master

GO

SET NOCOUNT ON

DECLARE @DBName varchar(50)

DECLARE @spidstr varchar(8000)

DECLARE @ConnKilled smallint

SET @ConnKilled=0

SET @spidstr = ''

Set @DBName = 'DB_NAME'

IF db_id(@DBName) < 4

BEGIN

PRINT'Connections to system databases cannot be killed'

RETURN

END

SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; '

FROM master..sysprocesses WHERE dbid=db_id(@DBName)

IF LEN(@spidstr) > 0

BEGIN

EXEC(@spidstr)

SELECT @ConnKilled = COUNT(1)

FROM master..sysprocesses WHERE dbid=db_id(@DBName)

END

Im Anschluss daran funktioniert ein ggf. vorher nicht erfolgreiches

ALTERDATABASE DB_NAME
SET MULTI_USER;
GO

wieder.

Kommentar schreiben

     

Sicherheitscode
Aktualisieren

Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Ok