Идентификатор задания или Идентификатор задания от выполнения задания

У меня есть центральная БД, где я пишу результаты работы на всех моих серверах. Я передаю 3 параметра через powershell в SQL-задании обратно на sp на центральном сервере, который проверяет, что задание должно выполняться в это время и т. Д. Затем информация открывается через SSRS, чтобы мы могли видеть неудачи работы /длительные рабочие задания /& амп; рабочие места, которые не выполнялись, но должны были (или если кто-то испортил график).

Для этого у меня есть два этапа работы, добавленные в каждое задание на каждом сервере, и я хотел бы уменьшить сценарий до всего лишь одного шага, добавленного к каждому заданию. Возможно, даже вызывать его из сетевого ресурса.

Но моя проблема - это один из трех параметров, которые я передаю. Мне нужно получить исполняемое задание или имя задания из исполняемого задания, поэтому мне не нужно жестко указывать параметр имени. 3 параметра, которые я передаю, это jobid, status (success /fail), 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 / но ни один из них не гарантирует, что я получу идентификатор или имя правильного исполняемого задания в случае, если одновременно выполняется более одного задания.

Я даже попробовал посмотреть на sys.sysprocesses, но я думаю, так как задание агента является скриптом powershell, оно отображается как «.Net SqlClient Data Provider», поэтому я не могу урезать двоичный JOBID с заданий, которые отображаются как "SQLAgent - TSQL JobStep (задание 0xF1800243164745429C30474FFD5C990C: Шаг 1)" --- это я узнал из сообщения Denny cherry - спасибо денни -

Приветствуются любые идеи о том, как захватить исполняемый файл jobid.

Спасибо,

Крис

10 голосов | спросил CleanFill 17 FebruaryEurope/MoscowbFri, 17 Feb 2012 21:18:59 +0400000000pmFri, 17 Feb 2012 21:18:59 +040012 2012, 21:18:59

4 ответа


15

Вам нужно будет использовать токены в своих шагах задания, чтобы получить свой собственный идентификатор задания. Подробнее здесь: Использование токенов в шагах работы .

В конце статьи есть один пример с jobid:

SELECT * FROM msdb.dbo.sysjobs
WHERE @JobID = CONVERT(uniqueidentifier, $(ESCAPE_NONE(JOBID))) ; 
ответил Marian 17 FebruaryEurope/MoscowbFri, 17 Feb 2012 23:41:15 +0400000000pmFri, 17 Feb 2012 23:41:15 +040012 2012, 23:41:15
2

Чтобы заставить это работать, я использовал командлет invoke-sqlcmd в powershell, хотя агент sql. Используя полученную мной информацию, это то, с чем я столкнулся, работал.

$ var = Invoke-sqlcmd -Server "Server \ Instance" -Query "выберите имя из msdb.dbo.sysjobs WHERE job_id = CONVERT (uniqueidentifier, $ (ESCAPE_SQUOTE (JOBID))) - Это дает мне работу имя во время выполнения

$ varname = $ var.name - здесь мне нужно просто ввести имя в переменную

Invoke-sqlcmd -Server "server \ instance" -Database "удаленная база данных" -Query "exec dbo.JOB_LOG $ varname, 'JOB STATUS HERE', 'LOG MESSAGE ЗДЕСЬ'; - я передаю это удаленной системе

Одна часть, которая меня достала, заключалась в том, что мне пришлось добавить эту строку

$ varname = $ var.name

, потому что если бы я этого не добавил, начальная переменная $ var передавала бы в заголовок system.data.datatable long с именем столбца задания, поэтому она вызывала ошибку во время выполнения запроса.

Надеюсь, это поможет кому-то еще по дороге.

ответил CleanFill 22 FebruaryEurope/MoscowbWed, 22 Feb 2012 18:04:34 +0400000000pmWed, 22 Feb 2012 18:04:34 +040012 2012, 18:04:34
0

Проверьте это:

DECLARE @jobId BINARY(16)

SELECT @jobId = CONVERT(uniqueidentifier, job_id) FROM msdb.dbo.sysjobs
WHERE name = 'Your_Job_Name'
ответил Gerben Kolkman 25 22014vEurope/Moscow11bEurope/MoscowTue, 25 Nov 2014 22:45:12 +0300 2014, 22:45:12
-2

DECLARE @jobname sysname, @jobid uniqueidentifier

SELECT @ jobname = b.name, @ jobid = b.job_id
FROM sys.dm_exec_sessions a, msdb.dbo.sysjobs b WHERE a.session_id = @@ spid А ТАКЖЕ (SUBSTRING (MASTER.dbo.FN_VARBINTOHEXSTR (CONVERT (VARBINARY (16), b.JOB_ID)), 1,10)) = SUBSTRING (a.PROGRAM_NAME, 30,10)

ответил Virendra Agrawal 24 FebruaryEurope/MoscowbWed, 24 Feb 2016 20:37:39 +0300000000pmWed, 24 Feb 2016 20:37:39 +030016 2016, 20:37:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132