Журнал регистрации раздулся: как уменьшить его на сервере 1С с MS SQL или PostgreSQL

· 10 мин

Содержание

Журнал регистрации 1С 8.3 очищают в конфигураторе: Администрирование → Настройка журнала регистрации → Сократить, указав дату, до которой события удаляются. Для регулярной очистки ту же операцию запускают пакетным режимом с параметром /ReduceEventLogSize по расписанию Windows. Запрос к таблицам MS SQL или PostgreSQL здесь не поможет: в клиент-серверном варианте журнал хранится не в базе данных SQL, а в файлах на сервере 1С.

Эту путаницу стоит снять сразу. Если на SQL-сервере вырос файл .ldf, то это журнал транзакций СУБД, а не журнал регистрации 1С. Его чистят другими командами, они разобраны ниже отдельным разделом.

Где лежит журнал регистрации и почему он разрастается

Журнал пишет сервер 1С, а не СУБД. Для каждой информационной базы кластер ведёт отдельный каталог:

  • 📁 серверная база: <каталог srvinfo>\reg_1541\<GUID базы>\1Cv8Log;
  • 📁 файловая база: подкаталог 1Cv8Log в каталоге самой базы.

По умолчанию srvinfo находится в C:\Program Files\1cv8\srvinfo, но при установке его часто переносят на отдельный диск. GUID базы проще всего найти в файле 1CV8Clst.lst в каталоге reg_1541: там рядом с именем базы указан её идентификатор. Второй способ — отсортировать подкаталоги reg_1541 по размеру: раздутый журнал обычно видно сразу.

Два формата хранения

ФорматФайлыКак выглядит
Последовательный (старый)1Cv8.lgf + файлы *.lgpсловарь в .lgf, события в .lgp, по файлу на период
SQLite (новый)1Cv8.lgdодин файл-база SQLite

Формат SQLite появился в 8.3 как альтернатива старому. Позже по умолчанию снова стал использоваться последовательный формат, поэтому в одном кластере вполне могут жить базы с разными журналами. Посмотрите, какие файлы лежат в 1Cv8Log, — от этого зависит, какие способы вам подходят.

Почему журнал растёт

  • 📈 уровень регистрации «Информация» или «Примечания» — платформа пишет каждое изменение, вход, выход и фоновое задание;
  • 🔄 частые регламентные задания: обмены, загрузка курсов, работа с почтой, проверка ЭДО;
  • 👥 много пользователей и интеграций через HTTP-сервисы, каждая сессия оставляет следы;
  • 🗓 журнал не делится по периодам, и старые события никто не удаляет.

Журнал в десятки гигабайт тормозит не только свой просмотр. Сервер тратит время на запись, растёт время резервного копирования каталога srvinfo, а при нехватке места на диске начинаются ошибки у пользователей.

Когда чистить пора

Ориентиры такие: файл 1Cv8.lgd больше 5–10 ГБ, суммарный размер .lgp за пределами того, что вы готовы хранить, журнал открывается минуту и дольше, на системном диске заканчивается место. Если же журнал нужен для расследований (кто изменил документ, кто удалил объект), заранее решите, сколько истории держать: обычно хватает 3–12 месяцев.

Способ 1. Сократить журнал регистрации в конфигураторе

Это штатный и самый безопасный путь. Он работает одинаково для файловой и серверной базы, монопольный режим не нужен.

  1. Откройте базу в режиме Конфигуратор под пользователем с правами администратора.
  2. Выберите в меню Администрирование → Настройка журнала регистрации.
  3. Нажмите Сократить.
  4. Укажите дату: события раньше неё будут удалены.
  5. Если старую историю нужно сохранить, включите выгрузку удаляемых событий в файл и укажите путь на другом диске.
  6. Подтвердите операцию и дождитесь окончания.

На журнале в десятки гигабайт сокращение идёт долго — от десятков минут до нескольких часов. Пользователи в это время могут работать, но запись в журнал заметно замедляется. Запускайте операцию вечером или в выходные.

После сокращения файл 1Cv8.lgd может не уменьшиться на диске: SQLite освобождает страницы внутри файла, но не отдаёт место системе. Как сжать файл, описано в способе 3.

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

Способ 2. Автоматическая очистка журнала по расписанию

Регламентное задание внутри 1С журнал не сократит: встроенный язык умеет читать и выгружать события, но команды сокращения в нём нет. Поэтому автоматику строят снаружи, через пакетный режим конфигуратора и Планировщик заданий Windows.

Командный файл

