К статье
Практический материал

Администрирование · 11 мин

Как очистить журнал транзакций 1С

Как очистить журнал транзакций 1С в MS SQL Server: усечение лога, смена модели восстановления, shrink файла, типичные ошибки и меры безопасности.

Журнал транзакций (файл с расширением .ldf) — это служебный файл базы данных SQL Server, в котором фиксируются все изменения данных. В клиент-серверных базах 1С он растёт постоянно, и при модели восстановления Full может занять десятки и сотни гигабайт, переполнить диск и остановить работу пользователей. Очистка журнала — штатная операция администрирования, но выполнять её нужно в правильной последовательности, иначе можно потерять возможность восстановления базы на произвольный момент времени.

Важно понимать: сам по себе большой .ldf-файл — не ошибка 1С, а следствие настроек SQL Server. Если база работает в полной модели восстановления (Full), журнал не усечётся автоматически, пока не выполнено резервное копирование журнала. Поэтому «очистка» всегда состоит из двух задач: освободить место внутри файла (усечение логических записей) и при необходимости уменьшить сам файл на диске (shrink).

Ниже описаны безопасные способы: через SQL Server Management Studio (SSMS), командами T-SQL, а также профилактические настройки, которые не дают журналу разрастаться снова. Все действия подходят для типовых конфигураций 1С (Бухгалтерия, Управление торговлей, ERP, ЗУП), работающих на MS SQL Server.

Когда журнал транзакций действительно нужно чистить

Тревожный признак — быстрый рост файла .ldf и сообщения об ошибках: «Недостаточно места на диске», «журнал транзакций для базы данных заполнен» (ошибка SQL Server 9002). Проверить размер можно в свойствах базы в SSMS (раздел «Файлы») или запросом к sys.database_files. Если лог-файл в разы превышает размер файла данных .mdf — это явный сигнал, что журнал никогда не усекался.

При этом небольшой запас журнала — норма. Файл, занимающий 10–20% от размера данных при активной работе пользователей, трогать не нужно. Частые принудительные сжатия вредны: они вызывают фрагментацию и заставляют сервер снова наращивать файл, что замедляет работу.

Ошибка 9002Журнал заполнен

Проверить свободное место на диске и модель восстановления базы

ldf намного больше mdfЖурнал никогда не усекался

Проверить, настроено ли резервное копирование журнала

Модель Full без бэкапов логаЖурнал будет расти бесконечно

Либо настроить бэкап журнала, либо перейти на Simple

log_reuse_wait_desc = LOG_BACKUPУсечение ждёт бэкапа журнала

Выполнить резервное копирование журнала или сменить модель

Подготовка: что сделать до очистки

Первое и обязательное действие — полная резервная копия базы данных штатными средствами SQL Server. Не путайте её с выгрузкой .dt из конфигуратора: для сжатия журнала нужен именно SQL-бэкап. Без него при сбое в процессе вы рискуете потерять данные за весь период с последнего архива.

Второй шаг — выяснить текущую модель восстановления: SSMS → свойства базы → «Параметры» → «Модель восстановления». От этого зависит сценарий: при Simple журнал усекается автоматически после контрольных точек, при Full — только после резервного копирования журнала. Также проверьте состояние ожидания усечения запросом: SELECT name, recovery_model_desc, log_reuse_wait_desc FROM sys.databases.

Третий момент — выберите время с минимальной нагрузкой. Сжатие файла (shrink) блокирует часть операций и на больших базах может занять продолжительное время. Идеально — вечер, ночь или выходной, когда пользователи не работают в 1С.

Способ 1: очистка через SQL Server Management Studio

Это самый наглядный путь для администратора, который редко работает с T-SQL. Откройте SSMS, подключитесь к серверу, найдите базу 1С в списке «Базы данных».

Если база в модели Full и бэкапы журнала не настроены, переведите её в Simple: правой кнопкой по базе → «Свойства» → «Параметры» → «Модель восстановления» → «Простая» → OK. После этого SQL Server сможет освобождать место внутри журнала автоматически.

