-->
ZDIRY-TUFWT-EBONM-EYJ00-IDBLANTER.COM
ZDIRY-TUFWT-EBONM-EYJ00

BLANTERWISDOM105

Cara Manage Reporting SQL Server Agent Job Schedule

9/30/2020

Latarbelakang

Kebutuhan akan laporan monitoring dalam proses pengolahan database sangatlah dibutuhkan agar lebih mudah melakukan maintenance dan pemantauan. Tidak hanya itu laporan tersebut dapat digunakan untuk pembuatan strategi mengganti Modifikasi Job Schedule sehingga kesalahan apapun dapat diminimalisir. 

Solusi

Mungkin akan memusingkan apabila memberikan informasi tentang SQL Server Agent Job Schedule jika terlalu banyak Job untuk dilacak, Oleh karena itu beberapa Job perlu dimodifikasi secara teratur.

Untuk melakukan proses modfikasi tersebut pastinya anda perlu panduan Job Schedule pada table msdb yang berkaitan dengan Job. Misalnya, cara menelusuri table sysjobs, sysjobschedules, dan sysschedules dengan menggunakan satu set query. Selain itu juga anda akan belajar cara menampilkan berbagai tipe Job Schedule dengan menggunakan semua key dari table sysschedules yang ada. Sehingga anda dapat dengan mudah menggunakannya untuk menampilkan dan mengelola Job Schedule dengan baik.

Terakhir, beberapa contoh kode mendemonstrasikan cara membuat jadwal baru dan melampirkannya ke job. Pada artikel ini anda akan mempelajari;

  • Menampilkan Informasi Job dan Schedule secara selektif dari Database dengan Tabel msdb.
  • Menampilkan dan mengelola Job Schedule dengan menggunakan semua kata kunci yang digunakan untuk  sysschedules.
  • Membuat dan Membatalkan Schedule.
  • Melampirkan Schedule ke Jobs.

Untuk melihat daftar informasi SQL Server Agent Job Schedule ada di table sysjobs msdb dengan menggunakan query di bawah ini, anda akan melihat name, description, status keaktifan, job_id, dimana job_id yang unik atau berbeda pada setiap barisnya. Nilai kolom enable merupakan data type tinyint. Baris dengan nilai aktif 1 adalah untuk Job yang dapat dijalankan ke Job. Jobs yang diaktifkan tidak diharuskan memiliki schedule yang artinya dapat dilakukan secara manual dan bukan akan di jalanakan secara default alias tidak otomatis berjalan.

select name

       ,enabled

       ,description

from msdb.dbo.sysjobs

Pada screen shot di atas menunjukkan hasil list job di SQL Agent yang digunakan. Perhatikan bahwa total ada 12. jobs, tetapi dua job tidak diaktifkan. Untuk job syspolicy_purge_history adalah job bawaan dari SQL Server yang mengelola table sysjobhistory. Mungkin pada saat jumlah job masih sedikit tidak bermasalah karena untuk mengatur schedulenya tidak begitu rumit namun setelah job yang dimasukan ke SQL Agent maka untuk mengatur schedule Job pada SQL Agent akan semakin hati-hati agar terhindar dari konflik. Ditambah lagi dengan jobs yang tidak memiliki schedule dan tidak diaktifkan.

Script berikutnya akan mencantumkan key columns yang dipilih di table msdb.dbo.sysschedules. Schedulle dapat menentukan hari untuk satu job ataupun grup job di SQL Agent. Freq_type merupakan type frekuensi yang digunakan pada Job seperti:

Description

Code

One time only

1

Daily

4

Weekly

8

Monthly

16

Monthly, relative to freq_interval

32

Runs when the SQL Server Agent service starts

64

Runs when the computer is idle

128

Jadwal juga dapat di dasarkan pada bagian hari seperti jam, menit atau detik:

Description

Code

At the specified time

1

Seconds

2

Minutes

4

Hours

8

