0

diff SQL Server의 대략 5/10 작업에 대한 'Job Activies'에 대한 SQL 쿼리 작성에 도움이 필요합니다. 기본적으로 아래의 목록을 생성해야합니다. 아래 작업이 표시 될 때마다 Job Activity로 이동하십시오. 이름이 'MAINTENANCE - BACKUP ..'인 것이 가장 이상적이며, 다음 열 - Enabled/Status/Last Run이 이상적입니다. 결과/마지막 실행/다음 실행SQL 쿼리를 작성하여 24 시간 내에 작업 실패를 나열하십시오.

enter image description here

내가 사용하는 채용 assitain 수있게되면, 그때의 시간의 메모를 만드는 24 시간 기간 내에 각 작업의 역사를 확인할 것 등 성공 각각의 실패 및 오류/이유. 나는 여러 종류의 질의를 인터넷에서 찾을 수 있는데, 내가 원하는 세부 사항을 알려주지 만 코드/질의를 재정렬하고 구체적으로 필요한 것을 골라내는 방법에 대해서는 확신 할 수 없다.

+0

무엇을 시도 했습니까? 문제가 발생한 것을 정확히 보여주는 코드를 게시 할 수 있습니까? –

+0

[link] (http://pastebin.com/Mk4Uv7CN) 및 [link] (http://pastebin.com/QwiBBMW1)은 내가 놀고있는 두 세트의 코드입니다. – JChutey

+0

알림 목록에 자신을 추가하십시오. 작업이 실패 할 때 쉬워요. –

답변

1

당신은 날짜를 통해이 코드에서 뷰를 생성하고 그것에서 선택할 수 있습니다 :

SELECT Job.instance_id 
    ,SysJobs.job_id 
    ,SysJobs.name as 'JOB_NAME' 
    ,SysJobSteps.step_name as 'STEP_NAME' 
    ,Job.run_status 
    ,Job.sql_message_id 
    ,Job.sql_severity 
    ,Job.message 
    ,Job.exec_date 
    ,Job.run_duration 
    ,Job.server 
    ,SysJobSteps.output_file_name 
FROM (SELECT Instance.instance_id 
    ,DBSysJobHistory.job_id 
    ,DBSysJobHistory.step_id 
    ,DBSysJobHistory.sql_message_id 
    ,DBSysJobHistory.sql_severity 
    ,DBSysJobHistory.message 
    ,(CASE DBSysJobHistory.run_status 
     WHEN 0 THEN 'Failed' 
     WHEN 1 THEN 'Succeeded' 
     WHEN 2 THEN 'Retry' 
     WHEN 3 THEN 'Canceled' 
     WHEN 4 THEN 'In progress' 
    END) as run_status 
    ,((SUBSTRING(CAST(DBSysJobHistory.run_date AS VARCHAR(8)), 5, 2) + '/' 
    + SUBSTRING(CAST(DBSysJobHistory.run_date AS VARCHAR(8)), 7, 2) + '/' 
    + SUBSTRING(CAST(DBSysJobHistory.run_date AS VARCHAR(8)), 1, 4) + ' ' 
    + SUBSTRING((REPLICATE('0',6-LEN(CAST(DBSysJobHistory.run_time AS varchar))) 
    + CAST(DBSysJobHistory.run_time AS VARCHAR)), 1, 2) + ':' 
    + SUBSTRING((REPLICATE('0',6-LEN(CAST(DBSysJobHistory.run_time AS VARCHAR))) 
    + CAST(DBSysJobHistory.run_time AS VARCHAR)), 3, 2) + ':' 
    + SUBSTRING((REPLICATE('0',6-LEN(CAST(DBSysJobHistory.run_time as varchar))) 
    + CAST(DBSysJobHistory.run_time AS VARCHAR)), 5, 2))) AS 'exec_date' 
    ,DBSysJobHistory.run_duration 
    ,DBSysJobHistory.retries_attempted 
    ,DBSysJobHistory.server 
    FROM msdb.dbo.sysjobhistory DBSysJobHistory 
    JOIN (SELECT DBSysJobHistory.job_id 
     ,DBSysJobHistory.step_id 
     ,MAX(DBSysJobHistory.instance_id) as instance_id 
     FROM msdb.dbo.sysjobhistory DBSysJobHistory 
     GROUP BY DBSysJobHistory.job_id 
     ,DBSysJobHistory.step_id 
     ) AS Instance ON DBSysJobHistory.instance_id = Instance.instance_id 
    WHERE DBSysJobHistory.run_status <> 1 
    ) AS Job 
JOIN msdb.dbo.sysjobs SysJobs 
    ON (Job.job_id = SysJobs.job_id) 
JOIN msdb.dbo.sysjobsteps SysJobSteps 
    ON (Job.job_id = SysJobSteps.job_id AND Job.step_id = SysJobSteps.step_id) 
+0

이 쿼리는 정말 잘 작동하는 것 같습니다! II는 필요없는 일부 부품을 제거했습니다 (일부 중복 코드가 여전히있을 수 있음). 'MAINTENANCE - BACKUP'으로 시작하는 Job의 withthe 작업 이름 만 표시하고 추가 Colum을 추가하는 방법이 있습니까? – JChutey

+0

위의 코멘트를 완료하지 않아서 미안합니다 ...이 쿼리는 정말 잘 작동하는 것 같습니다! 나는 약간의 혼란스러워하고있다. 나는 현재 Job Activity 상태를 보여주는 Query와 각 Activity의 Job History로 들어가고 지난 24 시간 동안 실패를 확인하는 Query가 필요하기 때문에 이상하게 생각한다. 이 쿼리는 두 번째 부분 인 것 같습니다. 필자는 필요없는 일부 부품을 제거했습니다 (일부 중복 코드가 여전히있을 수 있음). 작업 이름을 'MAINTENANCE - BACKUP'텍스트로 시작하는 작업 만 표시하는 방법이 있습니까? 나는 그것이 잘 작동하는 것처럼 보이기 때문에이 부분을 수정해야 할 필요가 없다. – JChutey

+1

내 개정 된 코드에 [link] (http://pastebin.com/2AMk3CWy)가있다. 모든 도움을 주셔서 대단히 감사합니다! – JChutey

0

여기에 필요한 작업 세부의 마지막 24 시간의 ... 또는 당신 어쨌든 시작합니다 .

select 
    j.name as JobName, 
    j.enabled, 
    j.date_created, 
    a.start_execution_date, 
    a.stop_execution_date, 
    a.next_scheduled_run_date, 
    h.run_date, 
    h.run_time, 
    case 
     when h.run_status = 0 then 'Failed' 
     when h.run_status = 1 then 'Succeeded' 
     when h.run_status = 2 then 'Retry' 
     when h.run_status = 3 then 'Canceled' 
    end as LastRunOutcome 
from 
    msdb.dbo.sysjobs j 
    inner join msdb.dbo.sysjobactivity a on 
    a.job_id = j.job_id 
    inner join msdb.dbo.sysjobhistory h on 
    h.job_id = j.job_id 
    inner join 
    (select job_id, max(run_date) dt 
    from msdb.dbo.sysjobhistory 
    group by job_id) h2 on h2.job_id = h.job_id and h2.dt = h.run_date 
where 
    cast(a.start_execution_date as date) = cast(getdate() as date) 
+0

이 쿼리는 나에게 메시지를 준다; 메시지 수준 243, 상태 1, 줄 1 형식 날짜는 정의 된 시스템 유형이 아닙니다. 메시지 243, 수준 16, 상태 1, 줄 1 형식 날짜가 정의 된 시스템 형식이 아닙니다. – JChutey

+0

당신은 @ JChutey SQL 서버를 사용하고 있습니까? – scsimon

+0

SQL Server이지만 서버 Mgmt Studio를 통해 DB에만 액세스 할 수 있습니다 – JChutey