Aracılığıyla paylaş


dbo.sysjobhistory (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen Örneği

SQL Server Agent tarafından planlanmış işlerin yürütülmesi hakkında bilgi içerir.

Uyarı

Çoğu durumda, veriler yalnızca iş adımı tamamlandıktan sonra güncellenir ve tablo genellikle şu anda devam eden iş adımlarına dair kayıt içermez. Bazı durumlarda, temel süreçler devam eden iş adımları hakkında bilgi sağlar.

Bu tablo veritabanında msdb saklanır.

Sütun adı Veri türü Description
instance_id int Satır için benzersiz tanımlayıcı.
job_id uniqueidentifier İş Kimliği.
step_id int İşin adımının kimliği.
step_name sysname Adımın adı.
sql_message_id int İş başarısız olursa geri dönen herhangi bir SQL Server hata mesajının kimliği.
sql_severity int Herhangi bir SQL Server hatasının ciddiyeti.
message nvarchar(4000) Varsa, SQL Server hatası metni.
run_status int İşin yürütülme durumu:

0 = Başarısız oldu
1 = Başarılı oldu
2 = Tekrar deneme
3 = İptal edildi
4 = Devam Ediyor
run_date int İşin veya adımın başlatma tarihini formatta yyyyMMdd belirtin. Devam eden bir tarih için, bu değer tarihin yazıldığı tarih ve zamandır.
run_time int İşin veya adımın formatında başlama HHmmss zamanı.
run_duration int İşin yürütülmesinde geçen zaman veya 24 saate kadar olan adım HHmmss formatı. Örnekte daha uzun çalışma sürelerini çevirecek kod bulun.
operator_id_emailed int İş tamamlandığında operatörün kimliği bildirildi.
operator_id_netsent int İş tamamlandığında bir mesajla bildirilen operatörün kimliği.
operator_id_paged int İş tamamlandığında pager tarafından bildirilen operatörün kimliği.
retries_attempted int İş veya adım için yapılan tekrar deneme sayısı.
server sysname İşin yürütüldiği sunucunun adı.

Örnekler

Aşağıdaki Transact-SQL sorgu run_date , ve run_time sütunlarını bir tarih saati sütununa dönüştürür LastRunStartDateTime. Sütun, run_duration 'de bir int sütununa dönüştürülür LastRunDurationSeconds. Bu iki sütun daha sonra .LastRunFinishDateTime Sütun run_duration ayrıca daha kullanıcı dostu bir formata dönüştürülmüştür. Script'i SQL Server Management Studio veya Azure Data Studio'da çalıştırabilirsiniz.

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