Başarısız sql işlerini görüntülemek için Sorgu nedir


Yanıtlar:


12

İşlerin çıktı dosyalarına gitmek için yapılandırılabildiğinden, iş bilgilerini tek bir sorgu ile gerçekten "tüm" alacağınızı sanmıyorum. Çıktı dosyaları zaman zaman raporlanan veya msdbtablolara yazılandan daha fazla bilgi alabilir .

Ancak, iş geçmişine SSMS aracılığıyla bakarak bulunan görünüm, yalnızca başarısız işleri döndürmek için bu sorgu ile çekilebilir (örneğin, bir işin 2 adımı varsa ve ikinci başarısız olursa bu sorgu her iki adımı da döndürür):

select j.name
    ,js.step_name
    ,jh.sql_severity
    ,jh.message
    ,jh.run_date
    ,jh.run_time
FROM msdb.dbo.sysjobs AS j
INNER JOIN msdb.dbo.sysjobsteps AS js
   ON js.job_id = j.job_id
INNER JOIN msdb.dbo.sysjobhistory AS jh
   ON jh.job_id = j.job_id AND jh.step_id = js.step_id
WHERE jh.run_status = 0

resim açıklamasını buraya girin


6

Bu bilgiyi sql sunucusunda bulunan standart raporlarla alabilirsiniz:

SQL sunucu aracısı> Standart raporlar'a sağ tıklayın ve iş yürütme "başarısız olanlar veya çok fazla zaman alan" gibi istediğiniz raporu seçin .. Raporu ihtiyacınıza göre seçin:

Veya,

Son 24 saat içinde başarısız olan işleri bulmak için aşağıdaki komut dosyasını kullanabilirsiniz:

-- Variable Declarations 

DECLARE @PreviousDate datetime  
DECLARE @Year VARCHAR(4)   
DECLARE @Month VARCHAR(2)  
DECLARE @MonthPre VARCHAR(2)  
DECLARE @Day VARCHAR(2)  
DECLARE @DayPre VARCHAR(2)  
DECLARE @FinalDate INT  

-- Initialize Variables  
SET @PreviousDate = DATEADD(dd, -1, GETDATE()) -- Last 1 day   
SET @Year = DATEPART(yyyy, @PreviousDate)   
SELECT @MonthPre = CONVERT(VARCHAR(2), DATEPART(mm, @PreviousDate))  
SELECT @Month = RIGHT(CONVERT(VARCHAR, (@MonthPre + 1000000000)),2)  
SELECT @DayPre = CONVERT(VARCHAR(2), DATEPART(dd, @PreviousDate))  
SELECT @Day = RIGHT(CONVERT(VARCHAR, (@DayPre + 1000000000)),2)  
SET @FinalDate = CAST(@Year + @Month + @Day AS INT)  

-- Final Logic 

SELECT   j.[name],  
         s.step_name,  
         h.step_id,  
         h.step_name,  
         h.run_date,  
         h.run_time,  
         h.sql_severity,  
         h.message,   
         h.server  
FROM     msdb.dbo.sysjobhistory h  
         INNER JOIN msdb.dbo.sysjobs j  
           ON h.job_id = j.job_id  
         INNER JOIN msdb.dbo.sysjobsteps s  
           ON j.job_id = s.job_id 
           AND h.step_id = s.step_id  
WHERE    h.run_status = 0 -- Failure  
         AND h.run_date > @FinalDate  
ORDER BY h.instance_id DESC  

Rapor olarak bilgiye ihtiyacınız varsa bu bağlantıdaki kodu kullanın


Bahşiş için teşekkür ederim, tam olarak aradığım şey buydu. Aynı sonuçları elde etmek için değişkenleri biraz basitleştirebileceğimizi düşünüyorum:DECLARE @FinalDate INT; -- Initialize Variables SET @FinalDate = CAST(CONVERT(VARCHAR(10), DATEADD(dd, -1, GETDATE()), 112) AS INT) -- Yesterday's date as Integer in YYYYMMDD format -- Final Logic .... no change

1

Son 24 saat içinde tüm iş hatalarını almak için Shawn Melton'un kodunu biraz değiştirdim. Üyelikte bir açıklama eksikti, ben de düzelttim. Çok teşekkürler Shawn, harika şeyler!


/*  Select all jobs with an error in the past 24 hours */
SELECT MSDB.dbo.agent_datetime(jh.run_date,jh.run_time) as date_time
    ,j.name as job_name,js.step_id as job_step,jh.message as error_message
    FROM msdb.dbo.sysjobs AS j
    INNER JOIN msdb.dbo.sysjobsteps AS js ON js.job_id = j.job_id
    INNER JOIN msdb.dbo.sysjobhistory AS jh ON jh.job_id = j.job_id AND jh.step_id = js.step_id
    WHERE jh.run_status = 0 AND MSDB.dbo.agent_datetime(jh.run_date,jh.run_time) >= GETDATE()-1
    ORDER BY MSDB.dbo.agent_datetime(jh.run_date,jh.run_time) DESC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.