В основном мне нужно создать сценарий оболочки для:
- запустить задание агента SQL на удаленном сервере
- подождите, пока он запустится
- проверить статус завершения и иметь возможность сохранить / вывести его, чтобы его можно было использовать в дальнейшем
Я планирую создать хранимую процедуру с таким параметром имени задания:
-- Start job
EXEC msdb.dbo.sp_start_job @job_name = @job_name
-- Wait for Job to finish
DECLARE @job_status INT
SELECT @job_status = current_execution_status FROM OPENROWSET('SQLNCLI', 'Server=<server>;','exec msdb.dbo.sp_help_job @job_name = @job_name ')
WHILE @job_status <> 4
BEGIN
WAITFOR DELAY '00:00:03'
SELECT @job_status = current_execution_status FROM OPENROWSET('SQLNCLI', 'Server=<server>;','exec msdb.dbo.sp_help_job @job_name = @job_name')
END
-- Get Result
SELECT TOP 1 @job_history_id = activity.job_history_id
FROM msdb.dbo.sysjobs jobs
INNER JOIN msdb.dbo.sysjobactivity activity ON activity.job_id = jobs.job_id
WHERE jobs.name = @job_name
ORDER BY activity.start_execution_date DESC
SELECT history.run_status
FROM msdb.dbo.sysjobhistory history
WHERE history.instance_id = @job_history_id
В идеале я мог бы запускать каждое задание агента SQL через этот store_proc, чтобы я мог очень легко вызывать этот store_proc через sqlcmd
с именем задания в качестве параметра и сохранять вывод как результат задания.
Поскольку я не самый опыт работы с SQL Server, я обращаюсь к вам за помощью.
- Эффективен ли мой хранимый процесс? может ли кто-нибудь просветить меня на лучший способ сделать это?
- Должен ли этот хранимый процесс быть создан в базе данных msdb, и если да, то должен ли он быть сохранен как системный объект?
- Будет ли это публиковать проблему с миграциями или каким-либо управлением (например, специальные действия для переноса версий SQL/на разные серверы, чтобы сохранить этот хранимый процесс)?
Заранее спасибо за любую поддержку.