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

01USE master;
02  
03DECLARE @tokill varchar(8000) = ''
04SELECT @tokill = @tokill + 'kill ' + CONVERT(varchar(5), spid) + ';' 
05FROM master..sysprocesses 
06WHERE dbid = db_id('jira_db'-- nazwa bazy danych która jest na single user
07EXEC(@tokill);
08-- od razu po ubiciu sesji należy w tym samym statemante od razu zmienić bazę.
09-- W osobnych krokach to nie zadziała bo baza biędzie znów w użyciu
10 
11alter 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