Восстановление поврежденного лог-файла базы SQL
Я уже пару раз встречал ошибку, когда база данных работает и вроде бы все нормально. Модель восстановления у базы данных «Простая», но очистка файла логов не происходит. И делаешь полный бекап и журнала транзакций, но сокращение не происходит. В итоге куча данных просто остается на системном диск, а копия базы в архиве просто громадных размеров. Зачастую при простой модели восстановления файлы логов журнала транзакций никому не нужны и их можно было удалить, но не получается.
Я перепробовал кучу вариантов за весь период своей практики и только недавно нашел код, который это делает быстро и безо всяких проблем. Для это надо просто открепить базу данных и сделать присоединение с полным перестроением файла логов. Ну типа с эмуляцией, что файл логов поврежден и его надо исправить. Он вроде бы и нормальный, но мы говорим серверу, что он поврежден.
В итоге файл логов восстанавливается как пустой и новый с нулевым размером и правильным хешем. Тем самым прикрепляется уменьшенный размер базы данных за счет нулевого размера файла логов базы данных.
Инструкция по работе простая:
1. Отсоединяем базу данных с удалением используемых сеансов подключений.
2. Удаляем или перемещаем большой и старый файл логов на резервный диск.
3. Файл базы остается на старом месте.
4. В запросе примера укажите старое расположение файла базы данных *.mdf
5. Выполняем присоединение с помощью запроса.
|
1 2 3 4 5 6 |
USE master; CREATE DATABASE [utp] ON (FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\utp.mdf') FOR ATTACH_FORCE_REBUILD_LOG; GO |
В примере у меня база данных называется «utp», но вам надо подставить свое имя, которое имеет база. Ну, и проследите что бы путь к ней тоже был правильным. Удачи!

