Sql-Server-2008

從正在執行的作業中獲取作業 ID 或作業名稱

  • November 20, 2019

我有一個中央數據庫,我將所有伺服器上的工作結果寫回。我通過 SQL 作業中的 powershell 將 3 個參數傳遞回中央伺服器上的 sp,以驗證作業當時應該正在執行,等等。然後通過 SSRS 公開資訊,因此我們可以看到作業失敗/長時間執行的作業/ & 尚未執行但應該執行的作業(或者如果有人弄亂了日程安排)。

為此,我在每台伺服器上的每個作業中添加了 2 個作業步驟,我想將腳本減少到每個作業僅添加 1 個步驟..甚至可能從網路共享中呼叫它..

但我的問題是我傳遞的 3 個參數之一。我需要從正在執行的作業中獲取正在執行的作業 ID 或作業名稱,因此我不必對名稱參數進行硬編碼。我傳遞的 3 個參數是 jobid、status(success/fail)、errormsg。我編寫的 powershell 腳本非常簡單。

呼叫-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 數據提供程序”,所以我無法從顯示為“SQLAgent - TSQL JobStep (Job 0xF1800243164745429C30474FFD5C990C : Step 1)" —這是我從Denny cherry 的文章中學到的- 謝謝 denny-

任何關於如何獲取正在執行的 jobid 的想法都將不勝感激。

謝謝,

克里斯

您必須在工作步驟中使用令牌來獲取自己的工作 ID。此處的詳細資訊:在作業步驟中使用標記

在文章的最後有一個 jobid 的例子:

SELECT * FROM msdb.dbo.sysjobs
WHERE @JobID = CONVERT(uniqueidentifier, $(ESCAPE_NONE(JOBID))) ; 

檢查這個:

DECLARE @jobId BINARY(16)

SELECT @jobId = CONVERT(uniqueidentifier, job_id) FROM msdb.dbo.sysjobs
WHERE name = 'Your_Job_Name'

引用自:https://dba.stackexchange.com/questions/13347