SQL Server Agent adalah komponen yang digunakan untuk otomatisasi tugas database. Misalnya, kita perlu melakukan pemeliharaan Indeks pada server Produksi selama jam non-kerja saja. Jadi, kami membuat tugas SQL Server untuk menjalankan pemeliharaan indeks dan menjadwalkannya untuk jam "nonaktif".
Saat kami menginstal SQL Server, layanan Agen Server SQL dinonaktifkan. Pertama, kami mengaktifkannya dan memulainya secara manual. Kemudian, kami mengonfigurasi pekerjaan SQL Server, menggunakan SQL Server Management Studio dan prosedur tersimpan sistem dari database MSDB.
Artikel ini menjelaskan cara membuat Pekerjaan SQL Server menggunakan prosedur tersimpan sistem dari database MSDB.
Sistem menyimpan prosedur database MSDB
SQL Server menggunakan yang berikut:
- sp_add_job :prosedurnya adalah untuk membuat pekerjaan baru. Jika berhasil, ia mengembalikan @job_id. Argumen berikut berlaku:
- @job_name:Ini adalah nama pekerjaan yang unik.
- @enabled:Pekerjaan diaktifkan atau dinonaktifkan. Setelah tugas dibuat, Anda dapat menyetel nilai parameter sebagai 1 untuk mengaktifkan tugas.
- @notify_level_eventlog:Parameter ini digunakan untuk menulis status SQL Job di Windows event viewer.
Nilai | Deskripsi |
0 | Hasil tugas tidak akan ditulis ke log peristiwa. |
1 | Jika pekerjaan berhasil dijalankan, hasilnya akan ditulis ke penampil acara |
2 (nilai default) | Jika pekerjaan gagal, hasil dan pesan kesalahan akan ditulis ke penampil acara |
3 | Hasil pekerjaan ditulis ke penampil acara. |
- @notify_level_email:Parameter ini berfungsi untuk mengirim email tentang hasil SQL Job. Nilai parameter yang valid sama dengan nilai argumen @notify_level_eventlog.
- @notify_level_page:Parameter ini berfungsi untuk mengirim pemberitahuan pager dari hasil SQL Job. Nilai parameter yang valid sama dengan nilai argumen @notify_level_eventlog.
- @delete_level:Parameter ini berfungsi untuk menghapus pekerjaan setelah selesai. Dalam hal ini, nilai parameter harus 1. Perhatikan bahwa nilai default adalah 0; maka, itu tidak akan menghapus pekerjaan setelah selesai.
- @category_level:Parameter ini menunjukkan nilai kategori pekerjaan. Nilai defaultnya adalah NULL.
- @owner_login_name:Nilainya adalah nama domain atau nama SQL Login pemilik pekerjaan.
2. Sp_add_jobserver: Prosedur tersimpan ini berfungsi untuk menentukan server target untuk eksekusi SQL Job. Prosedur menerima argumen berikut:
- @job_id:Ini adalah UNIQUEIDENTIFIER dari SQL Job. Nilai default dari argumen ini adalah NULL.
- @job_name:Ini adalah nama SQL Job.
- @server_name:Ini adalah nama server tempat Anda ingin menjalankan Pekerjaan SQL. Nilai argumen default dapat berupa server lokal (LOCAL) atau nama host server target.
3. sp_add_jobstep: Prosedur tersimpan ini berfungsi untuk menambahkan langkah pekerjaan di SQL Job. Prosedur ini menggunakan argumen berikut:
- @job_name:Nama pekerjaan yang Anda tambahkan langkahnya. Ini adalah SYSNAME dengan NULL sebagai nilai default.
- @step_name:Nama langkah. Ini adalah SYSNAME dengan NULL sebagai nilai default.
- @step_id:ID berurutan dari langkah tugas. Ini adalah angka tambahan tanpa celah. Ini adalah nilai INT, dan nilai defaultnya adalah NULL.
- @cmdexec_success_code:Nilai ini dikembalikan oleh subsistem CmdExec. Ini menunjukkan apakah eksekusi perintah berhasil. Kode adalah nilai int dengan 0 sebagai nilai default.
- @on_sucess_action:Nilai ini menunjukkan tindakan yang harus dilakukan setelah langkah pekerjaan berhasil diselesaikan. Nilainya dapat berupa salah satu dari berikut ini:
Nilai | Deskripsi |
1 | Berhenti dari pekerjaan dan kembali sukses |
2 | Keluar dari pekerjaan dan kembali gagal |
3 | Lanjutkan ke langkah pekerjaan berikutnya |
4 | Buka id langkah on_success_step_id |
- @on_fail_action:tentukan tindakan apa yang harus dilakukan jika langkah tugas gagal. Ini adalah nilai INT, dan nilai defaultnya adalah NULL.
- @retry_attempt:tentukan jumlah percobaan ulang setelah langkah pekerjaan gagal. Ini adalah nilai INT, dan nilai defaultnya adalah NULL.
- @retry_interval:mengatur interval waktu (menit) antara dua upaya kegagalan langkah Pekerjaan SQL. Ini adalah nilai INT, dan nilai defaultnya adalah NULL.
- @os_run_priority:
- @Subsistem:tentukan nama subsistem yang digunakan oleh Agen Server SQL untuk menjalankan perintah. Nilai yang valid adalah sebagai berikut:
Nilai subsistem | Deskripsi |
CmdExec | Perintah sistem operasi atau file yang dapat dieksekusi (*.exe,*.bat) |
ANALISISKURI | Kueri layanan analisis SQL Server, misalnya, MDX, DMX. |
ANALISISKURI | Perintah layanan analisis SQL Server, misalnya, XMLA. |
SSIS | Paket layanan integrasi SQL Server. |
PowerShell | Perintah atau skrip PowerShell. |
T-SQL | Kueri T-SQL atau prosedur Tersimpan |
Distribusi | Agen distributor replikasi SQL Server. |
Snapshot | Agen snapshot replikasi SQL Server. |
Pembaca Log | Agen pembaca log replikasi SQL Server. |
Pembaca Antrian | Pembaca antrian replikasi SQL Server. |
- @command:tentukan perintah yang harus dijalankan oleh Layanan Agen Server SQL melalui subsistem. Tipe datanya adalah varchar(max), dan nilai defaultnya adalah NULL.
- @Database_name:Tentukan nama database tempat Anda ingin menjalankan perintah. Parameter ini berguna saat Anda menjalankan skrip T-SQL menggunakan SQL Server Agent.
4. Sp_add_jobschedule: prosedur tersimpan berfungsi untuk membuat jadwal SQL Job. Prosedur ini menggunakan argumen berikut:
- @job_name:tentukan nama Pekerjaan SQL. Jadwal akan dibuat untuk tugas SQL yang ditentukan dalam argumen @job_name.
- @name:nama jadwal. Tipe datanya adalah varchar, dan nilai defaultnya adalah NULL.
- @enabled:setel 1 untuk mengaktifkan jadwal atau 0 untuk menonaktifkan jadwal.
- @freq_type:menunjukkan waktu eksekusi tugas SQL. Tipe data parameternya adalah INT, dan nilai defaultnya adalah 0. Nilai yang valid adalah salah satu dari berikut ini:
Nilai | Deskripsi |
1 | Pekerjaan akan dieksekusi hanya Satu kali. |
4 | Harian. |
8 | Mingguan |
16 | Bulanan |
64 | Jalankan pekerjaan saat Layanan Agen Server SQL dimulai |
128 | Jalankan tugas SQL saat server dalam keadaan idle. |
- @freq_interval:menunjukkan hari eksekusi tugas SQL. Tipe datanya adalah INT, dan nilai defaultnya adalah 0. Nilainya bergantung pada nilai yang ditentukan dalam parameter @freq_type. Nilai yang valid adalah salah satu dari berikut ini:
Nilai | Pengaruh pada jadwal Pekerjaan |
1 (Sekali) | @Freq_interval tidak akan digunakan. |
4 (Harian) | Setiap @freq_interval hari |
8 | Nilai @Freq_interval dapat berupa salah satu dari berikut ini: 1 =Minggu 2 =Senin 4 =Selasa 8 =Rabu 16 =Kamis 32 =Jumat 64 =Sabtu |
16 | Jalankan tugas di @Freq_interval hari dalam sebulan |
64 | @Freq_interval tidak akan digunakan |
128 | @Freq_interval tidak akan digunakan |
- @freq_subday_type:tentukan unit freq_subday_interval. Tipe datanya adalah INT, dan nilai defaultnya adalah NULL.
- @active_start_date:atur tanggal saat Anda ingin memulai eksekusi pekerjaan. Tipe datanya adalah INT, dan tidak memiliki nilai default. Format tanggal adalah YYYYMMDD. Nilainya harus lebih besar atau sama dengan 19900101.
- @active_end_date:tentukan tanggal kapan harus menghentikan eksekusi pekerjaan. Tipe datanya adalah INT, tanpa nilai default. Format tanggal adalah YYYYMMDD, dan nilainya harus lebih besar atau sama dengan 19900101.
- @active_start_time:tentukan waktu kapan Anda ingin memulai eksekusi pekerjaan. Tipe datanya adalah INT, tanpa nilai default. Format waktunya adalah HHMMSS.
- @active_end_time:tentukan waktu kapan Anda ingin menghentikan eksekusi pekerjaan. Tipe datanya adalah INT, tanpa nilai default. Format waktunya adalah HHMMSS.
Kode T-SQL untuk membuat Pekerjaan SQL
Untuk mengilustrasikan prosesnya, kami menggunakan SQL Server 2019 di workstation dengan AdventureWorks2017 database, dipulihkan dari cadangan. Kami membuat Pekerjaan SQL bernama Cadangan Penuh Harian – ini menghasilkan cadangan AdventureWorks2017 database dan salin di C:\Backups lokasi.
Pertama, kita harus mengaktifkan Agent XPs. Ini adalah opsi lanjutan. Oleh karena itu, pertama-tama kita aktifkan opsi konfigurasi lanjutan dan komponen Agent XPs.
Untuk melakukannya, jalankan kueri berikut:
EXEC Sp_configure
'Show advanced options',
1
go
RECONFIGURE WITH override
EXEC Sp_configure
'Agent XPs',
1
go
RECONFIGURE WITH override
Setelah Agen diaktifkan, kami memulai layanan Agen.
Buka SQL Server Management Studio dan sambungkan ke instance SQL Server. Kemudian, klik kanan pada SQL Server Agent dan klik Mulai .
Setelah memulai Agen, kita dapat membuat tugas agen SQL Server.
Seperti yang disebutkan, kami akan membuat tugas SQL untuk membuat cadangan AdventureWorks2017 basis data. Untuk ini, kami menjalankan perintah berikut menggunakan SQL Server Agent.
N'Backup Database [AdventureWorks2017] to disk=''C:\Backups\AdventureWorks2017.bak'' with compression'
Untuk membuat Pekerjaan SQL baru bernama Cadangan Penuh Harian, jalankan skrip berikut:
USE [msdb]
go
DECLARE @jobId BINARY(16)
EXEC msdb.dbo.Sp_add_job
@job_name=N'Daily Full Backup',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_page=2,
@delete_level=0,
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'NISARG-PC\Nisarg',
@job_id = @jobId output
SELECT @jobId
go
Ini akan menjalankan pekerjaan di workstation lokal saya. Jadi, kami menambahkannya ke Server Pekerjaan.
Jalankan kueri berikut:
EXEC msdb.dbo.Sp_add_jobserver
@job_name=N'Daily Full Backup',
@server_name = N'NISARG-PC'
go
Langkah tugas mengeksekusi database cadangan memerintah. Untuk mengkonfigurasi langkah pekerjaan, gunakan kode berikut:
USE [msdb]
go
EXEC msdb.dbo.Sp_add_jobstep
@job_name=N'Daily Full Backup',
@step_name=N'Generate Backup',
@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'Backup Database [AdventureWorks2017] to disk=''C:\Backups\AdventureWorks2017.bak'' with compression'
,
@database_name=N'master',
@flags=0
go
Pekerjaan SQL akan berjalan setiap hari pada pukul 1:00 pagi. Untuk mengkonfigurasi jadwal, gunakan kode berikut:
USE [msdb]
go
DECLARE @schedule_id INT
EXEC msdb.dbo.Sp_add_jobschedule
@job_name=N'Daily Full Backup',
@name=N'Run Backup At',
@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=20200918,
@active_end_date=99991231,
@active_start_time=10000,
@active_end_time=235959,
@schedule_id = @schedule_id output
SELECT @schedule_id
go
Seluruh kode pekerjaan adalah sebagai berikut:
USE [msdb]
go
DECLARE @jobId BINARY(16)
EXEC msdb.dbo.Sp_add_job
@job_name=N'Daily Full Backup',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=2,
@notify_level_page=2,
@delete_level=0,
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'NISARG-PC\Nisarg',
@job_id = @jobId output
SELECT @jobId
go
EXEC msdb.dbo.Sp_add_jobserver
@job_name=N'Daily Full Backup',
@server_name = N'NISARG-PC'
go
USE [msdb]
go
EXEC msdb.dbo.Sp_add_jobstep
@job_name=N'Daily Full Backup',
@step_name=N'Generate Backup',
@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'Backup Database [AdventureWorks2017] to disk=''C:\Backups\AdventureWorks2017.bak'' with compression'
,
@database_name=N'master',
@flags=0
go
USE [msdb]
go
DECLARE @schedule_id INT
EXEC msdb.dbo.Sp_add_jobschedule
@job_name=N'Daily Full Backup',
@name=N'Run Backup At',
@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=20200918,
@active_end_date=99991231,
@active_start_time=10000,
@active_end_time=235959,
@schedule_id = @schedule_id output
SELECT @schedule_id
go
Kami menjalankan pekerjaan secara manual untuk demonstrasi terlebih dahulu, dengan mengeksekusi kode di bawah ini:
use msdb
go
exec sp_start_job 'Daily Full Backup'
Anda dapat melihat status pekerjaan dengan menjalankan kueri berikut:
SELECT NAME
AS [Job Name],
CONVERT(VARCHAR, Dateadd(s, ( run_time / 10000 ) * 60 * 60
+ ( ( run_time - ( run_time / 10000 ) *
10000 ) /
100 ) * 60
+ ( run_time - ( run_time / 100 ) * 100
), CONVERT(DATETIME, Rtrim(run_date), 113)), 100)
AS
[Job Executed Date and Time],
CASE
WHEN enabled = 1 THEN 'Enabled'
ELSE 'Disabled'
END
[Job Status],
CASE
WHEN JobHistory.run_status = 0 THEN 'Failed'
WHEN JobHistory.run_status = 1 THEN 'Succeeded'
WHEN JobHistory.run_status = 2 THEN 'Retry'
WHEN JobHistory.run_status = 3 THEN 'Cancelled'
ELSE 'Unknown'
END
[Job Outcome]
FROM sysjobhistory JobHistory
JOIN sysjobs Jobs
ON JobHistory.job_id = Jobs.job_id
WHERE NAME = 'Daily Full Backup'
Keluaran:
Untuk melihat file cadangan, Buka C:\Backups lokasi:
Seperti yang Anda lihat, file cadangan telah dibuat.