Jak zabić procesy użytkowników korzystających z bazy danych?

20-wrz-2013

Moje rozwiązanie, to przestawić bazę w tryb SINGLE USER kończąc natychmiast wszystkie otwarte transakcje:

ALTER DATABASE AdventureWorks SET SINGLE_USER WITH ROLLBACK IMMEDIATE

a potem przełączyć bazę w tryb MULTI_USER:

ALTER DATABASE AdventureWorks SET MULTI_USER

 

Rozwiązanie z http://www.sqlservercentral.com/articles/Backup+%2f+Restore/71272/

Uruchom skrypt:

DECLARE @execSql varchar(1000)
DECLARE @databaseName varchar(100)
— Set the database name for which to kill the connections
SET @databaseName = 'Adventureworks’
SET @execSql =”
 
SELECT @execSql = @execSql + 'kill ’ + CONVERT(CHAR(10), spid) + ’ ’
from master.dbo.sysprocesses
WHERE db_name(dbid) = @databaseName
AND status <> 'background’
AND status IN (’runnable’,’sleeping’)
AND DBID <> 0
AND spid <> @@spid
 
print @execsql
 
EXEC (@execSql)
 

Skrypt odnajduje niesystemowe sesje pracujące w danej bazie danych (oprócz potencjalnie naszej sesji) i konstruuje polecenie kill zabijające te sesje. Sprytne…

Komentarze są wyłączone

Autor: Rafał Kraik