Файл журнала базы 1С разросся: как вернуть место на диске

· 10 мин

Содержание

Журнал транзакций есть только у клиент-серверной базы 1С на СУБД. На MS SQL Server это файл .ldf, и очищают его так: делают резервную копию журнала (BACKUP LOG) или переводят базу в простую модель восстановления, а затем сжимают файл командой DBCC SHRINKFILE. Удалять .ldf вручную нельзя: база перестанет открываться.

В файловой базе журнала транзакций нет. Растёт сам файл 1Cv8.1CD, и место возвращают сжатием таблиц в Конфигураторе. Если же место съел журнал регистрации (папка 1Cv8Log), это третья история, и ниже она тоже разобрана.

Почему растёт журнал транзакций и что именно занимает место

Сначала определите, что раздулось. Три похожих по названию объекта лечатся по-разному.

Что растётГде лежитРежим базыЧем уменьшать
Журнал транзакций СУБДфайл ИмяБазы_log.ldf в папке данных SQL Serverклиент-серверныйBACKUP LOG + DBCC SHRINKFILE
Файл данных файловой базы1Cv8.1CD в каталоге базыфайловыйсжатие таблиц в Конфигураторе, выгрузка-загрузка .dt
Журнал регистрациипапка 1Cv8Logобасокращение журнала в Конфигураторе

Почему .ldf разрастается до десятков и сотен гигабайт:

  • 📈 Полная модель восстановления (Full) без резервных копий журнала. Самая частая причина. В модели Full SQL Server хранит каждую транзакцию, пока её не сохранят командой BACKUP LOG. Если копируют только базу целиком, журнал не очищается никогда.
  • 🔁 Тяжёлые операции 1С. Закрытие месяца , перепроведение документов за год, пересчёт итогов, обновление конфигурации с реструктуризацией. Одна такая операция пишет в журнал гигабайты.
  • ⏳ Долгая открытая транзакция. Зависший сеанс или незавершённый обмен не даёт SQL Server освободить журнал даже в простой модели.
  • 🧩 Репликация, Always On, CDC. Журнал держится, пока изменения не заберёт подписчик или вторичная реплика.

Узнать причину можно запросом в SQL Server Management Studio (SSMS):

SELECT name, recovery_model_desc, log_reuse_wait_desc
FROM sys.databases
WHERE name = N'buh_base';

DBCC SQLPERF(LOGSPACE);

Поле log_reuse_wait_desc прямо называет, что держит журнал. LOG_BACKUP — нужна копия журнала. ACTIVE_TRANSACTION — есть открытая транзакция. NOTHING — журнал свободен внутри, и файл можно сжимать. DBCC SQLPERF(LOGSPACE) показывает размер журнала каждой базы и процент реально занятого места.

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

Перед любым из способов сделайте полную резервную копию базы средствами SQL Server или выгрузку в .dt. Операции ниже не трогают данные 1С, но при нехватке места на диске сбой возможен в любой момент.

Сжатие файла журнала не требует отключать пользователей. Но делать его лучше вечером: во время закрытия месяца файл тут же вырастет обратно.

Шаг 1. Узнайте логическое имя файла журнала

Команде SHRINKFILE нужно не имя файла на диске, а логическое имя внутри базы:

USE buh_base;
SELECT name, type_desc, size * 8 / 1024 AS size_mb
FROM sys.database_files;

Строка с type_desc = LOG — это журнал. Обычно имя выглядит как buh_base_log.

Шаг 2, способ А. Копия журнала и сжатие (база остаётся в модели Full)

Подходит, если нужна возможность восстановить базу на любой момент времени: например, бухгалтерия с большим документооборотом.

BACKUP LOG buh_base
TO DISK = N'D:\Backup\buh_base_log.trn';

USE buh_base;
DBCC SHRINKFILE (buh_base_log, 1024);  -- целевой размер в МБ

Число 1024 — желаемый размер файла после сжатия, 1 ГБ. Не сжимайте журнал до нуля: при первой же крупной операции он начнёт расти мелкими шагами, а это медленно.

