Траблшутинг падений заданий SQL Server Agent при резервном копировании
- Задание SQL Server Agent завершается со статусом
Failed(код возврата 1). - В системном журнале MSDB фиксируются ошибки доступа:
Operating system error 5 (Access is denied)при записи файла .bak. - Таймаут выполнения шага бэкапа и прерывание сессии процессами с высоким приоритетом или дедлоками.
- В истории задания отображается ошибка
The step did not succeed, Subsystem: TSQL.
1. Получение полной ошибки из системных таблиц msdb
SELECT
j.name AS JobName,
h.step_id AS StepID,
h.step_name AS StepName,
h.message AS ErrorMessage,
msdb.dbo.agent_datetime(h.run_date, h.run_time) AS ExecutionTime,
h.run_duration AS DurationInSeconds
FROM msdb.dbo.sysjobs j
JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id
WHERE h.run_status = 0 -- 0 = Failed
ORDER BY h.instance_id DESC;2. Проверка сервисной учетной записи и разрешений NTFS/SMB
Учетная запись, от имени которой запущен экземпляр SQL Server (или SQL Agent Proxy), должна обладать разрешениями Full Control или Modify + Write на сетевую папку бэкапов.
-- Проверка учетной записи службы через DMV
SELECT servicename, service_account, status_desc
FROM sys.dm_server_services;3. Проверка конфликтов с maintenance-планами и VSS бэкапами
Если параллельно отрабатывает snapshot-бэкап виртуализации (Veeam, Commvault) или реиндексация, LSN цепочка может нарушаться. Отключите overlapping расписания в sysschedules.
4. Включение расширенного логирования вывода шага (Job Step Output)
EXEC msdb.dbo.sp_update_jobstep
@job_name = N'DatabaseBackup - USER_DATABASES - FULL',
@step_id = 1,
@output_file_name = N'C:\SQL_Logs\BackupJob_Step1_Output.log'; Частые вопросы (FAQ)
Почему вручную бэкап в SSMS выполняется успешно, а через SQL Agent падает с ошибкой Access is Denied?
При ручном запуске в SSMS T-SQL запрос выполняется в контексте учетной записи службы SQL Server Engine. Если же задание Agent запускает PowerShell/CmdExec шаг или работает через Proxy, используются другие учетные данные, у которых может отсутствовать доступ к сетевой шаре.
Как увеличить таймаут ожидания выполнения шага задания?
В T-SQL шагах таймаут по умолчанию не ограничен (0), однако если задание вызывает внешний скрипт через sqlcmd или powershell, необходимо настроить флаг -t <секунды> в командной строке.
Где посмотреть логи самого SQL Server Agent, если задание даже не успело стартовать?
Файлы журнала агента расположены в каталоге логов инстанса: C:\Program Files\Microsoft SQL Server\MSSQLXX.MSSQLSERVER\MSSQL\Log\SQLAGENT.OUT.
Что делать, если задание падает с ошибкой 'The job failed. Unable to determine if the owner has server access'?
Смените владельца (owner) джобы на учетную запись 'sa' с помощью скрипта: EXEC msdb.dbo.sp_set_job_owner @job_name = 'Имя_Задания', @new_owner_name = 'sa'.