Baik freq_interval dan freq_subday_interval menunjukkan detail yang lebih spesifik tentang job schedule selama hari atau bagian hari.  Untuk freq_interval tergantung pada nilai freq_type. Nilai defaultnya adalah 0, yang menunjukkan bahwa freq_interval tidak digunakan.

Freq_recurrence_factor dapat menunjukkan seberapa sering jobs dijalankan di nilai freq_interval. Misalnya, jadwal dengan freq_recurrence_factor 3 dan nilai freq_interval selama sebulan akan berjalan setiap bulan ketiga atau sekali per kuartal. freq_recurrence_factor digunakan hanya jika freq_type adalah 8, 16, atau 32. Jika kolom ini berisi 0, freq_recurrence_factor tidak digunakan.

select

 name

,enabled

,freq_type

,freq_interval

,freq_subday_type

,freq_subday_interval

,freq_recurrence_factor 

from msdb.dbo.sysschedules

Screen shot berikut menunjukkan hasil yang ditetapkan untuk script sebelumnya untuk jadwal SQL Agent. Ada total 13 jadwal di SQL Agent pada saat screenshoot ini diambil. Seperti disinggung sebelumnya, jadwal - seperti job - dapat memiliki status aktif. Untuk artikel ini, semua jadwal di layanan SQL Agent diaktifkan, tetapi status ini tidak diperlukan.

  • Jika job diaktifkan dan schedule yang dilampirkan ke job diaktifkan, maka SQL Agent akan menjalankan job sesuai schedule selama SQL Agent di start.
  • Jika job tidak diaktifkan dan schedule yang dilampirkan ke job diaktifkan, maka SQL Agen tidak akan menjalankan jobs sesuai schedule bahkan jika SQL Agent di start.
  • Jika job diaktifkan tetapi job yang dilampirkan ke job tidak diaktifkan, maka SQL Agen tidak akan menjalankan jobs sesuai schedule bahkan jika SQL Agent di start.
  • Jika kedua job tidak diaktifkan dan schedule yang melampirkan job tidak diaktifkan, maka SQL agent tidak akan menjalankan job sesuai schedule bahkan jika SQL Agent di start.

Nilai numerik untuk kolom tabel sysschedules ditentukan dalam Dokumentasi Microsoft untuk tabel sysschedules. Daripada mengulang dokumentasi itu pada artikel ini dengan lengkap, lebih baik anda dirujuk ke docs.microsoft.com.

Jika sebuah job memiliki Schedule maka job tersebut akan memiliki nilai job_id di table sysjobschedules. Setiap baris dalam table sysjobschedules juga berisi schedule_uid, yang merupakan kunci utama table sysschedules. Oleh karena itu, anda dapat menghitung semua job dengan schedule melalui join table antara sysjobs dan sysjobschedules dengan key nya adalah job_id.

-- list jobs with an attached schedule

select

 name

,enabled

,description

from msdb.dbo.sysjobs

inner join msdb.dbo.sysjobschedules on sysjobs.job_id = sysjobschedules.job_id

order by enabled desc

Screenshoot berikut di bawah ini menampilkan hasil dari query sebelumnya. Perhatikan bahwa hanya ada tujuh job yang dihasilkan, artinya lima pekerjaan tersisa di Agen SQL tidak memiliki schedule. Selain itu, dua dari ketujuh job tidak diaktifkan (enable = 0).

Selain itu juga ada script yang menampilkan job yang tidak memiliki schedule yang hanya dijalankan sesuai permintaan.

-- list all jobs without a schedule

select

 name

,enabled

,description

from msdb.dbo.sysjobs where job_id in

(-- job_ids without a schedule

select job_id from msdb.dbo.sysjobs

except

select job_id from msdb.dbo.sysjobschedules

)

Skript berikut ini menunjukkan join antara table sysjobs dengan tabel sysschedules melalui pengecekan key job_id pada sysjobschedules apakah sysjobs.job_id = sysjobschedules.job_id dengan menggunakan inner join.

