2013-04-10 27 views
5

W systemie, którym zarządzam, istnieje kilka zadań agenta SQL Server, które działają na podstawie harmonogramów zdefiniowanych w dbo.sysschedules.Określanie, kiedy harmonogram serwera sql będzie uruchamiany w określonym przedziale czasowym?

Chciałbym utworzyć widok kalendarza na mojej aplikacji, który będzie wyświetlany, gdy każde z tych zadań zostanie zaplanowane do uruchomienia w danym przedziale czasowym. Na przykład, jeśli mam harmonogram, który ma być uruchamiany w pierwszy i czwarty poniedziałek miesiąca o 8:00, to biorąc pod uwagę okres bieżącego miesiąca (4/2013), chciałbym otrzymać daty "4/1/2013 8:00 AM, 4/22/2013 8:00 AM "z powrotem.

Ktoś natknął się na metodę realizacji tego? Wiem, że mogłem przeczytać w definicji planu i to pragmatycznie, ale byłem ciekawy, czy ktoś już wymyślił rozwiązanie, zanim sam wejdę w chwasty.

Dzięki!

+0

nie ma buit w funkcjonalności, która robi to, co chcieć. Jeśli nie możesz znaleźć czegoś w Internecie, zwijanie rękawów i brodzenie w horrorze, który jest sysSchedules może być twoją jedyną opcją. –

Odpowiedz

0

Chciałbym rzucić okiem na to narzędzie i uruchomić Profiler, aby spojrzeć na kwerendy jego wykonywania. To poręczne narzędzie.

http://sqlsoft.co.uk/sqljobvis.php

+0

Pokazuje tylko te, które już się pojawiły. Bardziej interesuje mnie zastanawianie się, kiedy biegi będą miały miejsce w przyszłości, poza następnym biegiem. – Sidawy

0

Prosze spojrzeć na następujące w bazie MSDB:

select sj.name, sch.next_run_date, sch.next_run_time 
from sysjobschedules sch 
inner join sysjobs sj 
    on sj.job_id = sch.job_id 
+0

To da mi natychmiastowy następny przebieg, ale jestem bardziej zainteresowany, kiedy harmonogram zostanie ustawiony do działania w danym przedziale czasowym. – Sidawy

+0

Spójrz na tabelę sysschedules, która zawiera potrzebne informacje, ale wymaga trochę pracy, aby pracować, co chcesz. –

0

Te linki wyglądać będą Ci na dobrej drodze ...

Generate SQL Agent Job Schedule

Accessing SQL Server Agent Data

Oto rozwiązanie, które zmieniłem z mssqltips.com.

