Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Число запусков JOB  [new]
guest45
Guest
Интересно,
м.б. кто-нибудь уже пробовал считать количество запусков JOB по расписанию за определенный интервал времени ?

Что-то типа:
declare @drFrom datetime, @dtTo datetime
....
exec msdb.[dbo].[sp_help_jobschedule] @job_name = N'test'
....
select @count = ....
14 сен 09, 17:18    [7656930]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
M0us
Member

Откуда: Moscow
Сообщений: 883
Может быть вы из job-а сами будете писать в таблицы нужные логи?
смотря какой прикладной/системный смысл это все несет и смотря кто и как это читать будет? )
14 сен 09, 19:00    [7657597]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Guest45
Guest
Логи здесь не причём.
Нужно по Schedule расчитать количество запусков за интервал времени.
Например, для бэкапов будет удобно получать отчёт:
сколько должно было выполниться бэкапов за сутки на NN серверах и сколько реально выполнилось.
Полезная вещь должна получиться.
Только времени угрохать придётся немало, судя по коду
15 сен 09, 07:59    [7658569]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
Guest45,
у Вас много типовых вариантов расписания?
15 сен 09, 09:36    [7658794]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Guest45
Guest
Столько, сколько "автоматизаторы" требуют, вообще-то.
Да и без них могут быть базы и simple, и full,
да и diff backup иногда имеет смысл применять, а иногда - нет.
15 сен 09, 09:50    [7658845]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
ну возьмите из выхода например sp_help_job
last_run и next_run (интервал между ними есть интервал запуска джоба)
наложите на интересующий вас промежуток времени (с учётом active_start и active_end)
и будет вам счастье...

--------------------------------------------------------------
Дьявол кроется в деталях.
15 сен 09, 09:53    [7658861]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Guest45
Guest
Это не копенгаген. :)
Лучше потрачу время и разберусь в коде тех процедур, ссылку на которую я приводил (JobScript_FindConflictingJobSchedules.sql, JobScript_FindMissedJobs.sql)
И в коде sp_verify_schedule покопаюсь.
Thanks
15 сен 09, 10:24    [7659045]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Glory
Member

Откуда:
Сообщений: 104760
А sysjobhistory не помогает ?
15 сен 09, 10:31    [7659109]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Guest45
Guest
История - это сколько раз выполнилось реально.
Расчёт по Schedule - это сколько раз должно было выполниться по плану.
Если не совпадает, то это повод зайти на сервер и разобраться в чём там дело.
15 сен 09, 10:46    [7659219]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Guest45
Это не копенгаген. :)
Лучше потрачу время и разберусь в коде тех процедур, ссылку на которую я приводил (JobScript_FindConflictingJobSchedules.sql, JobScript_FindMissedJobs.sql)
И в коде sp_verify_schedule покопаюсь.
Thanks

и чем же это "не копенгаген" :)
15 сен 09, 10:49    [7659242]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Guest45
История - это сколько раз выполнилось реально.
Расчёт по Schedule - это сколько раз должно было выполниться по плану.
Если не совпадает, то это повод зайти на сервер и разобраться в чём там дело.

может лучше алерты на джобы настроить?
15 сен 09, 10:49    [7659253]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Guest45
Guest
Например, на JOB м.б. несколько schedule
15 сен 09, 10:50    [7659262]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Guest45
Например, на JOB м.б. несколько schedule

и что?
15 сен 09, 10:54    [7659282]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Guest45
Guest
Хм, не подумал.
Другой вариант: понедельник + пятница
Интервал непонятен
15 сен 09, 11:15    [7659487]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Guest45
Guest
Вот кое что нашёл, что можно взять за основу

-- http://blogs.mssqltips.com/forums/t/977.aspx
select
'Server'       = left(@@ServerName,20),
'JobName'      = left(S.name,30),
'ScheduleName' = left(ss.name,25),
'Enabled'      = CASE (S.enabled)
                  WHEN 0 THEN 'No'
                  WHEN 1 THEN 'Yes'
                  ELSE '??'
                END,
'Frequency'    = CASE(ss.freq_type)
                  WHEN 1  THEN 'Once'
                  WHEN 4  THEN 'Daily'
                  WHEN 8  THEN 
                    (case when (ss.freq_recurrence_factor > 1) 
                        then  'Every ' + convert(varchar(3),ss.freq_recurrence_factor) + ' Weeks'  else 'Weekly'  end)
                  WHEN 16 THEN 
                    (case when (ss.freq_recurrence_factor > 1) 
                    then  'Every ' + convert(varchar(3),ss.freq_recurrence_factor) + ' Months' else 'Monthly' end)
                  WHEN 32 THEN 'Every ' + convert(varchar(3),ss.freq_recurrence_factor) + ' Months' -- RELATIVE
                  WHEN 64 THEN 'SQL Startup'
                  WHEN 128 THEN 'SQL Idle'
                  ELSE '??'
                END,
