Czasami mamy sytuację gdzie nie możemy zmienić bazy z trybu single_user na multi_user. Jest to spowodowane tym, że baza ta jest „trzymana” przez inny proces.

Uzyskujemy wtedy komunikat:

Msg 5064, Level 16, State 1, Line 1
Changes to the state or options of database ‘jira_db’ cannot be made at this time.
The database is in single-user mode, and a user is currently connected to it.
Msg 5069, Level 16, State 1, Line 1 ALTER DATABASE statement failed.

Poniżej skrypt, który to rozwiązuje

USE master;
 
DECLARE @tokill varchar(8000) = '';  
SELECT @tokill = @tokill + 'kill ' + CONVERT(varchar(5), spid) + ';'  
FROM master..sysprocesses  
WHERE dbid = db_id('jira_db')  -- nazwa bazy danych która jest na single user
EXEC(@tokill); 
-- od razu po ubiciu sesji należy w tym samym statemante od razu zmienić bazę. 
-- W osobnych krokach to nie zadziała bo baza biędzie znów w użyciu

alter database [jira_db] set multi_user with rollback immediate;


Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl