Файл журнала базы 1С разросся: как вернуть место на диске
Содержание
Журнал транзакций есть только у клиент-серверной базы 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
- В обозревателе объектов щёлкните базу правой кнопкой →
Свойства→ страницаПараметры. - В поле
Модель восстановлениявыберитеПростаяи нажмите ОК. - Снова правой кнопкой по базе →
Задачи → Сжать → Файлы. - В поле
Тип файлавыберитеЖурнал, отметьте вариант с указанием целевого размера и введите его в МБ.
Какой способ выбрать
| Способ | Когда | Риски |
|---|---|---|
BACKUP LOG + сжатие | нужна точка восстановления на любой момент | нужен регулярный план копий журнала, иначе рост повторится |
| Простая модель + сжатие | хватает ежедневной полной копии | потеря данных за время после последней копии |
Отсоединить базу и удалить .ldf | никогда | база может не подключиться обратно, особенно после аварийной остановки |
Сжатие файловой базы 1С
У файловой базы место занимает файл 1Cv8.1CD. При удалении документов и справочников он не уменьшается: освободившиеся страницы остаются внутри файла пустыми. Сжатие выкидывает их и перестраивает таблицы.
Порядок действий:
- Попросите всех выйти из базы. Тестирование требует монопольного доступа, Конфигуратор не начнёт его при открытых сеансах.
- Скопируйте каталог базы целиком или сделайте выгрузку
Администрирование → Выгрузить информационную базу. - В Конфигураторе откройте
Администрирование → Тестирование и исправление. - Отметьте
Сжатие таблиц информационной базы. Остальные флажки можно снять, если цель только место. - Нажмите
Выполнитьи дождитесь окончания. Для базы на 10 ГБ это обычно минуты, на медленном диске дольше.
Второй вариант даёт больший эффект: выгрузить базу
в .dt и загрузить её в новый пустой каталог. Файл собирается заново, без «дыр». Загрузку делайте именно в новую базу, а старую оставьте на время проверки.
Для проверки физической целостности файла без запуска Конфигуратора есть утилита chdbfl.exe в папке bin установленной платформы. Запускайте её только на базе, в которой никто не работает.
Тот же режим тестирования работает и для клиент-серверной базы, но сжатие таблиц там выполняет СУБД, и журнал транзакций SQL от этого не уменьшится. Скорее наоборот: тестирование пишет в него много данных.
Удаление старых данных: свёртка базы и сокращение журнала регистрации
Сжатие возвращает только пустое место. Если база большая из-за реальных данных за 8–10 лет, поможет удаление старых документов.
Свёртка информационной базы
В типовых конфигурациях на БСП (Бухгалтерия 3.0, УТ 11, КА 2) есть обработка свёртки. Она удаляет документы до выбранной даты и вводит на эту дату остатки по регистрам. Найти её можно через Все функции или поиском по слову «свёртка» в разделе Администрирование.
Правила, без которых свёртка превращается в аварию:
- 🗄️ Делайте её на копии базы, сверьте отчёты (ОСВ, остатки по складам, взаиморасчёты) на дату свёртки и только потом переносите в рабочую.
- 📅 Сворачивайте только закрытые периоды, по которым сданы отчёты и не ждут уточнёнок.
- 🔗 Отключите обмены: узлы РИБ и синхронизация с другими базами получат тысячи изменений.
- ⏱️ Закладывайте время. На крупной базе свёртка идёт часами.
После свёртки сожмите базу (файловый режим) или журнал и файл данных (SQL), иначе размер на диске не изменится.
Для нетиповых баз и старых конфигураций используют сторонние обработки свёртки и удаления данных. Перед запуском такой обработки проверьте, для какой конфигурации и версии она написана, и прогоните её на копии.
Журнал регистрации
Журнал регистрации 1С часто путают с журналом транзакций. Он хранит историю действий пользователей и лежит в папке 1Cv8Log: в файловой базе — внутри каталога базы, в серверной — в каталоге кластера на сервере 1С. На активной базе за несколько лет он вырастает до десятков гигабайт.
Как сократить:
- В Конфигураторе:
Администрирование → Журнал регистрации. - В окне журнала найдите команду сокращения журнала (в меню действий формы).
- Укажите дату: записи до неё удалятся. Отметьте сохранение удаляемых записей в файл, если по регламенту историю нужно хранить.
Чтобы журнал не рос снова, в Администрирование → Настройка журнала регистрации уменьшите уровень (например, «Ошибки» вместо «Примечания») и включите разделение файлов по периодам. Старые периоды тогда можно архивировать целиком.
Не удаляйте файлы из 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, но делать это по расписанию стоит только если ночью в базе гарантированно никого нет.
Ошибки при очистке журнала и что с ними делать
Ещё две ситуации, где люди теряют данные:
- ❌ Отсоединили базу, удалили
.ldf, подключили обратно. Если база была остановлена не чисто, SQL Server не сможет её восстановить без журнала. Это не способ очистки, а риск остаться без базы. - ❌ Свернули рабочую базу без копии. Откатить свёртку нельзя, только восстановлением из копии.