Если с первого раза файл не уменьшился, сделайте ещё одну копию журнала и повторите SHRINKFILE. Активная часть журнала могла оказаться в конце файла, после второй копии она сдвигается в начало.

Шаг 2, способ Б. Простая модель восстановления (Simple)

Подходит, если вам достаточно ежедневной полной копии и восстановление «на минуту до сбоя» не нужно. Так работает большинство небольших баз 1С.

ALTER DATABASE buh_base SET RECOVERY SIMPLE;

USE buh_base;
CHECKPOINT;
DBCC SHRINKFILE (buh_base_log, 1024);

В простой модели SQL Server сам освобождает журнал после каждой контрольной точки. Файл больше не растёт бесконечно, только до размера самой большой транзакции.

Если вы вернёте базу в Full (ALTER DATABASE buh_base SET RECOVERY FULL;), цепочка копий журнала прервётся. Сразу после переключения сделайте полную копию базы, иначе восстановление на момент времени работать не будет.

То же самое мышкой в SSMS

  1. В обозревателе объектов щёлкните базу правой кнопкой → Свойства → страница Параметры.
  2. В поле Модель восстановления выберите Простая и нажмите ОК.
  3. Снова правой кнопкой по базе → Задачи → Сжать → Файлы.
  4. В поле Тип файла выберите Журнал, отметьте вариант с указанием целевого размера и введите его в МБ.

Какой способ выбрать

СпособКогдаРиски
BACKUP LOG + сжатиенужна точка восстановления на любой моментнужен регулярный план копий журнала, иначе рост повторится
Простая модель + сжатиехватает ежедневной полной копиипотеря данных за время после последней копии
Отсоединить базу и удалить .ldfникогдабаза может не подключиться обратно, особенно после аварийной остановки
Какая модель восстановления нужна вашей базе 1С?

Сжатие файловой базы 1С

У файловой базы место занимает файл 1Cv8.1CD. При удалении документов и справочников он не уменьшается: освободившиеся страницы остаются внутри файла пустыми. Сжатие выкидывает их и перестраивает таблицы.

Порядок действий:

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

Второй вариант даёт больший эффект: выгрузить базу в .dt и загрузить её в новый пустой каталог. Файл собирается заново, без «дыр». Загрузку делайте именно в новую базу, а старую оставьте на время проверки.

Для проверки физической целостности файла без запуска Конфигуратора есть утилита chdbfl.exe в папке bin установленной платформы. Запускайте её только на базе, в которой никто не работает.

Тот же режим тестирования работает и для клиент-серверной базы, но сжатие таблиц там выполняет СУБД, и журнал транзакций SQL от этого не уменьшится. Скорее наоборот: тестирование пишет в него много данных.

Удаление старых данных: свёртка базы и сокращение журнала регистрации

Сжатие возвращает только пустое место. Если база большая из-за реальных данных за 8–10 лет, поможет удаление старых документов.

Свёртка информационной базы

В типовых конфигурациях на БСП (Бухгалтерия 3.0, УТ 11, КА 2) есть обработка свёртки. Она удаляет документы до выбранной даты и вводит на эту дату остатки по регистрам. Найти её можно через Все функции или поиском по слову «свёртка» в разделе Администрирование.

Правила, без которых свёртка превращается в аварию:

  • 🗄️ Делайте её на копии базы, сверьте отчёты (ОСВ, остатки по складам, взаиморасчёты) на дату свёртки и только потом переносите в рабочую.
  • 📅 Сворачивайте только закрытые периоды, по которым сданы отчёты и не ждут уточнёнок.
  • 🔗 Отключите обмены: узлы РИБ и синхронизация с другими базами получат тысячи изменений.
  • ⏱️ Закладывайте время. На крупной базе свёртка идёт часами.

После свёртки сожмите базу (файловый режим) или журнал и файл данных (SQL), иначе размер на диске не изменится.

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

Журнал регистрации

