MSSQL Error 9015: An error occurred while scanning log records for replication
- Агент чтения журнала (Log Reader Agent) падает с ошибкой
Error 9015: An error occurred while scanning log records for replication in database. - Журнал транзакций (LDF) базы 1С / СУБД бесконечно разрастается, а столбец
log_reuse_wait_descвsys.databasesпоказывает значениеREPLICATIONилиCDC. - Команда
DBCC SHRINKFILEне освобождает дисковое пространство журнала. - Остановка процессов выгрузки данных и репликации между филиалами и центральной базой.
1. Анализ причины удержания журнала транзакций
SELECT name, log_reuse_wait, log_reuse_wait_desc
FROM sys.databases
WHERE name = 'upp_production';
DBCC OPENTRAN('upp_production');
EXEC sp_replshowcmds;2. Проверка целостности метаданных репликации и LSN
USE upp_production;
GO
EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1;Команда sp_repldone с параметром @reset = 1 сбрасывает указатель ожидающих репликации транзакций и помечает все распределенные транзакции как прочитанные.
3. Очистка контекста CDC (если включен сбор изменений)
EXEC sys.sp_cdc_stop_job @job_type = N'capture';
EXEC sys.sp_cdc_start_job @job_type = N'capture';4. Принудительное усечение и сжатие журнала
BACKUP LOG upp_production TO DISK = 'NUL';
DBCC SHRINKFILE (upp_production_log, 2048);5. Переинициализация подписки репликации (при повреждении LSN)
EXEC sp_refreshsubscriptions @publication = 'Pub_1C_Data'; Частые вопросы (FAQ)
Почему ошибка 9015 возникает в базах 1С, где репликация не настраивалась явно?
Ошибка часто возникает, если на базе ранее тестировался функционал Change Data Capture (CDC) или был включен Transactional Replication, после чего публикацию удалили некорректно, оставив внутренние системные флаги репликации активными в sys.databases.
Безопасно ли выполнять sp_repldone с параметром @reset = 1?
Это действие сбрасывает очередь репликации и помечает все транзакции как доставленные подписчикам. После этого вам потребуется выполнить повторную инициализацию (re-initialize) или создание снапшота подписки, иначе возникнет рассинхронизация данных.
Как предотвратить повторное разрастание LDF при ошибке 9015?
Необходимо настроить регулярный мониторинг счетчика Log Bytes Flushed/sec и проверять статус работы агента SQL Server Agent, отвечающего за шаг чтения лога репликации (Log Reader Agent).
Поможет ли перевод базы в режим Simple Recovery Model?
Перевод в Simple снимет ожидание транзакционного лога, но автоматически отключит и сломает всю транзакционную репликацию. Если репликация критически необходима, нужно сохранять Full и сбрасывать LSN через sp_repldone.