從正在執行的作業中獲取作業 ID 或作業名稱
我有一個中央數據庫,我將所有伺服器上的工作結果寫回。我通過 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'