Журнал транзакций LDF переполнен в MS SQL: бэкап и сжатие (Shrink)
Почему файл .LDF разрастается до сотен гигабайт?
Каждое изменение данных в базе 1С сначала записывается в журнал транзакций — файл ИмяБазы_log.ldf. Если в свойствах базы включена «Полная модель восстановления» (Full Recovery Model), но при этом настроены бэкапы только самого файла данных (.mdf) без регулярного резервного копирования лога, файл .ldf бесконечно растет, пока не заполнит весь жесткий диск.
Ошибка СУБД: Microsoft OLE DB Driver for SQL Server:
Журнал транзакций для базы данных 'buh_db' переполнен. Код ошибки 9002.
Причина: 'LOG_BACKUP'. Невозможно выполнить операцию записи.Последствия переполнения:
- База 1С намертво блокируется: ни один пользователь не может записать или провести документ.
- Свободное место на диске сервера падает до 0 байт.
- База в SQL Management Studio может перейти в аварийный статус Recovery Pending или Suspect.
Экстренное сжатие лога транзакций (Пошагово)
Способ 1. Быстрое освобождение места через T-SQL (Рекомендуется)
Откройте SQL Server Management Studio (SSMS), нажмите кнопку «Создать запрос» (New Query) и выполните следующий скрипт (замените buh_db на имя вашей базы, а buh_db_log на логическое имя лог-файла):
USE [buh_db];
GO
-- 1. Переводим базу в простую модель восстановления (очищает цепочку логов)
ALTER DATABASE [buh_db] SET RECOVERY SIMPLE;
GO
-- 2. Сжимаем файл журнала транзакций до 100 Мегабайт
DBCC SHRINKFILE (N'buh_db_log', 100);
GO
-- 3. Возвращаем полную модель восстановления (если нужны ежечасные бэкапы лога)
ALTER DATABASE [buh_db] SET RECOVERY FULL;
GOКак узнать логическое имя файла лога: Кликните по базе правой кнопкой мыши в SSMS → Свойства (Properties) → Файлы (Files) → посмотрите значение в столбце «Имя логического файла» для типа файла «Журнал» (Log).
Способ 2. Решение через графический интерфейс SSMS
- В SSMS кликните правой кнопкой мыши по базе → Задачи (Tasks) → Сжать (Shrink) → Файлы (Files).
- В выпадающем списке «Тип файла» (File type) выберите Журнал (Log).
- В блоке параметров сжатия выберите «Реорганизовать страницы перед освобождением неиспользуемого места» и укажите желаемый размер (например, 500 МБ).
- Нажмите «ОК». Файл .ldf мгновенно сожмется, освободив десятки гигабайт на диске.
Частые вопросы (FAQ)
Почему Shrink не уменьшает размер файла лога?
Внутри файла лога есть незавершенная активная транзакция (например, зависший фоновый перерасчет итогов 1С). Проверьте статус командой DBCC OPENTRAN и сделайте бэкап журнала перед сжатием: BACKUP LOG [buh_db] TO DISK = 'NUL'.
Какую модель восстановления выбрать: Simple или Full?
Для небольших баз 1С (до 50 пользователей) идеальна модель Simple (Простая) — лог очищается автоматически при каждом чекпоинте. Модель Full нужна только крупным предприятиям, где требуется восстановление базы на любую секунду дня.
Можно ли просто удалить файл .ldf с жесткого диска?
Категорически нет! Без файла лога база данных перейдет в состояние «Recovery Pending» и перестанет открываться. Удалять файлы базы можно только после правильного отсоединения (Detach).
Как предотвратить повторное разрастание .ldf в будущем?
Если база работает в режиме Full, обязательно настройте в Плане обслуживания (Maintenance Plan) создание бэкапа журнала транзакций каждые 15–30 минут.