Perhatikan dari hasil pada screenshoot bahwa ada dua job yang tidak diaktifkan (enable =0), tetapi mereka memiliki schedule yang menyertainya yang dijadwalkan setiap hari pada tengah malam (Daily at Midnight). Selain itu juga ada job yang diaktifkan dengan jadwalkan pada daily at midnight untuk melakukan Create a two step reporting job.

-- jobs that have a schedule with schedule identifiers

select

sysjobs.job_id

,sysjobs.name job_name

,sysjobs.enabled job_enabled

,sysschedules.name schedule_name

,sysschedules.schedule_id

,sysschedules.schedule_uid

,sysschedules.enabled schedule_enabled

from msdb.dbo.sysjobs

inner join msdb.dbo.sysjobschedules on sysjobs.job_id = sysjobschedules.job_id

inner join msdb.dbo.sysschedules on sysjobschedules.schedule_id = sysschedules.schedule_id

order by sysjobs.enabled desc


Menampilkan SQL Server Agent Jobs Dengan Schedule Daily dan Weekly

Semua job yang memiliki schedule daily atau weekly akan di tampilkan secara berbeda tergantung apakah job memiliki schedule daily ataupun weekly. Daily menunjukkan jadwal yang dilakukan setiap hari sedangkan weekly menunjukkan jadwal job yang dilakukan pada beberapa subset, termasuk semua hari dalam seminggu. Untuk menampilkan subset hari dari schedule weekly kita memerlukan kode yang berbeda dari schedule daily.

Script di bawah ini akan menampilkan informasi tentang job secara terpisah untuk job daily dan weekly. Kemudian, hasil dari kedua query akan digabungkan dengan union menjadi kumpulan hasil. Selain itu script akan mengurutkan berdasarkan job yang diaktifkan secara descending.

Dari Dokumentasi Microsoft untuk tabel sysschedules menetapkan nilai 1, 2, 4, 8, 16, 32, dan 64 secara progresif untuk hari-hari dalam jadwal mingguan dari Minggu (1), Senin (2), Selasa (4) hingga Sabtu (64). Operator & bitwise membandingkan pola byte 8-bit untuk satu hari dengan pola byte 8-bit untuk nilai yang menunjukkan hari-hari di mana jadwal dapat dijalankan. Misalnya, jika jadwal dapat berjalan pada hari Minggu dan Sabtu, pola byte-nya adalah 10000010, yang sesuai dengan nilai desimal 65. Perbandingan Minggu & bitwise adalah untuk 10.000.000 versus 10000010, yang mengembalikan nilai 10.000.000 untuk Minggu, dan perbandingan hari Sabtu akan menjadi 00000010 versus 10000010, yang mengembalikan nilai 00000010 untuk hari Sabtu. Pola byte 8-bit untuk jadwal yang meluncurkan pekerjaan pada hari Senin, Selasa, Rabu, Kamis, Jumat, dan Sabtu adalah 01111110, yang sama dengan nilai desimal 126. Suksesi & operator dalam kode di bawah deciphers memulai pola byte hari ke dalam urutan hari untuk nilai bidang Hari di kumpulan hasil.


-- list jobs and schedule info with daily and weekly schedules

-- jobs with a daily schedule
select
 sysjobs.name job_name
,sysjobs.enabled job_enabled
,sysschedules.name schedule_name
,sysschedules.freq_recurrence_factor
,case
 when freq_type = 4 then 'Daily'
end frequency
,
'every ' + cast (freq_interval as varchar(3)) + ' day(s)'  Days
,
case
 when freq_subday_type = 2 then ' every ' + cast(freq_subday_interval as varchar(7)) 
 + ' seconds' + ' starting at '
 + stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':')
 when freq_subday_type = 4 then ' every ' + cast(freq_subday_interval as varchar(7)) 
 + ' minutes' + ' starting at '
 + stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':')
 when freq_subday_type = 8 then ' every ' + cast(freq_subday_interval as varchar(7)) 
 + ' hours'   + ' starting at '
 + stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':')
 else ' starting at ' 
 +stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':')
