Mazmunga o'tish
Tez Base

Расшифровка ошибки 1С

"Журнал транзакций для базы данных "YourDb" переполнен"

Где возникает
Клиент-серверная 1С на MS SQL Server. Окно "Ошибка СУБД" получает любой сеанс, который пытается записать данные: проведение, обмен, регламентное задание. Чтение и отчёты обычно ещё работают.
Что значит
Файл .ldf вашей рабочей базы заполнен, а вырасти ему некуда: кончился диск или упёрся заданный потолок размера. Затереть старые записи SQL Server не вправе, они ещё кому-то нужны. Кому, написано после "due to" или "из-за".
Как ещё выглядит этот текст
  • The transaction log for database is full due to LOG_BACKUP
  • The transaction log for database is full due to ACTIVE_TRANSACTION
  • The transaction log for database is full due to AVAILABILITY_REPLICA
  • The transaction log for database is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
  • Журнал транзакций для базы данных переполнен из-за LOG_BACKUP
  • Журнал транзакций для базы данных переполнен из-за ACTIVE_TRANSACTION
  • журнал транзакций переполнен 1с
  • transaction log is full 1c
  • native=9002
  • ошибка 9002
  • Error 9002 SQL Server
  • журнал транзакций переполнен log_reuse_wait_desc

Причины

Причина Как узнать Как часто
Модель восстановления FULL, а резервных копий журнала нет или они идут слишком редко log_reuse_wait_desc = LOG_BACKUP, recovery_model_desc = FULL; в плане обслуживания только полные бэкапы базы чаще всего у нас, в большинстве обращений про журнал
Длинная или зависшая открытая транзакция: оборванный сеанс, упавшее регламентное задание, массовая обработка одной транзакцией log_reuse_wait_desc = ACTIVE_TRANSACTION; DBCC OPENTRAN показывает старую транзакцию встречали сами
Реструктуризация таблиц при обновлении конфигурации в модели FULL: журнал за одно обновление вырастает в разы Ошибка всплыла во время или сразу после обновления конфигурации с изменением структуры известная причина
Вторичная реплика AlwaysOn отстала и ещё не применила записи журнала log_reuse_wait_desc = AVAILABILITY_REPLICA известная причина, у нас не встречалась

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

  1. Прочитайте хвост сообщения. После “due to” (в русской локализации “из-за”) SQL Server уже назвал причину. Если в тексте стоит tempdb, вам на другую страницу: ошибка 9002 в tempdb. Если имя рабочей базы, идём дальше.

  2. Снимите диагноз двумя запросами. Первый покажет модель восстановления и держателя, второй - сколько процентов журнала занято по каждой базе экземпляра.

-- что мешает переиспользовать журнал
SELECT name, recovery_model_desc, log_reuse_wait_desc
FROM sys.databases
WHERE name = 'YourDb';

-- размер журнала и процент заполнения по всем базам
DBCC SQLPERF(LOGSPACE);
  1. При LOG_BACKUP сделайте копию журнала прямо сейчас, на диск, где есть место. Сразу после неё место внутри файла освободится.
-- разовая копия журнала, место внутри .ldf освободится после неё
BACKUP LOG [YourDb]
TO DISK = N'E:\Backup\YourDb_log_01.trn';

Потом поставьте копии журнала в план обслуживания с шагом 15-60 минут или осознанно перейдите на SIMPLE (см. вопросы ниже).

  1. При ACTIVE_TRANSACTION ищите сеанс-держатель.
-- самая старая открытая транзакция в базе
DBCC OPENTRAN ('YourDb');

-- все открытые транзакции базы с сеансами, старые сверху
SELECT s.session_id, s.login_name, s.host_name, s.program_name,
       t.transaction_begin_time
FROM sys.dm_tran_database_transactions dt
JOIN sys.dm_tran_active_transactions t ON t.transaction_id = dt.transaction_id
JOIN sys.dm_tran_session_transactions st ON st.transaction_id = dt.transaction_id
JOIN sys.dm_exec_sessions s ON s.session_id = st.session_id
WHERE dt.database_id = DB_ID('YourDb')
ORDER BY t.transaction_begin_time;