Затем выполните сжатие файла: правой кнопкой по базе → «Задачи» → «Сжать» → «Файлы». В поле «Тип файла» выберите «Журнал», оставьте действие «Освободить неиспользуемое пространство» и нажмите OK. После завершения проверьте размер .ldf на диске — он должен уменьшиться до минимального.

Порядок действий в SSMS
  1. 1
    Сделать полную резервную копию базы средствами SQL Server
  2. 2
    Перевести базу в модель восстановления Simple
  3. 3
    Выполнить Задачи → Сжать → Файлы → тип «Журнал»
  4. 4
    Проверить размер .ldf на диске
  5. 5
    Вернуть модель Full (если требуется) и сразу сделать полный бэкап

Способ 2: очистка командами T-SQL

Для автоматизации и работы на серверах без графической оболочки удобнее скрипт. Логическое имя журнала смотрите в свойствах базы или запросом к sys.database_files — обычно оно совпадает с именем базы с суффиксом _log.

ALTER DATABASE [MyBase1C] SET RECOVERY SIMPLE;

GO

DBCC SHRINKFILE (N'MyBase1C_log', 1024);

GO

ALTER DATABASE [MyBase1C] SET RECOVERY FULL;

GO

Вторая строка сжимает журнал примерно до 1024 МБ — размер можно изменить под свою базу. Важно: если возвращаете модель Full, сразу после этого выполните полное резервное копирование, иначе цепочка восстановления журнала будет разорвана и база фактически останется без защиты до первого бэкапа.

sql
SELECT name, recovery_model_desc, log_reuse_wait_desc FROM sys.databases WHERE name = 'MyBase1C';

Способ 3: если нужна модель Full — резервное копирование журнала

Модель Full нужна там, где требуется восстановление базы на произвольный момент времени (point-in-time recovery) — например, в крупных ERP-системах с высокой ценой потери данных. В этом случае правильная «очистка» журнала — не смена модели, а регулярное резервное копирование журнала транзакций: BACKUP LOG [MyBase1C] TO DISK = 'D:\Backup\log.trn'.

После успешного бэкапа журнала место внутри файла освобождается автоматически, и сжимать файл нужно только если он уже сильно разросся. Настройте задание (maintenance plan или скрипт через SQL Server Agent) с копированием журнала, например, каждые 15–60 минут — периодичность зависит от интенсивности работы пользователей.

Сравнение вариантов

Простая модель (Simple)

Подходит большинству баз 1С: журнал усекается сам, обслуживания минимум. Ограничение — восстановление только на момент последнего бэкапа.

Full + бэкапы журнала

Даёт восстановление на любой момент времени, но требует настроенного регулярного копирования журнала и места под архивы.

Full без бэкапов журнала

Самый плохой вариант: журнал растёт бесконечно, а преимуществ модели вы фактически не используете.

Профилактика: как не допустить повторного роста

Выберите модель восстановления осознанно. Для большинства файловых по нагрузке баз 1С среднего размера достаточно Simple плюс ежедневный полный бэкап (и при возможности разностный днём). Full без настроенных копий журнала — гарантированный путь к переполнению диска.

Дополнительно ограничьте максимальный размер лог-файла в свойствах базы (автоувеличение с разумным шагом и верхним пределом) и настройте мониторинг свободного места на диске. Учтите, что массовые операции в 1С — перепроведение документов, свёртка базы, загрузка данных — резко наращивают журнал даже в модели Simple, поэтому запас свободного места на диске должен быть всегда.

Типичные ошибки при очистке журнала

Типичные ошибки
01
Удаление .ldf-файла вручную через проводник — база переходит в состояние suspect, восстановление долгое и не всегда успешное
02
Сжатие журнала без предварительного бэкапа — при сбое данные за период с последнего архива теряются
03
Возврат в модель Full без полного бэкапа — цепочка восстановления разорвана, бэкапы журнала не работают
04
Регулярное сжатие по расписанию — фрагментация файлов и лишняя нагрузка; shrink нужен разово, а не как регламент
05
Сжатие файла данных вместо журнала — долгая операция с дефрагментацией индексов и почти без эффекта для места