'Interval'    = CASE
                 WHEN (freq_type = 1)                       then 'One time only'
                 WHEN (freq_type = 4 and freq_interval = 1) then 'Every Day'
                 WHEN (freq_type = 4 and freq_interval > 1) then 'Every ' + convert(varchar(10),freq_interval) + ' Days'
                 WHEN (freq_type = 8) then (select 'Weekly Schedule' = D1+ D2+D3+D4+D5+D6+D7 
                       from (select ss.schedule_id,
                     freq_interval, 
                     'D1' = CASE WHEN (freq_interval & 1  <> 0) then 'Sun ' ELSE '' END,
                     'D2' = CASE WHEN (freq_interval & 2  <> 0) then 'Mon '  ELSE '' END,
                     'D3' = CASE WHEN (freq_interval & 4  <> 0) then 'Tue '  ELSE '' END,
                     'D4' = CASE WHEN (freq_interval & 8  <> 0) then 'Wed '  ELSE '' END,
                    'D5' = CASE WHEN (freq_interval & 16 <> 0) then 'Thu '  ELSE '' END,
                     'D6' = CASE WHEN (freq_interval & 32 <> 0) then 'Fri '  ELSE '' END,
                     'D7' = CASE WHEN (freq_interval & 64 <> 0) then 'Sat '  ELSE '' END
                                 from msdb..sysschedules ss
                                where freq_type = 8
                           ) as F
                       where schedule_id = sj.schedule_id
                                            )
                 WHEN (freq_type = 16) then 'Day ' + convert(varchar(2),freq_interval) 
                 WHEN (freq_type = 32) then (select freq_rel + WDAY 
                    from (select ss.schedule_id,
                                 'freq_rel' = CASE(freq_relative_interval)
                                                WHEN 1 then 'First'
                                                WHEN 2 then 'Second'
                                                WHEN 4 then 'Third'
                                                WHEN 8 then 'Fourth'
                                                WHEN 16 then 'Last'
                                                ELSE '??'
                                              END,
                                'WDAY'     = CASE (freq_interval)
                                                WHEN 1 then ' Sun'
                                                WHEN 2 then ' Mon'
                                                WHEN 3 then ' Tue'
                                                WHEN 4 then ' Wed'
                                                WHEN 5 then ' Thu'
                                                WHEN 6 then ' Fri'
                                                WHEN 7 then ' Sat'
                                                WHEN 8 then ' Day'
                                                WHEN 9 then ' Weekday'
                                                WHEN 10 then ' Weekend'
                                                ELSE '??'
                                              END
                            from msdb..sysschedules ss
                            where ss.freq_type = 32
                         ) as WS 
                   where WS.schedule_id =ss.schedule_id
                   ) 
               END,
'Time' = CASE (freq_subday_type)
                WHEN 1 then   left(stuff((stuff((replicate('0', 6 - len(Active_Start_Time)))+ convert(varchar(6),Active_Start_Time),3,0,':')),6,0,':'),8)
                WHEN 2 then 'Every ' + convert(varchar(10),freq_subday_interval) + ' seconds'
                WHEN 4 then 'Every ' + convert(varchar(10),freq_subday_interval) + ' minutes'
                WHEN 8 then 'Every ' + convert(varchar(10),freq_subday_interval) + ' hours'
                ELSE '??'
              END,

'Next Run Time' = CASE SJ.next_run_date
                   WHEN 0 THEN cast('n/a' as char(10))
                   ELSE convert(char(10), convert(datetime, convert(char(8),SJ.next_run_date)),120)  + ' ' + left(stuff((stuff((replicate('0', 6 - len(next_run_time)))+ convert(varchar(6),next_run_time),3,0,':')),6,0,':'),8)
                 END
  
   from msdb.dbo.sysjobschedules SJ 
   join msdb.dbo.sysjobs         S  on S.job_id       = SJ.job_id
   join msdb.dbo.sysschedules    SS on ss.schedule_id = sj.schedule_id
order by S.name
15 сен 09, 11:28    [7659603]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
guest45
Guest
Кстати, вот почему нельзя воспользоваться Next Run Time

-- getdate() = 2009-09-15

JobName	ScheduleName	Enabled	Frequency	Interval	Time		Next Run Time
test	every day	No	Daily		Every Day	15:00:00	2009-09-11 15:00:00
test	tuesday friday	No	Weekly		Tue Fri 	16:00:00	2009-09-11 16:00:00

15 сен 09, 11:34    [7659652]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
Ну дак и почитайте:
sp_help_job
sp_add_schedule

--------------------------------------------------------------
Дьявол кроется в деталях.
15 сен 09, 11:38    [7659706]     Ответить | Цитировать Сообщить модератору
 Re: Число запусков JOB  [new]
Guest45
Guest
Тысячу раз прочитано.

Ответа на вопрос:
сколько раз должен выполниться JOB в интервале дат по заданным Schedule - нема.

Будем писать сами.

Болванку, слава богу, нашли...
15 сен 09, 11:50    [7659820]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить