dbo.sysjobhistory(Transact-SQL)
적용 대상: SQL Server Azure 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
열을 이름이 지정된 LastRunStartDateTime
datetime 열로 변환 run_date
합니다. 열이 run_duration
라는 LastRunDurationSeconds
int 열로 변환됩니다. 그런 다음 이 두 열을 사용하여 .를 계산합니다 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