Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

MSSQL Error 9503: The transaction log cannot be truncated because of pending CDC scan

Обновлено: 25.08.2026  ·  Официальная база знаний
  • Файл журнала транзакций (.ldf) заполняет все доступное место на диске.
  • В колонке log_reuse_wait_desc таблицы sys.databases зафиксирован статус CDC_SCAN или REPLICATION.
  • Регулярные задания бэкапа журнала (Log Backup) выполняются успешно, но физический размер LDF не сжимается.
  • Агент сбора данных CDC cdc.dbname_capture зависает или останавливается с ошибкой.

1. Проверка состояния системных сессий и буфера CDC

SELECT name, log_reuse_wait, log_reuse_wait_desc 
FROM sys.databases 
WHERE name = DB_NAME();

-- Проверка прогресса захвата CDC
EXEC sys.sp_cdc_help_jobs;
SELECT * FROM sys.dm_cdc_log_scan_sessions;

2. Принудительный сброс сессии захвата CDC

USE your_db_name;
GO
EXEC sys.sp_cdc_stop_job @job_type = N'capture';
GO
-- Ручной запуск единичного сканирования с фиксацией LSN
EXEC sys.sp_cdc_scan @maxtrans = 500, @maxscans = 10, @continuous = 0;

3. Аварийный сброс флага CDC в журнале транзакций

Если CDC завис из-за поврежденной транзакции и не позволяет освободить LDF:

EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1;

4. Перезапуск регламентного задания CDC

EXEC sys.sp_cdc_start_job @job_type = N'capture';

5. Сжатие освобожденного файла журнала

BACKUP LOG your_db_name TO DISK = 'NUL';
DBCC SHRINKFILE (your_db_name_Log, 4096);
Практический опыт инженера: Если в 1С включен CDC для интеграции с внешними шинами данных (Kafka, RabbitMQ, DWH), обязательно выносите LDF файл на отдельный высокопроизводительный NVMe массив, так как двойное чтение/запись лога создает колоссальную нагрузку на дисковую очередь.

Частые вопросы (FAQ)

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

Change Data Capture читает журнал транзакций напрямую. Пока агент сбора не обработает и не запишет все изменения в таблицы отслеживания (cdc.*_CT), ядро СУБД запрещает усекать эти участки LDF во избежание потери истории изменений.

Как полностью отключить CDC на базе 1С, если он больше не используется?

Выполните скрипт: USE your_db_name; EXEC sys.sp_cdc_disable_db; Это удалит все системные таблицы CDC, схемы и задания агента.

Почему задание cdc.dbname_capture перестает успевать за транзакциями 1С?

При массовых операциях (например, проведение документов за период или групповое перепроведение) генерация лога опережает параметры maxtrans/maxscans по умолчанию. Отрегулируйте параметры задания через sp_cdc_change_job.

Влияет ли Simple Recovery Model на работу CDC?

Нет, CDC поддерживается и в Simple Recovery Model, однако механизм удержания виртуальных файлов журнала (VLF) до завершения сканирования CDC остается идентичным.