У меня есть БД XYZ, в которой был поврежден файл журнала, и теперь, поскольку файл журнала полностью непригоден для использования, это делает эту конкретную БД непригодной для использования, и мне нужно иметь возможность ее восстановить.
Я уже провел много исследований по этому процессу, но застрял на dbcc checkdb.
Я выполнил команду
alter database xyz SET single_user with immediate rollback
и впоследствии
use master
dbcc checkdb('xyz',REPAIR_ALLOW_DATA_LOSS)
Но я продолжаю сталкиваться с этой ошибкой:
Msg 924, Level 14, State 1, Line 2
Database 'XYZ' is already open and can only have one user at a time.
Все, что я исследовал, указывает на то, что БД должна быть в аварийном режиме, а затем эта БД должна быть в однопользовательском режиме. Если я верну БД в многопользовательский режим, это означает, что БД должна быть в однопользовательском режиме. Хорошо, я делаю это, а затем получаю эту проблему.
Я бегал
select spid from master..sysprocesses where dbid = DB_ID('XYZ') and spid <> @@spid
для проверки любых процессов, использующих БД, но строки не возвращаются, а журналы ничего не показывают о восстанавливаемой базе данных или о чем-то подобном. БД отображается как «Emergency».
Любые идеи?
Верните базу данных обратно в многопользовательский режим и попробуйте что-то вроде следующего.
alter database xyz SET single_user with rollback immediate
dbcc checkdb('xyz',REPAIR_ALLOW_DATA_LOSS)
Вероятно, другой процесс перехватывает соединение с базой данных, прежде чем вы туда попадете. Объединение обоих операторов должно гарантировать, что вы получите эту связь.