end time
from msdb.dbo.sysjobs
inner join msdb.dbo.sysjobschedules on sysjobs.job_id = sysjobschedules.job_id
inner join msdb.dbo.sysschedules on sysjobschedules.schedule_id = sysschedules.schedule_id
where freq_type = 4

union

-- jobs with a weekly schedule
select
 sysjobs.name job_name
,sysjobs.enabled job_enabled
,sysschedules.name schedule_name
,sysschedules.freq_recurrence_factor
,case
 when freq_type = 8 then 'Weekly'
end frequency
,
replace
(
 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
,', '
,''
) Days
,
case
 when freq_subday_type = 2 then ' every ' + cast(freq_subday_interval as varchar(7)) 
 + ' seconds' + ' starting at '
 + stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':') 
 when freq_subday_type = 4 then ' every ' + cast(freq_subday_interval as varchar(7)) 
 + ' minutes' + ' starting at '
 + stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':')
 when freq_subday_type = 8 then ' every ' + cast(freq_subday_interval as varchar(7)) 
 + ' hours'   + ' starting at '
 + stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':')
 else ' starting at ' 
 + stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':')
end time
from msdb.dbo.sysjobs
inner join msdb.dbo.sysjobschedules on sysjobs.job_id = sysjobschedules.job_id
inner join msdb.dbo.sysschedules on sysjobschedules.schedule_id = sysschedules.schedule_id
where freq_type = 8
order by job_enabled desc

Pada screenshoot berikut menampilkan hasil dari script sebelumnya. Perhatikan khususnya kolom frequency dan time yang ditampilkan pada baris 2 dan 3. Meskipun kedua schedule memiliki freq_subday_interval yang sama yaitu 5 namun nilai freq_type dan active_start_time nya berbeda.

Schedule di baris kedua (dijalankan pada hari-hari tertentu dalam seminggu) memiliki frekuensi mingguan yang sesuai dengan nilai freq_type 8. Jadwal di baris ketiga memiliki nilai freq_type 4 yang sesuai dengan frekuensi harian.

Nilai active_start_time untuk baris kedua adalah 3 PM (150000), tetapi nilai active_start_time untuk baris ketiga adalah tengah malam (000000). Nilai active_start_time dalam tabel sysschedules diformat ulang ke nilai yang terlihat seperti nilai waktu untuk ditampilkan.

Menampilkan SQL Server Agent Jobs Dengan Schedule Monthly

SQL Agent mensupport dua tipe schedule monthly (bulanan) yaitu:

  1. Tipe pertama adalah penomoran hari selama sebulan dari 1-tanggal terakhir. Jenis schedule ini memiliki nilai freq_type 16.  Nilai freq_type_interval menunjukkan hari tertentu dalam sebulan saat job dijalankan.
  2. Tipe keuda dari Schedule Monthly mencerminkan hari relative dalam satu bulan saat schedule berjalan.

Tipe ini memiliki freq_type dengan nilai 32 dengan nilai freq_type_interval adalah sebagai berikut:

  • 1 for Sunday (Minggu)
  • 2 for Monday (Senin)
  • 3 for Tuesday (Selasa)
  • 4 for Wednesday (Rabu)
  • 5 for Thursday (Kamis)
  • 6 for Friday (Jumat)
  • 7 for Saturday (Sabtu)
  • 8 for Day (Hari ini)
  • 9 for Weekday (hari kerja)
  • 10 for Weekend day (Akhir Pekan)

Nilai kolom freq_relative_interval dari table sysschedules memodulasi bagaimana menafsirkan nilai freq_type_interval untuk schedule dengan nila freq_type 32 adalah sebagai berikut:

  • 1 for First
  • 2 for Second
  • 4 for Third
  • 8 for Fourth
  • 16 for Last

Misalnya, untuk menunjukkan schedule yang berjalan pada hari Rabu terakhir setiap bulan, gunakan pengaturan berikut:

  • freq_type = 32
  • freq_type_interval = 4
  • freq_relative_interval = 16 (Last sama dengan terakhir)

