dbo.sysjobhistory(Transact-SQL)

적용 대상:SQL ServerAzure SQL Managed Instance

SQL Server 에이전트 예약된 작업의 실행에 대한 정보를 포함합니다.

참고 항목

대부분의 경우 데이터는 작업 단계가 완료된 후에만 업데이트되며 테이블은 일반적으로 현재 진행 중인 작업 단계에 대한 레코드를 포함하지 않습니다. 경우에 따라 기본 프로세스 는 진행 중인 작업 단계에 대한 정보를 제공합니다.

이 테이블은 데이터베이스에 msdb 저장됩니다.

열 이름 데이터 형식 설명
instance_id int 행의 고유 식별자입니다.
job_id uniqueidentifier 작업 ID입니다.
step_id int 작업 단계의 ID입니다.
step_name sysname 단계의 이름입니다.
sql_message_id int 작업이 실패한 경우 반환된 SQL Server 오류 메시지의 ID입니다.
sql_severity int SQL Server 오류의 심각도입니다.
message nvarchar(4000) SQL Server 오류의 텍스트(있는 경우)입니다.
run_status int 작업 실행 상태:

0 = 실패
1 = 성공
2 = 다시 시도
3 = 취소됨
4 = 진행 중
run_date int 작업 또는 단계 실행 시작 날짜(형식) yyyyMMdd 입니다. 진행 중인 기록의 경우 이 값은 기록이 기록된 날짜와 시간입니다.
run_time int 작업 또는 단계가 형식으로 HHmmss 시작된 시간입니다.
run_duration int 최대 24시간 동안 작업 또는 단계 HHmmss 형식의 실행 경과 시간입니다. 예제에서 더 긴 실행 기간을 변환하는 코드를 찾습니다.
operator_id_emailed int 작업이 완료될 때 알림을 받은 연산자의 ID입니다.
operator_id_netsent int 작업이 완료되었을 때 메시지로 알리는 대상이 되는 운영자의 ID입니다.
operator_id_paged int 작업이 완료될 때 호출기에서 알림을 받은 연산자의 ID입니다.
retries_attempted int 작업 또는 단계를 다시 시도하는 횟수입니다.
server sysname 작업이 실행된 서버의 이름입니다.

예제

다음 Transact-SQL 쿼리는 열과 run_time 열을 이름이 지정된 LastRunStartDateTimedatetime 열로 변환 run_date 합니다. 열이 run_duration 라는 LastRunDurationSecondsint 열로 변환됩니다. 그런 다음 이 두 열을 사용하여 .를 계산합니다 LastRunFinishDateTime. run_duration 또한 열은 사용자에게 친숙한 형식으로 변환됩니다. SQL Server Management Studio 또는 Azure Data Studio에서 스크립트를 실행할 수 있습니다.

SET NOCOUNT ON;

SELECT sj.name AS Name,
    sh.step_name AS StepName,
    shp.LastRunStartDateTime,
    DATEADD(SECOND, shp.LastRunDurationSeconds, shp.LastRunStartDateTime) AS LastRunFinishDateTime,
    shp.LastRunDurationSeconds,
    CASE
        WHEN sh.run_duration > 235959
            THEN CAST((CAST(LEFT(CAST(sh.run_duration AS VARCHAR),
                LEN(CAST(sh.run_duration AS VARCHAR)) - 4) AS INT) / 24) AS VARCHAR)
                    + '.' + RIGHT('00' + CAST(CAST(LEFT(CAST(sh.run_duration AS VARCHAR),
                LEN(CAST(sh.run_duration AS VARCHAR)) - 4) AS INT) % 24 AS VARCHAR), 2)
                    + ':' + STUFF(CAST(RIGHT(CAST(sh.run_duration AS VARCHAR), 4) AS VARCHAR(6)), 3, 0, ':')
        ELSE STUFF(STUFF(RIGHT(REPLICATE('0', 6) + CAST(sh.run_duration AS VARCHAR(6)), 6), 3, 0, ':'), 6, 0, ':')
        END AS [LastRunDuration (d.HH:MM:SS)],
    DATEADD(SECOND, shp.LastRunDurationSeconds, shp.LastRunStartDateTime) AS LastRunFinishDateTime
FROM msdb.dbo.sysjobs sj
INNER JOIN msdb.dbo.sysjobhistory sh ON sj.job_id = sh.job_id
CROSS APPLY (SELECT DATETIMEFROMPARTS(sh.run_date / 10000, -- years
        sh.run_date % 10000 / 100, -- months
        sh.run_date % 100, -- days
        sh.run_time / 10000, -- hours
        sh.run_time % 10000 / 100, -- minutes
        sh.run_time % 100, -- seconds
        0 -- milliseconds
    ) AS LastRunStartDateTime,
    (sh.run_duration / 10000) * 3600 -- convert hours to seconds, can be greater than 24
    + ((sh.run_duration % 10000) / 100) * 60 -- convert minutes to seconds
    + (sh.run_duration % 100) AS LastRunDurationSeconds
) AS shp;
GO