В host_name для 1С окажется сервер приложений srv1c: в СУБД ходят рабочие процессы, а не компьютеры пользователей. Человека ищут по журналу регистрации. Без доступа к SQL Server это делает обработка “Диагностика журнала транзакций”: называет держателя по имени и компьютеру и печатает скрипт для администратора. Сеанс завершают в консоли кластера 1С, KILL на стороне SQL - крайняя мера: откат идёт почти столько же, сколько жила транзакция.

  1. Нужна минута форы, а диск забит? Добавьте второй файл журнала на другой диск, когда причина снята - уберите его через REMOVE FILE.
-- временный второй файл журнала на другом диске
ALTER DATABASE [YourDb]
ADD LOG FILE (NAME = YourDb_log2, FILENAME = N'F:\SQLLog\YourDb_log2.ldf',
              SIZE = 4GB, FILEGROWTH = 1GB);
  1. Журнал снова переиспользуется - один раз сожмите файл и задайте приращение в мегабайтах. Мелкий шаг дробит журнал на тысячи VLF и тормозит старт базы.
USE [YourDb];
-- целевой размер в мегабайтах, с запасом под обычную нагрузку
DBCC SHRINKFILE (YourDb_log, 8192);

ALTER DATABASE [YourDb]
MODIFY FILE (NAME = YourDb_log, FILEGROWTH = 1GB);

Как проверить, что исправлено

  • Запрос из шага 2 показывает NOTHING или LOG_BACKUP, который сбрасывается после каждой копии журнала.
  • Процент в DBCC SQLPERF(LOGSPACE) падает после бэкапа журнала.
  • Документ в 1С проводится, обмен проходит без ошибки СУБД.
  • Через неделю .ldf того же размера, что после шринка. Растёт - причина не снята, назад к шагу 2.

Чтобы не встретить её снова

Переполнение с ровным шагом, раз в неделю, означает FULL без копий журнала. Внезапное посреди дня - чью-то длинную транзакцию. Модель восстановления, размер и приращение журнала с вердиктом по каждому пункту проверяет чек-ап СУБД под 1С.

Наш случай

В проекте свёртки крупной базы журнал транзакций занимал 119 ГБ. После того как модель восстановления и расписание бэкапов привели в порядок, он ужался до 8 ГБ и обратно больше не распухал. Шринк сам по себе этого результата не дал.

Разбор: почему разрастается LDF и как выбрать модель восстановления

Похожие ошибки

Журнал переполняется второй раз за месяц, а шринк уже не спасает?

Подбираем модель восстановления под допустимую потерю данных, ставим бэкапы журнала и сторож зависших транзакций с оповещением в Telegram.

Narxi
450 000 ₸ danbir martalik sozlash; kuzatib borish - oyiga 150 000 ₸ dan; soliqlarsiz

Yozishga erta? O'zingiz o'lchang

Чек-ап СУБД под 1С: 40+ проверок с вердиктом по каждой

Ishlov berishni ochish

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

В тексте ошибки стоит tempdb, а не имя нашей базы. Это сюда?

Нет. Журнал tempdb общий на весь экземпляр SQL Server, бэкапы журнала к нему не относятся, и лечится он по-другому: ищут держателя длинной транзакции и смотрят version store. Пошагово это разобрано в статье про ошибку 9002 в tempdb, ссылка в первом шаге.

Можно сразу перевести базу в SIMPLE, чтобы ошибка ушла?

Журнал освободится на ближайшей контрольной точке. Цена: восстановиться можно будет только на момент последнего полного или разностного бэкапа, цепочка копий журнала рвётся. Решает владелец данных: сколько часов работы он готов потерять.

Сделали DBCC SHRINKFILE, а файл не уменьшился. Почему?

Пока журнал не стал переиспользуемым, сжимать нечего: все записи заняты. Сначала снимают держателя (бэкап журнала или завершение транзакции), потом сжимают один раз и с запасом, а не в ноль.

Проверено: MS SQL Server, ноябрь 2026

Vazifani muhokama qilamiz

Eng tezi WhatsApp: vazifa haqida bir-ikki qator yozing, ish kuni davomida javob beramiz.

[email protected]

Arizani forma orqali qoldirish qulayroq