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;