Karena rangkaian job di SQL Agent pada script di bawah ini akan menyertakan 2 job baru yang berbeda dimana yang satu merupakan Schedule Monthly dengan nilai freq_type 16 dan yang lain dengan nilai freq_type 32. Script ini akan menunjukkan cara insert job ke dalam JobRunLog table dengan schedule_name 'Weekly on Saturday Morning at 1 AM' dan schedule_name lainnya dengan perspektif berbeda ke dalam Job_Name yang sama.


-- Jalankan dua job code schedules bulanan ke dalam satu job

/*detach : Menghilangkan registrasi database SQL Server 
  walaupun fisiknya masih ada di penyimpanan folder nya
  jika sudah di detach fisik file (mdf dan ldf) dapat di copy 
  ke komputer lain.
*/

-- detach Weekly on Saturday Morning at 1 AM schedule
-- untuk Insert ke dalam JobRunLog table
-- namun sebelumnya apakah benar anda pernah membuat schedule dengan nama 
-- Weekly on Satuday Morning at 1 AM jika tidak akan muncul pesan error not exist
exec msdb.dbo.sp_detach_schedule  
    @job_name = 'Insert into JobRunLog table with a schedule',  
    @schedule_name = 'Weekly on Saturday Morning at 1 AM' ;  
GO 

-- tambahkan schedule ke dalam job pada detik terakhir pada hari terakhir
-- setiap bulan
-- dan attach hal tersebut ke dalam JobRunLog table 
declare @ReturnCode int
if exists (select name from msdb.dbo.sysschedules WHERE name = N'Run last second of last day each month')
delete from msdb.dbo.sysschedules where name=N'Run last second of last day each month'

exec @ReturnCode = msdb.dbo.sp_add_schedule  
        @schedule_name = N'Run last second of last day each month',
  @enabled=1, 
  @freq_type=32,              -- means monthly relative
  @freq_interval=8,           -- means day for monthly relative
  @freq_subday_type=1, 
  @freq_subday_interval=0, 
  @freq_relative_interval=16, -- means last for freq_interval with monthly relative
  @freq_recurrence_factor=1, 
  @active_start_date=20170809, 
  @active_end_date=99991231, 
  @active_start_time=235958,  -- must schedule at least 1 second before last second of day
  @active_end_time=235959

exec @ReturnCode = msdb.dbo.sp_attach_schedule  
   @job_name = N'Insert into JobRunLog table with a schedule',  
   @schedule_name = N'Run last second of last day each month' 

GO

-- tambahkan schedule pada saat detik terakhir pada 15 hari setiap bulan
-- dan jug attach hal tersebut ke dalam JobRunLog table
declare @ReturnCode int
if exists (select name from msdb.dbo.sysschedules WHERE name=N'Run last second of 15th day of the month')
delete from msdb.dbo.sysschedules where name=N'Run last second of 15th day of the month'

exec @ReturnCode = msdb.dbo.sp_add_schedule  
        @schedule_name = N'Run last second of 15th day of the month',
  @enabled=1, 
  @freq_type=16,              -- means monthly
  @freq_interval=15,          -- means 15 day of month
  @freq_subday_type=1, 
  @freq_subday_interval=0, 
  @freq_relative_interval=0, 
  @freq_recurrence_factor=1, 
  @active_start_date=20170809, 
  @active_end_date=99991231, 
  @active_start_time=235958,  -- must schedule at least 1 second before last second of day
  @active_end_time=235959

exec @ReturnCode = msdb.dbo.sp_attach_schedule  
   @job_name = N'Insert into JobRunLog table with a schedule',  
   @schedule_name = N'Run last second of 15th day of the month'

Jika kita jabarkan script di atas maka

  1. Batch pertama adalah detach schedule_name 'Weekly on Saturday Morning at 1 AM'
  2. Batch kedua membuat schedule baru bernama ‘Run last second of last day each month’, sebelum di attach ke dalam table JobRunLog.
  3. Batch ketiga membuat schedule baru lagi bernama Run last second of 15th day of the monthdan attach ke dalam table JobRunLog.

