У нас дуже велика база даних (~ 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
(взяли приблизно 13hrs), який був успішним. Скажімо, що ми всі дізналися про важливість резервного копіювання баз даних (і надання менеджерам проектів доступу до сервера ...).