Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Konfigurasikan Pekerjaan SQL di SQL Server menggunakan T-SQL

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:

  1. 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gunakan NEWSEQUENTIALID() untuk Membuat GUID yang Bertambah di SQL Server

  2. Bagaimana menemukan gaji maksimum ketiga atau n dari tabel gaji?

  3. Kueri Pemblokiran SQL Server

  4. Pernyataan UPDATE bertentangan dengan batasan REFERENCE - Tutorial SQL Server / TSQL Bagian 76

  5. Mengubah string yang Dipisahkan Koma menjadi baris individual