Selamat datang Kembali ke Blog Agung Code, Hari ini
saya akan menjelaskan bagaimana cara membuat Job Schedule dalam SQl Server. Yang mana, anda dapat membuat semua tipe pekerjaan untuk dijalankan secara otomatis berdasarkan
interval waktu atau dapat diatur dengan fleksibel sehingga tidak ada Job dijalan secara bersamaan. Pada artikel ini akan disertakan pula contoh
penggunaan job schedule pada SQL Server sehingga anda dapat memahaminya dengan
mudah. Untuk itu buatlah Stored Procedures yang isi berupa Insert data
ke dalam table tertentu.
Pada tabel tersebut disertakan juga field created date untuk menunjukan kapan proses insert tersebut dilakukan. Sebelum membahas cara pengaturan job schedule SQL Server, anda buatlah table dan stored procedure di bawah ini,
CREATE TABLE [dbo].[JobScheduleTest](
[Jam] varchar(2),
[Menit] varchar(2),
[Detik] varchar(2),
[Created_By] datetime
)
CREATE PROCEDURE StoreProcedure_JobSchedule
AS
BEGIN
SET NOCOUNT ON;
Insert into TEST.dbo.JobScheduleTest(Jam, Menit, Detik, Created_By) Values(DATEPART(HOUR, GETDATE()), DATEPART(MINUTE, GETDATE()),DATEPART(SECOND, GETDATE()), Getdate())
END
Cara Membuat Job Schedule SQL Server Menggunakan SSMS
Langkah 1
Untuk memulai proses
pembuatan Job Schedule SQL Server kita diharuskan untuk check apakah SQL Server
Agent Service berjalan atau tidak di services.msc pada Windows anda. Jika
kondisinya Disable (stoped) maka anda harus atur manual atau automatic.
Langkah 2
Sekarang kembali ke tampilan SQL Server Management
Studo (SSMS), Pada Object Explorer arahkan mouse ke SQL Server Agent (Agent XPs
disabled) untuk mengaktifkan(enable) dengan klik kanan mouse dan piih Start.
Langkah 3
Pada Object Explorer lakukan expand dan klik kanan
pada Jobs lalu Klik New Job.
Langkah 4
Setelah jendelda New Job Schedule SQL Server tampil
Opsi General, Pada field Name, anda berikan nama
"InsertJobScheduleSQLServer" dan juda berikan dekripsinya. Kamu pun
dapat mengatur ownernya untuk yang memiliki akses.
Langkah 5
Arahkan ke tabs "Steps", di tab ini anda
harus menentukan apa yang ingin anda jalankan ketika job ini dijalankan, Klik
tombol New dan berikan Name Stepsnya dengan
"InsertDataWaktuAgungPanduan"
Pada field type ada berbagai opsi pekerjaan yang dapat
dilakukan namun pada artikel kali ini yang cocoknya menggunakan Transact-SQL Script
(T-SQL). Mungkin untuk tipe lainnya akan saya jelaskan pada artikel
selanjutnya.
Setelah mengisi Step Name dan memilih Type, sekarang anda
ketikan pada field Command:
EXECUTE TEST.dbo.StoreProcedure_JobSchedule
Pada Tabs “Advanced”, anda dapat mengyimpan hasil Job ke dalam file txt
pada directory tertentu.
Langkah 6
Sekarang di tab "Schedule", anda dapat
menggatur penjadwalan job dengan waktu yang anda butuhkan. Klik tombol New akan
menampilkan jendela "New Job Schedule".
- Pilih Recurring Jika anda ingin jadwal berjalan berulang kali
- Pilih One Time Jika anda ingin jadwal berjalan satu kali saja
Ketikan pada field-field pada jendela New Job Schedule
seperti berikut:
Name: Schedule 1 Agung Panduan
Schedule Type: Recurring (Enabled)
Job dikerjakan dapat daily, Weekly, Monthly namun
contoh ini daily (setiap hari)
Occurs: Daily (tiap hari)
Recurs every 1 day(s)
Job dapat diatur kapan jam job dijalankan (occurs once
at) namun untuk kali ini saya atur setiap 5 menit sekali dimulai pada jam 10:00
hingga 12:00 dari tanggal 08 hingga seterusnya (No End Date).
Occurs Every: 5 Minute
Starting Date: 10:00:00
Ending At: 12:00:00
Langkah 7
Selanjutnya di Tab "Alert" anda dapat
mengatur pesan peringatan ketika job sql server dijalankan dengan sukses atau
menghasilkan error maka itu akan menampilkan beberapa pesan peringatan kepada
pengguna.
Pesan Alert ini akan mengirimkan pesan seperti 015
Syntax Error in SQL Statements pada database TEST. Tidak hanya untuk satu user
saja namun dapat dikirimkan juga ke user lainnya pada Taba “Respons”.
Langkah 8
Sekarang ke tab berikutnya "Notifications"
Anda dapat mengirim notifikasi, yang berarti ketika pekerjaan Anda dijalankan,
status pekerjaan dikirim ke pengguna baik itu berhasil dijalankan atau terjadi
kesalahan. Anda bisa mendapatkan peringatan melalui email atau juga
menghasilkan file log.
Langkah 9
Sekarang ke tab berikutnya "Targets" di sini
Anda harus memilih server tempat pekerjaan Anda dijalankan. Sekarang tutup
jendela ini dengan mengklik tombol OK.
Langkah 10
Pada Object Explorer lakukan expand dan klik kanan
pada Jobs > InsertJobScheduleSQLServer dan pilih “Start Job At Step”.
Pengecekan Data Pada Tabel Setelah Job Dijalankan Secara Otomatis
Setelah pembuatan Job Schedule dibuat dan dijalankan
maka kita perlu bukti apakah Job tersebut berjalan atau tidak, dapat dengan
melihat data baru pada Tabel JobScheduleTest yang kita buat untuk menampung
data yang dikirim oleh Stored Procedures yang dijalankan Job atau dengan memeriksa
Job Activity Monitoring SQL Server.
Cara Membuat Job Schedule SQL Server Menggunakan Query
USE [msdb]
GO
/****** Object: Job [InsertJobScheduleSQLServer] Script Date: 08/08/2020 11:08:57 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 08/08/2020 11:08:57 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'InsertJobScheduleSQLServer',
@enabled=0,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Contoh untuk artikel Agung Panduan Dengan Judul Job Schedule SQL Server, Insert data Jam, Menit, Detik pada hari ini',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'sa', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [InsertDataWaktuAgungPanduan] Script Date: 08/08/2020 11:08:57 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'InsertDataWaktuAgungPanduan',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=1,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=1,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'
EXECUTE TEST.dbo.StoreProcedure_JobSchedule',
@database_name=N'TEST',
@output_file_name=N'D:ResultJobSchedule',
@flags=2
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Schedule 1 AgungPanduan',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=4,
@freq_subday_interval=5,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20200808,
@active_end_date=99991231,
@active_start_time=1000,
@active_end_time=120000,
@schedule_uid=N'6ced04e4-4b35-4229-97ca-ecbf9ccc9a03'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
atau
DECLARE @job_name NVARCHAR(128), @description NVARCHAR(512), @owner_login_name NVARCHAR(128), @database_name NVARCHAR(128);
SET @job_name = N'Some Title';
SET @description = N'Periodically do something';
SET @owner_login_name = N'login';
SET @database_name = N'Database_Name';
-- Delete job if it already exists:
IF EXISTS(SELECT job_id FROM msdb.dbo.sysjobs WHERE (name = @job_name))
BEGIN
EXEC msdb.dbo.sp_delete_job
@job_name = @job_name;
END
-- Create the job:
EXEC msdb.dbo.sp_add_job
@job_name=@job_name,
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_netsend=2,
@notify_level_page=2,
@delete_level=0,
@description=@description,
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=@owner_login_name;
-- Add server:
EXEC msdb.dbo.sp_add_jobserver @job_name=@job_name;
-- Add step to execute SQL:
EXEC msdb.dbo.sp_add_jobstep
@job_name=@job_name,
@step_name=N'Execute SQL',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_fail_action=2,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0,
@subsystem=N'TSQL',
@command=N'EXEC my_stored_procedure; -- OR ANY SQL STATEMENT',
@database_name=@database_name,
@flags=0;
-- Update job to set start step:
EXEC msdb.dbo.sp_update_job
@job_name=@job_name,
@enabled=1,
@start_step_id=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_netsend=2,
@notify_level_page=2,
@delete_level=0,
@description=@description,
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=@owner_login_name,
@notify_email_operator_name=N'agungkasep',
@notify_netsend_operator_name=N'',
@notify_page_operator_name=N'';
-- Schedule job:
EXEC msdb.dbo.sp_add_jobschedule
@job_name=@job_name,
@name=N'Daily',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=1,
@active_start_date=20200808, --YYYYMMDD
@active_end_date=99991231, --YYYYMMDD (this represents no end date)
@active_start_time=100000, --HHMMSS
@active_end_time=120000; --HHMMSS
Mantul tutorialnya
BalasHapus