WITH next_run_time AS 
    (  
    SELECT  sJOBSCH.schedule_id AS [ScheduleID]    
       ,[sJOB].[name] AS [JobName] 
       ,CASE 
       WHEN [sJOBH].[run_date] IS NULL OR [sJOBH].[run_time] IS NULL THEN NULL 
       ELSE CAST(
       CAST([sJOBH].[run_date] AS CHAR(8)) 
       + ' ' 
       + STUFF(
       STUFF(RIGHT('000000' + CAST([sJOBH].[run_time] AS VARCHAR(6)), 6) 
        , 3, 0, ':') 
       , 6, 0, ':') 
       AS DATETIME) 
       END AS [LastRunDateTime] 
       , CASE [sJOBSCH].[NextRunDate] 
       WHEN 0 THEN NULL 
       ELSE CAST(
       CAST([sJOBSCH].[NextRunDate] AS CHAR(8)) 
       + ' ' 
       + STUFF(
        STUFF(RIGHT('000000' + CAST([sJOBSCH].[NextRunTime] AS VARCHAR(6)), 6) 
        , 3, 0, ':') 
       , 6, 0, ':') 
       AS DATETIME) 
       END AS [NextRunDateTime] 
    FROM  [msdb].[dbo].[sysjobs] AS [sJOB] 
    LEFT JOIN 
    (
    SELECT  [job_id] 
       ,schedule_id 
       ,MIN([next_run_date]) AS [NextRunDate] 
       ,MIN([next_run_time]) AS [NextRunTime] 
    FROM  [msdb].[dbo].[sysjobschedules] 
    GROUP BY [job_id],schedule_id 
    )  AS [sJOBSCH] 

    ON  [sJOB].[job_id] = [sJOBSCH].[job_id] 
    LEFT JOIN 
    (
    SELECT  [job_id] 
       ,[run_date] 
       ,[run_time] 
       ,ROW_NUMBER() OVER (PARTITION BY [job_id] ORDER BY [run_date] DESC, [run_time] DESC 

    )   AS RowNumber 

    FROM  [msdb].[dbo].[sysjobhistory] 
    WHERE  [step_id] = 0 
    )  AS [sJOBH] 

     ON  [sJOB].[job_id] = [sJOBH].[job_id] 
    AND   [sJOBH].[RowNumber] = 1 
    ) 

    , Occurrence AS 
    (
    SELECT  schedule_id AS [ScheduleID] 
       ,[schedule_uid] AS [ScheduleUID] 
       ,[name] AS [ScheduleName] 
       ,CASE [enabled] 
       WHEN 1 THEN 'Yes' 
       WHEN 0 THEN 'No' 
       END AS [IsEnabled] 
       ,CASE 
       WHEN [freq_type] = 64 THEN 'Start automatically when SQL Server Agent starts' 
       WHEN [freq_type] = 128 THEN 'Start whenever the CPUs become idle' 
       WHEN [freq_type] IN (4,8,16,32) THEN 'Recurring' 
       WHEN [freq_type] = 1 THEN 'One Time' 
       END [ScheduleType] 
       ,CASE [freq_type] 
       WHEN 1 THEN 'One Time' 
       WHEN 4 THEN 'Daily' 
       WHEN 8 THEN 'Weekly' 
       WHEN 16 THEN 'Monthly' 
       WHEN 32 THEN 'Monthly - Relative to Frequency Interval' 
       WHEN 64 THEN 'Start automatically when SQL Server Agent starts' 
       WHEN 128 THEN 'Start whenever the CPUs become idle' 
       END [Occurrence] 
       ,CASE [freq_type] 
       WHEN 4 THEN 'Occurs every ' + CAST([freq_interval] AS VARCHAR(3)) + ' day(s)' 
       WHEN 8 THEN 'Occurs every ' + CAST([freq_recurrence_factor] AS VARCHAR(3)) 
         + ' week(s) on ' 
         + CASE WHEN [freq_interval] & 1 = 1 THEN 'Sunday' ELSE '' END 
         + CASE WHEN [freq_interval] & 2 = 2 THEN ', Monday' ELSE '' END 
         + CASE WHEN [freq_interval] & 4 = 4 THEN ', Tuesday' ELSE '' END 
         + CASE WHEN [freq_interval] & 8 = 8 THEN ', Wednesday' ELSE '' END 
         + CASE WHEN [freq_interval] & 16 = 16 THEN ', Thursday' ELSE '' END 
         + CASE WHEN [freq_interval] & 32 = 32 THEN ', Friday' ELSE '' END 
         + CASE WHEN [freq_interval] & 64 = 64 THEN ', Saturday' ELSE '' END 
       WHEN 16 THEN 'Occurs on Day ' + CAST([freq_interval] AS VARCHAR(3)) 
          + ' of every ' 
          + CAST([freq_recurrence_factor] AS VARCHAR(3)) + ' month(s)' 
       WHEN 32 THEN 'Occurs on ' 
         + CASE [freq_relative_interval] 
          WHEN 1 THEN 'First' 
          WHEN 2 THEN 'Second' 
          WHEN 4 THEN 'Third' 
          WHEN 8 THEN 'Fourth' 
          WHEN 16 THEN 'Last' 
          END 
         + ' ' 
         + CASE [freq_interval] 
          WHEN 1 THEN 'Sunday' 
          WHEN 2 THEN 'Monday' 
          WHEN 3 THEN 'Tuesday' 
          WHEN 4 THEN 'Wednesday' 
          WHEN 5 THEN 'Thursday' 
          WHEN 6 THEN 'Friday' 
          WHEN 7 THEN 'Saturday' 
          WHEN 8 THEN 'Day' 
          WHEN 9 THEN 'Weekday' 
          WHEN 10 THEN 'Weekend day' 
          END 
         + ' of every ' + CAST([freq_recurrence_factor] AS VARCHAR(3)) 
         + ' month(s)' 
       END AS [Recurrence] 
       ,CASE [freq_subday_type] 
       WHEN 1 THEN 'Occurs once at ' 
         + STUFF(
        STUFF(RIGHT('000000' + CAST([active_start_time] AS VARCHAR(6)), 6) 
            , 3, 0, ':') 
           , 6, 0, ':') 
       WHEN 2 THEN 'Occurs every ' 
         + CAST([freq_subday_interval] AS VARCHAR(3)) + ' Second(s) between ' 
         + STUFF(
         STUFF(RIGHT('000000' + CAST([active_start_time] AS VARCHAR(6)), 6) 
            , 3, 0, ':') 
           , 6, 0, ':') 
         + ' & ' 
         + STUFF(
         STUFF(RIGHT('000000' + CAST([active_end_time] AS VARCHAR(6)), 6) 
            , 3, 0, ':') 
           , 6, 0, ':') 
       WHEN 4 THEN 'Occurs every ' 
         + CAST([freq_subday_interval] AS VARCHAR(3)) + ' Minute(s) between ' 
         + STUFF(
         STUFF(RIGHT('000000' + CAST([active_start_time] AS VARCHAR(6)), 6) 
            , 3, 0, ':') 
           , 6, 0, ':') 
         + ' & ' 
         + STUFF(
         STUFF(RIGHT('000000' + CAST([active_end_time] AS VARCHAR(6)), 6) 
            , 3, 0, ':') 
           , 6, 0, ':') 
       WHEN 8 THEN 'Occurs every ' 
         + CAST([freq_subday_interval] AS VARCHAR(3)) + ' Hour(s) between ' 
         + STUFF(
         STUFF(RIGHT('000000' + CAST([active_start_time] AS VARCHAR(6)), 6) 
            , 3, 0, ':') 
           , 6, 0, ':') 
         + ' & ' 
         + STUFF(
         STUFF(RIGHT('000000' + CAST([active_end_time] AS VARCHAR(6)), 6) 
            , 3, 0, ':') 
           , 6, 0, ':') 
       END [Frequency] 
       ,STUFF(
        STUFF(CAST([active_start_date] AS VARCHAR(8)), 5, 0, '-') 
         , 8, 0, '-') AS [ScheduleUsageStartDate] 
       ,STUFF(
       STUFF(CAST([active_end_date] AS VARCHAR(8)), 5, 0, '-') 
        , 8, 0, '-') AS [ScheduleUsageEndDate] 
       ,[date_created] AS [ScheduleCreatedOn] 
       ,[date_modified] AS [ScheduleLastModifiedOn] 
    FROM  [msdb].[dbo].[sysschedules] 

    ) 

    Select  nrt.JobName,nrt.LastRunDateTime,nrt.NextRunDateTime 
       ,o.Occurrence,o.Recurrence 
    From  next_run_time AS nrt 
    Inner Join Occurrence o 
     ON  nrt.ScheduleID = o.ScheduleID 

I wyniki z tego zapytania dla mnie.

JobName =========== syspolicy_purge_history

LastRunDateTime ==== 23.04.13 19:47

NextRunDateTime ==== 24.04.13 2: 00

Występowanie ========= Dzienne

Nawrót ========= Występuje co 1 dzień (dni)

Powiązane problemy