Траблшутинг ошибок Log Shipping: сбои заданий Copy Job и Restore Job
Сбои репликации доставки журналов приводят к накоплению отставания резервной базы:
- Ошибки в истории заданий:
The log shipping secondary database has not been restored for XX minutes (Error 14420 / 14421); - Задание LSCopy падает с ошибкой
Access to the path is deniedилиThe network name cannot be found; - Задание LSRestore падает с ошибкой
The file is too recent to apply to the databaseили рассинхронизацией цепочки LSN.
1. Проверка общего статуса Log Shipping через системный отчет
EXEC msdb.dbo.sp_help_log_shipping_monitor;Анализ полей delta_threshold и last_restored_latency показывает фактическое отставание в минутах.
2. Решение ошибки 'Access Denied' в Copy Job
Учетная запись, под которой работает служба SQL Server Agent на Secondary сервере, должна иметь права Read/Write на сетевую папку бэкапов первичного сервера:
-- Проверка доступности сетевой шары из-под инстанса через xp_cmdshell (для тестов)
EXEC xp_cmdshell 'dir \\primary-server\LogShippingBackup';3. Устранение рассинхронизации цепочки LSN (Restore Job Failure)
Если цепочка прервана (кто-то сделал ручной бэкап без COPY_ONLY):
- Откройте таблицу истории восстановления на Secondary:
SELECT TOP 10 * FROM msdb.dbo.restorehistory
WHERE destination_database_name = 'ERP_1C'
ORDER BY restore_date DESC;- Найдите последний успешно примененный LSN (поле
stop_lsn); - Вручную скопируйте недостающие файлы
.trnс первичного сервера и накатите их с параметромNORECOVERY.
4. Исправление заблокированных файлов в режиме STANDBY
Если Restore Job падает из-за того, что пользователи читают отчеты, включите принудительный сброс соединений:
EXEC msdb.dbo.sp_change_log_shipping_secondary_database
@secondary_database = N'ERP_1C',
@disconnect_users = 1; Частые вопросы (FAQ)
Что делать, если ошибка 14420 продолжает появляться при работающем Log Shipping?
Проверьте Alert Job на сервере-мониторе. Часто рассинхронизация часовых поясов или сбой системного времени между серверами приводит к ложному расчету задержки порога порождаемых предупреждений.
Почему файлы логов накапливаются на secondary сервере и не удаляются?
За удаление старых файлов отвечает параметр @retention_period в свойствах Copy/Restore заданий. Проверьте историю шага 'Delete old files' внутри задания LSRestore.
Как переинициализировать Log Shipping без создания нового тяжелого Full бэкапа?
Сделайте свежий Differential бэкап на Primary, скопируйте его, восстановите на Secondary с WITH NORECOVERY, после чего перезапустите стандартные джобы Copy/Restore.
Почему Restore Job выдает ошибку 'Too many open files'?
Если вторичный сервер долго простаивал, в папке накопились тысячи файлов .trn. Настройте расписание джоба на обработку файлов небольшими пачками или накатите их пакетным скриптом PowerShell.