Что делать, когда база заняла все свободное место диска
Когда это может пригодиться: при подключении к базе MS SQL появляются ошибки:
Ошибка СУБД :
Microsoft OLE DB Provider for SQL Server: Журнал транзакций для базы данных «ReportServer» заполнен. Чтобы обнаружить причину, по которой место в журнале не может быть повторно использовано, обратитесь к столбцу log_reuse_wait_desc таблицы
sys. databases HRESULT=80040E14, SQLStvr: Error state=2, Severity=11,native=9002, line=1
или
Ошибка СУБД:
Microsoft OLE Provider for SQL Server: The transaction log for database “ReportServer” is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column is sys.database
HRESULT=80040E14, SQLSTATE=4 2000, native=9002
Такое сообщение чаще всего связанно с переполнением диска, где расположен лог транзакций и теперь СУБД некуда записывать данные о новых транзакциях. Так часто происходит, когда не установлено никаких ограничений на размер лога и в MS SQL не создано соответствующих планов обслуживания.
Самое быстрое решение уменьшить размер самого файла транзакций (база.ldf), другими словами сделать Shrink (сжатие) лога. Для этого можно использовать как запрос, так и сжатие лога вручную.
Рассмотрим шринк лога транзакций вручную:
Шаг 1. Настроим базу для Shrink-а. Установим Recovery model в состояние Simple.
Запустим приложение Microsoft SQL Server Management Studio — Подключаемся к базе — Правой кнопкой на базе — Properties (Свойства)
Options (Параметры) — Recovery model (Модель восстановления) — Simple (Простая) — OK.
Шаг 2. Проведем операцию сжатия (Shrink) лога транзакций.
Правой кнопкой на базе — Tasks (Задачи) — Shrink (Сжать) — Files (Файлы)
Установить File type (Тип файла) — Log (Журнал)
Установить в Shrink action (Операция сжатия) — Reorganize pages before releseasing unused space (Реорганизовать страницы, перед тем освоить неиспользуемое место) — Shrink file to (Сжать файл) —указать приемлемый размер лога, в моем случаи 0.
Шаг 3. Вернем настройки базы в прежнее состояние. Установим Recovery model в состояние Full.
Правой кнопкой на базе — Properties (Свойства) — Options (Параметры) — Recovery model (Модель восстановления) — Full (Полная) — OK.
Стоит заметить, что такое решение разово исправит ситуацию и через время лог опять заполнит свободное место диска. Предупреждать появление ошибки поможет система мониторинга.