Отдельная ошибка — пытаться очистить журнал во время активной работы пользователей. Длинные открытые транзакции блокируют усечение: shrink завершится «успешно», но файл не уменьшится. Проверить активные транзакции можно запросом DBCC OPENTRAN — если есть старая открытая транзакция, сначала завершите сеанс, который её держит.

Как проверить результат

Контрольные точки

Как проверить результат

Размер .ldf на диске
Норма

Файл уменьшился до заданного размера

Тревожный признак

Размер не изменился — есть активная транзакция или не выполнен бэкап журнала

log_reuse_wait_desc
Норма

NOTHING или CHECKPOINT

Тревожный признак

LOG_BACKUP или ACTIVE_TRANSACTION — усечение заблокировано

Работа пользователей 1С
Норма

Вход в базу и проведение документов без ошибок

Тревожный признак

Ошибки 9002 или недоступность базы

Резервное копирование
Норма

После возврата в Full сделан полный бэкап

Тревожный признак

Модель Full восстановлена, но бэкапа нет — база не защищена

Финальный контроль — понаблюдать за ростом журнала несколько дней. Если при модели Simple файл снова быстро растёт, ищите источник: массовые загрузки, обмены данными, длительные регламентные операции. Возможно, стоит увеличить исходный размер файла и шаг авторасширения, чтобы сервер не тратил ресурсы на постоянное наращивание.

Итог

Что важно запомнить

Очистка журнала транзакций 1С — это бэкап, перевод базы в Simple (или бэкап журнала при Full), сжатие лог-файла и возврат рабочих настроек с обязательным полным бэкапом. Никогда не трогайте .ldf-файл напрямую и не делайте shrink регулярной процедурой — правильная модель восстановления и расписание бэкапов решают проблему навсегда.

Частые вопросы

Можно ли очистить журнал транзакций без остановки работы пользователей?

Резервное копирование журнала и смена модели восстановления выполняются «на горячую», без отключения пользователей. А вот сжатие файла лучше делать в нерабочее время: операция создаёт нагрузку на дисковую подсистему, а активные длинные транзакции могут вообще не дать освободить место.

Почему после сжатия размер .ldf не уменьшился?

Чаще всего причины две: в базе есть открытая старая транзакция (проверьте DBCC OPENTRAN) или база в модели Full и не сделан бэкап журнала (проверьте log_reuse_wait_desc — значение LOG_BACKUP). Устраните причину и повторите shrink.

Какую модель восстановления выбрать для базы 1С?

Если вас устраивает восстановление на момент последнего бэкапа (обычно ночного), выбирайте Simple — это надёжно и не требует обслуживания журнала. Full оправдана только при настроенном регулярном копировании журнала и реальной потребности в восстановлении на произвольный момент времени.

Опасно ли сжимать журнал транзакций?

Разовое сжатие после резервной копии безопасно. Вредно делать shrink регулярным регламентом: файл будет расти заново, а циклы сжатия-роста вызывают фрагментацию на уровне файловой системы и снижают производительность.

Чем очистка журнала отличается от свёртки базы 1С?

Это разные задачи. Очистка журнала уменьшает служебный .ldf-файл SQL Server и никак не меняет данные учёта. Свёртка базы — операция внутри 1С, которая удаляет старые документы и формирует остатки на дату; она уменьшает файл данных, но сама при этом сильно наращивает журнал транзакций.

А если база 1С файловая — где у неё журнал транзакций?

У файловой базы нет отдельного журнала транзакций SQL Server. Все данные хранятся в файле 1Cv8.1CD, и уменьшить его можно только штатными средствами: выгрузкой и загрузкой через .dt или тестированием и исправлением с включённым сжатием таблиц.