모든 서버에서 작업 결과를 기록하는 중앙 DB가 있습니다. SQL 작업의 powershell을 통해 3 개의 매개 변수를 중앙 서버의 sp로 다시 전달하여 해당 시간에 작업이 실행되고 있는지 확인하는 등의 작업을 수행합니다. 그런 다음 SSRS를 통해 정보가 노출되어 작업 실패 / 장기 작업 / 실행되지 않았지만 가지고 있어야하는 작업 (또는 누군가 일정을 엉망으로 만든 경우)
이렇게하려면 모든 서버의 각 작업에 2 개의 작업 단계가 추가되어 있으며 각 작업에 추가 된 1 단계로 스크립트를 줄이려고합니다. 네트워크 공유에서 호출 할 수도 있습니다.
그러나 내 문제는 내가 전달하는 3 가지 매개 변수 중 하나입니다. 실행 작업 내에서 실행 jobid 또는 작업 이름을 가져와야하므로 name 매개 변수를 하드 코딩 할 필요가 없습니다. 내가 전달하는 3 개의 매개 변수는 jobid, status (success / fail), errormsg입니다. 내가 작성한 powershell 스크립트는 매우 간단합니다.
Invoke-sqlcmd -ServerInstance "MYRemoteSYSTEM"-데이터베이스 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 /를 보았지만 이들 중 어느 것도 실행중인 작업이 2 개 이상인 경우 올바른 실행 작업의 ID 또는 이름을 얻지 못할 것입니다 동시.
sys.sysprocesses를 살펴 보았지만 에이전트 작업이 파워 쉘 스크립트이므로 ".Net SqlClient Data Provider"로 표시되므로 "SQLAgent-로 표시되는 작업에서 바이너리 JOBID를 잘라낼 수 없습니다. TSQL JobStep (Job 0xF1800243164745429C30474FFD5C990C : 1 단계) "--- Denny cherry의 포스트 에서 배웠 습니다 -감사합니다 denny-
실행중인 jobid를 얻는 방법에 대한 아이디어는 크게 감사하겠습니다.
감사,
크리스