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

BLANTERWISDOM105

Job Schedule Pada SQL Server Dengan SSMS dan Query

8/07/2020

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
Share This :

1 Comments