При выполнении типовой или нетиповой свертки информационных баз 1С (например, УПП 1.3), работающих под управлением СУБД Microsoft SQL Server, администраторы и разработчики часто сталкиваются с критической ошибкой: «Журнал транзакций для БД заполнен» (The transaction log for database is full). Попытки выполнить стандартное сжатие файла лога (Shrink) через SQL Server Management Studio нередко заканчиваются неудачей, и операция свертки аварийно прерывается.
Разберем детально, почему возникает данная ситуация, как быстро восстановить работоспособность базы и какие регламентные действия необходимо соблюдать при масштабных операциях с данными.
Проанализируем механику работы СУБД. В процессе свертки базы данных 1С удаляется колоссальное количество строк из регистров и документов, а также формируются новые корректирующие документы с остатками. Любая операция удаления или изменения обязательно фиксируется в журнале транзакций (файле с расширением .ldf). Переполнение возникает по нескольким основным причинам:
Full СУБД сохраняет все транзакции до тех пор, пока не будет создана резервная копия самого журнала транзакций (Log Backup). Если резервное копирование лога не настроено с достаточной частотой, файл .ldf непрерывно растет и заполняет всё свободное место на диске._ChangeRec), что удваивает объем записываемых в лог данных.Посмотрим, как определить точную причину блокировки журнала. Для этого выполним системный запрос в среде SQL Server Management Studio:
SELECT name, recovery_model_desc, log_reuse_wait_desc
FROM sys.databases
WHERE name = 'Имя_Вашей_Базы_1С';
Проанализируем столбец log_reuse_wait_desc в возвращенном результате:
Full. Пока бэкап лога не сделан, очистка и сжатие файла невозможны.Разберем по шагам наиболее эффективный алгоритм устранения ошибки при проведении объемной свертки:
Full на Simple. В простой модели восстановления завершенные транзакции автоматически усекаются, а место внутри файла .ldf повторно используется для следующих операций.Simple выполняем сжатие файла журнала: переходим в меню Tasks -> Shrink -> Files, выбираем тип файла Log и освобождаем неиспользуемое пространство.Autogrowth для лога транзакций. Рекомендуется задать фиксированный шаг расширения (например, 512 МБ или 1024 МБ) и установить максимальный размер в значение Unlimited (при наличии достаточного запаса на диске).Full (если для производственной базы требуется восстановление на определенный момент времени). Критически важно: смена модели разрывает цепочку журналов, поэтому сразу после возврата в Full необходимо повторно создать полный бэкап базы данных, иначе создание инкрементных резервных копий журнала будет невозможным.Рассмотрим рекомендации, которые позволят избежать переполнения лога даже при больших объемах удаляемых движений:
ЗафиксироватьТранзакцию(). В модели Simple это гарантирует циклическое переиспользование журнального файла без его разрастания.Массовое удаление миллионов записей приводит к колоссальной фрагментации индексов и искажению статистик. После завершения всех этапов свертки и успешного сжатия журнала обязательно выполним процедуры обслуживания:
.mdf) для возврата неиспользуемого пространства операционной системе с последующим обязательным дефрагментированием индексов.