У меня есть центральная БД, в которую я записываю результаты работы на всех моих серверах. Я передаю 3 параметра через powershell в задании SQL обратно в sp на центральном сервере, который проверяет, что задание должно быть запущено в это время, и т. Д. Затем информация предоставляется через SSRS, чтобы мы могли видеть сбои заданий / длительные задания / & задания, которые не выполнялись, но должны были выполняться (или если кто-то испортил расписание).
Чтобы сделать это, у меня есть 2 шага задания, добавленных к каждому заданию на каждом сервере, и я хотел бы сократить сценарий до 1 шага, добавленного к каждому заданию .. возможно, даже вызвать его из общего сетевого ресурса.
Но моя проблема - один из трех параметров, которые я передаю. Мне нужно получить исполняемый идентификатор задания или имя задания из выполняемого задания, поэтому мне не нужно жестко задавать параметр имени. Я передаю 3 параметра: jobid, статус (успех / неудача), errormsg. Сценарий powershell, который я написал, довольно прост.
Invoke-sqlcmd -ServerInstance "MYRemoteSYSTEM" -Database RemoteDB -Query "exec dbo.JOB_LOG 'JOBNAME / ID', 'Success / FAIL', 'BAD MESSAGE HERE'"
Это пишет то, что мне нужно к таблице. Я посмотрел на msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs /, но ни один из них не гарантирует, что я получу идентификатор или имя правильного выполняемого задания в том случае, если в нем выполняется более 1 задания в то же время.
Я даже пытался взглянуть на sys.sysprocesses, но я думаю, что, поскольку задание агента является сценарием PowerShell, он отображается как «.Net SqlClient Data Provider», поэтому я не могу обрезать двоичный JOBID из заданий, которые отображаются как «SQLAgent - TSQL JobStep (Job 0xF1800243164745429C30474FFD5C990C: Шаг 1) "--- это я узнал из поста Денни Черри - спасибо denny-
Буду очень признателен за любые идеи о том, как захватить выполняемый jobid.
Спасибо,
Крис
источник
Чтобы заставить это работать, я использовал
invoke-sqlcmd
командлет в powershell через агент sql. Используя информацию, которую я получил выше, я понял, что сработало:Одна часть, которая получила меня, была то, что я должен был добавить эту строку
потому что, если бы я не добавил это, начальная переменная $ var передавала бы длинный заголовок system.data.datatable с именем столбца задания, поэтому это приводило к тому, что переменная мешала выполнению запроса во время выполнения.
Надеюсь, что это может помочь кому-то еще в будущем.
источник
Проверь это:
источник
источник