Назад | Перейти на главную страницу

dbcc checkdb ('XYZ', REPAIR_ALLOW_DATA_LOSS) указывает, что XYZ уже открыт и может иметь только одного пользователя одновременно

У меня есть БД 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)

Вероятно, другой процесс перехватывает соединение с базой данных, прежде чем вы туда попадете. Объединение обоих операторов должно гарантировать, что вы получите эту связь.