Журнал регистрации 1С часто путают с журналом транзакций. Он хранит историю действий пользователей и лежит в папке 1Cv8Log: в файловой базе — внутри каталога базы, в серверной — в каталоге кластера на сервере 1С. На активной базе за несколько лет он вырастает до десятков гигабайт.

Как сократить:

  1. В Конфигураторе: Администрирование → Журнал регистрации.
  2. В окне журнала найдите команду сокращения журнала (в меню действий формы).
  3. Укажите дату: записи до неё удалятся. Отметьте сохранение удаляемых записей в файл, если по регламенту историю нужно хранить.

Чтобы журнал не рос снова, в Администрирование → Настройка журнала регистрации уменьшите уровень (например, «Ошибки» вместо «Примечания») и включите разделение файлов по периодам. Старые периоды тогда можно архивировать целиком.

Не удаляйте файлы из 1Cv8Log при работающей базе: служба сервера 1С держит их открытыми. Если всё же чистите папку вручную — только после остановки службы, когда в базе нет пользователей. Остановка службы оборвёт все сеансы на этом сервере.

Регламентное обслуживание: чтобы журнал не рос снова

Однократная очистка журнала транзакций без плана обслуживания через месяц возвращает вас к исходной точке. Что настроить.

Для MS SQL Server (через «Планы обслуживания» в SSMS или задания SQL Server Agent):

  • полная копия базы — раз в сутки ночью;
  • копия журнала (только для Full) — каждые 15–60 минут в рабочее время;
  • обновление статистики — ежедневно, перестроение индексов — раз в неделю;
  • очистка старых файлов копий — например, старше 14 дней.

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

Задайте приращение файла журнала фиксированным числом, а не процентом: например, 512 МБ. При 10% от файла в 200 ГБ каждый шаг роста займёт 20 ГБ и подвесит базу.

Для файловой базы выгрузку можно поставить в планировщик Windows. Пример bat-файла:

@echo off
set V8="C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe"
set DT=D:\Backup\buh_%date:~-4%%date:~3,2%%date:~0,2%.dt
%V8% DESIGNER /F"D:\Bases\Buh" /N"Администратор" /P"пароль" /DumpIB"%DT%" /Out"D:\Backup\dump.log"

Путь к 1cv8.exe замените на свою версию платформы. Формат даты из %date% зависит от региональных настроек Windows: проверьте имя файла после первого запуска. Пароль в bat-файле храните в папке, к которой есть доступ только у администратора.

Сжатие таблиц тоже запускается из командной строки ключом /IBCheckAndRepair -IBCompression, но делать это по расписанию стоит только если ночью в базе гарантированно никого нет.

План обслуживания базы 1С
Выполнено: 0 / 6

Ошибки при очистке журнала и что с ними делать

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

Ещё две ситуации, где люди теряют данные:

  • ❌ Отсоединили базу, удалили .ldf, подключили обратно. Если база была остановлена не чисто, SQL Server не сможет её восстановить без журнала. Это не способ очистки, а риск остаться без базы.
  • ❌ Свернули рабочую базу без копии. Откатить свёртку нельзя, только восстановлением из копии.

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

Можно ли очистить журнал транзакций, не выгоняя пользователей?
Да. BACKUP LOG и DBCC SHRINKFILE работают при подключённых пользователях. Монопольный доступ к базе 1С для этого не нужен.
Какой размер журнала транзакций считать нормальным?
Ориентир — 10–25% от размера файла данных или размер самой крупной операции (закрытие месяца) с запасом. Если журнал больше базы, план обслуживания настроен неверно.
Уменьшит ли сжатие журнала размер выгрузки .dt?
Нет. Выгрузка содержит только данные 1С, журнал транзакций СУБД в неё не попадает.
Повлияет ли простая модель восстановления на скорость 1С?
Заметно — нет. Нагрузку снижает разве что отсутствие частых копий журнала, но выигрыш небольшой.
Нужно ли что-то делать в 1С после смены модели восстановления?
Нет. Модель восстановления — настройка базы на SQL Server, 1С о ней не знает и перенастройки не требует.