Setelah proses detach dan attach schedule kita pun dapat melampirkannya dengan menggunakan script berikut:


-- jobs with a monthly schedule
select
 sysjobs.name job_name
,sysjobs.enabled job_enabled
,sysschedules.name schedule_name
,sysschedules.freq_recurrence_factor
,case
 when freq_type = 4 then 'Daily'
 when freq_type = 8 then 'Weekly'
 when freq_type = 16 then 'Monthly'
 when freq_type = 32 then 'Monthly'
end frequency
,
case 
when freq_type = 32 then
(
 case
  when freq_relative_interval = 1 then 'First '
  when freq_relative_interval = 2 then 'Second '
  when freq_relative_interval = 4 then 'Third '
  when freq_relative_interval = 8 then 'Fourth '
  when freq_relative_interval = 16 then 'Last '
 end 
 +
 replace
 (
  case when freq_interval = 1 THEN 'Sunday, ' ELSE '' END
 +case when freq_interval = 2 THEN 'Monday, ' ELSE '' END
 +case when freq_interval = 3 THEN 'Tuesday, ' ELSE '' END
 +case when freq_interval = 4 THEN 'Wednesday, ' ELSE '' END
 +case when freq_interval = 5 THEN 'Thursday, ' ELSE '' END
 +case when freq_interval = 6 THEN 'Friday, ' ELSE '' END
 +case when freq_interval = 7 THEN 'Saturday, ' ELSE '' END
 +case when freq_interval = 8 THEN 'Day of Month, ' ELSE '' END
 +case when freq_interval = 9 THEN 'Weekday, ' ELSE '' END
 +case when freq_interval = 10 THEN 'Weekend day, ' ELSE '' END

 ,', '
 ,''
 )
)
else cast(freq_interval as varchar(3)) END Days
,
case
 when freq_subday_type = 2 then ' every ' + cast(freq_subday_interval as varchar(7)) 
 + ' seconds' + ' starting at '
 + stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':') 
 when freq_subday_type = 4 then ' every ' + cast(freq_subday_interval as varchar(7)) 
 + ' minutes' + ' starting at '
 + stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':')
 when freq_subday_type = 8 then ' every ' + cast(freq_subday_interval as varchar(7)) 
 + ' hours'   + ' starting at '
 + stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':')
 else ' starting at ' 
 + stuff(stuff(RIGHT(replicate('0', 6) +  cast(active_start_time as varchar(6)), 6), 3, 0, ':'), 6, 0, ':')
end time
from msdb.dbo.sysjobs
inner join msdb.dbo.sysjobschedules on sysjobs.job_id = sysjobschedules.job_id
inner join msdb.dbo.sysschedules on sysjobschedules.schedule_id = sysschedules.schedule_id
where freq_type in (16, 32)

Screenshoot berikut menunjukkan hasil dari script di atas. Perhatikan bahwa hanya ada dua baris. Baris pertama berjalan pada hari terakhir setiap bulan dan jadwal yang lain berjalan pada hari kelima belas setiap bulan. Kedua baris tersebut secara spesifik berjalan pada jam 23:59:58.

Dan script di bawah ini untuk menghapus kedua job baru tersebut


-- remove monthly schedules and restore original 
-- schedule to the Insert into JobRunLog table with a schedule job

delete from msdb.dbo.sysjobschedules where schedule_id in
(
select schedule_id
from msdb.dbo.sysschedules
where name in ('Run last second of last day each month', 'Run last second of 15th day of the month')
)

delete from msdb.dbo.sysschedules where schedule_id in
(
select schedule_id
from msdb.dbo.sysschedules
where name in ('Run last second of last day each month', 'Run last second of 15th day of the month')
)

exec msdb.dbo.sp_attach_schedule  
    @job_name = 'Insert into JobRunLog table with a schedule',  
    @schedule_name = 'Weekly on Saturday Morning at 1 AM';
Share This :

0 Comments