Пример ниже оставляет последние 90 дней и пишет протокол в отдельный файл. Путь к 1cv8.exe, имя сервера, базы и учётные данные подставьте свои.

@echo off
rem Дата отсечения: сегодня минус 90 дней в формате ГГГГ-ММ-ДД
for /f %%d in ('powershell -NoProfile -Command "(Get-Date).AddDays(-90).ToString('yyyy-MM-dd')"') do set CUTDATE=%%d

"C:\Program Files\1cv8\8.3.24.1342\bin\1cv8.exe" DESIGNER ^
  /S"srv1c\buh" ^
  /N"РегламентЖР" /P"пароль" ^
  /ReduceEventLogSize %CUTDATE% ^
  /Out "D:\logs\reduce_eventlog.log" -NoTruncate ^
  /DisableStartupDialogs

Что здесь важно:

  • 🔑 заведите в базе отдельного пользователя с правами администратора только для этой задачи и не используйте учётку живого человека;
  • 📅 дату параметр /ReduceEventLogSize принимает в формате ГГГГ-ММ-ДД;
  • 💾 чтобы сохранить удалённые события, добавьте к параметру ключ -saveAs с путём к файлу;
  • 📝 файл из /Out проверяйте после первых запусков: там видно, отработала ли команда и не помешала ли ей блокировка.

Задание в Планировщике

  1. Откройте taskschd.msc на сервере 1С.
  2. Создайте задачу с запуском раз в неделю или раз в месяц, ночью.
  3. Укажите пользователя Windows, у которого есть доступ к каталогу с 1cv8.exe и к каталогу логов.
  4. Включите «Выполнять вне зависимости от регистрации пользователя».
  5. В действии укажите путь к .bat.

Номер платформы в пути лучше вынести в переменную или использовать 1cestart.exe. Иначе после обновления платформы и удаления старой версии задача молча перестанет работать.

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

Способ 3. SQLite-запросы к файлу 1Cv8.lgd

Это и есть «очистка журнала регистрации через SQL» в буквальном смысле. Файл 1Cv8.lgd — обычная база SQLite, её можно открыть утилитой sqlite3 или любым просмотрщиком SQLite. Способ для администраторов, которые понимают, что делают.

Работайте только при остановленной службе сервера 1С и только с копией файла. Остановка службы обрывает сеансы всех пользователей всех баз кластера, поэтому делайте это в согласованное окно.

Сжать файл после сокращения

Самый полезный и безопасный сценарий: вы уже сократили журнал конфигуратором, а файл остался прежнего размера.

  1. Предупредите пользователей и остановите службу Агент сервера 1С:Предприятия 8.3.
  2. Скопируйте 1Cv8.lgd в резервный каталог.
  3. Выполните сжатие:
sqlite3.exe "D:\srvinfo\reg_1541\<GUID>\1Cv8Log\1Cv8.lgd" "VACUUM;"
  1. Проверьте целостность:
sqlite3.exe "D:\srvinfo\reg_1541\<GUID>\1Cv8Log\1Cv8.lgd" "PRAGMA integrity_check;"
  1. Ответ ok — запускайте службу. Любой другой ответ — верните копию из шага 2.

VACUUM пересобирает файл, поэтому на диске нужно свободное место примерно равное размеру журнала.

Удаление записей запросом

Удалять события командой DELETE напрямую технически можно, но структура таблиц .lgd не документирована для такого использования. Перед любым запросом посмотрите схему (.tables, .schema) на копии файла и убедитесь, как хранится дата события. Ошибка в условии оставит журнал без истории или с битыми ссылками на справочники пользователей и метаданных. Штатное сокращение из способа 1 делает то же самое без этих рисков.

Если журнал не нужен совсем

Когда историю хранить не требуется, проще начать журнал заново:

  1. Остановите службу сервера 1С.
  2. Переименуйте каталог 1Cv8Log нужной базы, например в 1Cv8Log_old.
  3. Создайте пустой каталог 1Cv8Log.
  4. Запустите службу: платформа создаст новый журнал.
  5. Через несколько дней, убедившись, что всё работает, удалите или заархивируйте старый каталог.

Способ 4. Внешние обработки для работы с журналом

Обработки из интернета и встроенные формы БСП (Администрирование → Обслуживание → Журнал регистрации в БП 3.0 и ЗУП 3.1) удобны для анализа: фильтры, выгрузка, поиск нужного события. Но удалять записи они не умеют, ограничение задаёт платформа.

Обработку стоит использовать перед очисткой. Сценарий такой:

  1. Отберите нужные события: например, удаление объектов, изменение прав, вход под администратором.
  2. Выгрузите их в файл или в таблицу для архива.
  3. Сократите журнал одним из способов выше.

Обработку из чужого источника открывайте в тестовой копии базы. Внешняя обработка выполняется с правами пользователя и может изменить данные.

Не путайте с журналом транзакций SQL (.ldf)

Если запрос «очистить журнал на SQL» появился из-за растущего файла .ldf в MS SQL Server, проблема в модели восстановления базы. При модели FULL журнал транзакций растёт до тех пор, пока не будет сделана резервная копия журнала.

Два корректных пути:

СитуацияЧто делать
Резервные копии журнала транзакций не нужныперевести базу в модель SIMPLE и сжать .ldf
Нужно восстановление на момент времениоставить FULL и настроить регулярный бэкап журнала транзакций

Команды для первого случая выполняются в SQL Server Management Studio:

ALTER DATABASE [buh] SET RECOVERY SIMPLE;
GO
USE [buh];
GO
-- логическое имя файла журнала смотрите в свойствах базы
DBCC SHRINKFILE (N'buh_log', 1024);
GO

Число 1024 — целевой размер в мегабайтах. Логическое имя файла журнала смотрите в свойствах базы, раздел «Файлы», или запросом SELECT name FROM sys.database_files;.

После перехода на SIMPLE восстановиться на произвольный момент времени уже нельзя: только на момент полной копии. Согласуйте это с тем, кто отвечает за резервное копирование.

В PostgreSQL отдельного файла журнала у базы нет. Похожую роль играют WAL-файлы, но их объём регулируется настройками сервера СУБД, а не командами внутри базы.

Ошибки при очистке журнала регистрации

Диагностика: выберите симптом

Частые промахи

  • ❌ удалить каталог 1Cv8Log при работающей службе: файлы заблокированы, а частично удалённый журнал платформа может не открыть;
  • ❌ удалить 1Cv8.lgf в последовательном формате: это словарь, без него файлы .lgp не читаются;
  • ❌ отключить журнал полностью, чтобы «не рос»: потом не найти, кто провёл или удалил документ;
  • ❌ чистить журнал перед проверкой или разбором инцидента, не выгрузив нужные события.

Как настроить журнал, чтобы он не разрастался снова

Все настройки находятся в том же окне Администрирование → Настройка журнала регистрации конфигуратора.

Уровень регистрации

УровеньЧто пишетсяКому подходит
Ошибкитолько ошибкивысоконагруженные базы, где история изменений не нужна
Предупрежденияошибки и предупреждениякомпромисс для крупных баз
Информацияплюс входы, выходы, изменения данныхбольшинство бухгалтерских баз
Примечаниявсё, включая служебные событияна время диагностики

Снижать уровень ниже «Информации» в учётных базах стоит осторожно. Именно на этом уровне видно, кто и когда изменил документ, а без этого разбор спорных ситуаций превращается в гадание.

Разделение по периодам

Для последовательного формата включите разделение журнала по месяцам. Тогда каждый месяц пишется в свой файл .lgp, и старые периоды легко архивировать или удалять целыми файлами, не трогая текущие.

Чек-лист обслуживания

Регулярное обслуживание журнала регистрации
Выполнено: 0 / 7

Регламентные задания

Посмотрите, какие регламентные задания запускаются слишком часто. Загрузка курсов раз в минуту или опрос почты каждые 30 секунд дают тысячи записей в сутки при нулевой пользе. Список заданий в БП 3.0 и ЗУП 3.1: Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания.

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

Можно ли просто удалить файлы журнала регистрации?
Да, если история не нужна. Остановите службу сервера 1С, переименуйте каталог 1Cv8Log и создайте пустой. Платформа начнёт новый журнал при первом запуске базы.
Нужен ли монопольный режим для сокращения журнала?
Нет. Сокращение работает при подключённых пользователях, но замедляет запись событий, поэтому его лучше запускать вне рабочего времени.
Попадает ли журнал регистрации в резервную копию .dt или SQL-бэкап?
Нет. Выгрузка .dt и бэкап базы СУБД журнал не включают. Если история важна, копируйте каталог 1Cv8Log отдельно.
Сколько хранить журнал регистрации?
Для бухгалтерской базы разумный срок — от 3 до 12 месяцев в рабочем журнале. Более старую историю выгружайте в архив перед сокращением.
Как перенести журнал на другой диск?
Переносится весь каталог srvinfo: путь к нему задаётся при регистрации службы сервера 1С. Перенос требует остановки службы и обрывает сеансы пользователей.