У нас очень большая база данных (~ 6 ТБ), файл журнала транзакций которой был удален (когда SQL Server был закрыт. Мы попытались:
- Отсоединение и повторное подключение базы данных; и
- Удаление файла журнала транзакций
... но пока ничего не получалось.
В настоящее время мы работаем:
ALTER DATABASE <dbname> REBUILD
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')
... но учитывая размер базы данных, это может занять несколько дней.
Вопросов
Есть ли разница между командой выше и следующей?
DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
Должны ли мы выполнять
REPAIR_ALLOW_DATA_LOSS
вместо этого?
Стоит отметить, что данные получены из других источников, поэтому базу данных можно восстановить, однако мы подозреваем, что восстановить базу данных будет гораздо быстрее, чем заново вставлять все данные.
Обновить
Для тех, кто ведет счет: ALTER DATABASE/REBUILD LOG
команда завершилась примерно через 36 часов и сообщила:
Предупреждение: журнал для базы данных 'dbname' был перестроен. Транзакционная последовательность была потеряна. Цепочка RESTORE была разорвана, и у сервера больше нет контекста в предыдущих файлах журналов, поэтому вам нужно будет знать, что это было.
Вы должны запустить DBCC CHECKDB для проверки физической согласованности. База данных переведена в режим dbo-only. Когда вы будете готовы сделать базу данных доступной для использования, вам нужно будет сбросить параметры базы данных и удалить любые дополнительные файлы журнала.
Затем мы провели DBCC CHECKDB
(заняло около 13 часов), который был успешным. Скажем так, мы все узнали о важности резервного копирования базы данных (и предоставления менеджерам проектов доступа к серверу ...).