Mengotomatiskan tugas manajemen menggunakan pekerjaan SQL Agent di Azure SQL Managed Instance
Berlaku untuk: Azure SQL Managed Instance
Menggunakan SQL Server Agent di SQL Server dan SQL Managed Instance, Anda dapat membuat dan menjadwalkan pekerjaan yang dapat dieksekusi secara berkala terhadap satu atau beberapa database untuk menjalankan kueri Transact-SQL (T-SQL) dan melakukan tugas pemeliharaan. Artikel ini membahas penggunaan SQL Agent untuk Azure SQL Managed Instance.
Catatan
SQL Agent tidak tersedia di Azure SQL Database atau Azure Synapse Analytics. Sebagai gantinya, kami merekomendasikan Otomatisasi pekerjaan dengan Elastic Jobs.
Kapan menggunakan pekerjaan SQL Agent
Ada beberapa skenario ketika Anda dapat menggunakan pekerjaan SQL Agent:
- Otomatisasi tugas manajemen dan jadwalkan untuk dijalankan setiap hari kerja, setelah jam kerja, dll.
- Menyebarkan perubahan skema, manajemen info masuk, pengumpulan data performa, atau pengumpulan telemetri penyewa (pelanggan).
- Perbarui data referensi (informasi umum di semua database), muat data dari Microsoft Azure Storage Blob. Microsoft merekomendasikan penggunaan autentikasi TANDA TANGAN AKSES BERSAMA untuk mengautentikasi ke penyimpanan Azure Blob.
- Tugas pemeliharaan umum termasuk
DBCC CHECKDB
untuk memastikan integritas data atau pemeliharaan indeks untuk meningkatkan performa kueri. Mengonfigurasi pekerjaan untuk dieksekusi di seluruh kumpulan database secara berulang, seperti selama jam sibuk. - Kumpulkan hasil kueri dari set database ke dalam tabel terpusat secara berkelanjutan. Kueri performa dapat terus dijalankan dan dikonfigurasi untuk memicu tugas tambahan untuk dijalankan.
- Mengumpulkan data untuk pelaporan
- Mengumpulkan data dari kumpulan database ke dalam satu tabel tujuan.
- Jalankan kueri pemrosesan data yang berjalan lebih lama di set besar database, misalnya pengumpulan telemetri pelanggan. Hasil dikumpulkan ke dalam satu tabel tujuan untuk analisis lebih lanjut.
- Pergerakan data
- Buat pekerjaan yang mereplikasi perubahan yang dibuat dalam database Anda ke database lain atau kumpulkan pembaruan yang dibuat dalam database jarak jauh dan terapkan perubahan dalam database.
- Buat pekerjaan yang memuat data dari atau ke database Anda menggunakan SQL Server Integration Services (SSIS).
Pekerjaan SQL Agent dalam Azure SQL Managed Instance
SQL Agent Jobs dijalankan oleh layanan SQL Agent yang terus digunakan untuk otomatisasi tugas di SQL Server dan SQL Managed Instance.
SQL Agent Jobs adalah seri skrip T-SQL yang ditentukan terhadap database Anda. Gunakan pekerjaan untuk menentukan tugas administratif yang dapat dijalankan satu atau beberapa kali dan dipantau keberhasilan atau kegagalannya.
Pekerjaan dapat berjalan di satu server lokal atau di beberapa server jarak jauh. SQL Agent Jobs adalah komponen Internal Mesin Database yang dijalankan dalam layanan SQL Managed Instance.
Ada beberapa konsep utama dalam SQL Agent Jobs:
- Langkah-langkah pekerjaan diatur dari satu atau beberapa langkah yang harus dijalankan dalam pekerjaan. Untuk setiap langkah pekerjaan, Anda dapat menentukan strategi mencoba kembali dan tindakan yang harus dilakukan jika langkah pekerjaan berhasil atau gagal.
- Jadwal menentukan kapan pekerjaan harus dijalankan.
- Pemberitahuan memungkinkan Anda menentukan aturan yang akan digunakan untuk memberi tahu operator melalui email setelah pekerjaan selesai.
Langkah-langkah pekerjaan
Langkah-langkah SQL Agent Job adalah urutan tindakan yang harus dijalankan SQL Agent. Setiap langkah memiliki langkah berikut yang harus dijalankan jika langkah berhasil atau gagal, jumlah upaya ulang dalam kasus kegagalan.
SQL Agent memungkinkan Anda membuat berbagai jenis langkah pekerjaan, seperti langkah-langkah pekerjaan Transact-SQL yang menjalankan satu batch Transact-SQL terhadap database, atau perintah OS/langkah-langkah PowerShell yang dapat menjalankan skrip OS kustom, langkah-langkah pekerjaan SSIS yang memungkinkan Anda memuat data menggunakan runtime SSIS, atau langkah-langkah replikasi yang dapat menerbitkan perubahan dari database Anda ke database lain.
Catatan
Untuk informasi selengkapnya tentang memanfaatkan Azure SSIS Integration Runtime dengan SSISDB yang dihosting oleh Azure SQL Managed Instance, lihat Menggunakan Azure SQL Managed Instance dengan SQL Server Integration Services (SSIS) di Azure Data Factory.
Replikasi transaksional dapat mereplikasi perubahan dari tabel Anda ke database lain di Azure SQL Managed Instance, Azure SQL Database, atau SQL Server. Untuk mengetahui informasinya, lihat Mengonfigurasi replikasi di Azure SQL Managed Instance.
Jenis langkah pekerjaan lainnya saat ini tidak didukung di SQL Managed Instance, seperti Replikasi penggabungan, dan pembaca Antrean.
Jadwal pekerjaan
Jadwal menentukan kapan tugas berjalan. Lebih dari satu pekerjaan dapat berjalan pada jadwal yang sama, dan lebih dari satu jadwal dapat berlaku untuk pekerjaan yang sama.
Jadwal dapat menentukan kondisi berikut saat tugas berjalan:
- Setiap kali SQL Server Agent dimulai. Pekerjaan diaktifkan setelah setiap kegagalan.
- Suatu kali, pada tanggal dan waktu tertentu, yang berguna untuk menunda berjalannya beberapa pekerjaan.
- Pada jadwal berulang.
Untuk informasi selengkapnya tentang penjadwalan pekerjaan SQL Agent, lihat Menjadwalkan Pekerjaan.
Catatan
SQL Managed Instance saat ini tidak memungkinkan Anda untuk memulai pekerjaan ketika CPU diam.
Pemberitahuan pekerjaan
SQL Agent Jobs memungkinkan Anda untuk mendapatkan pemberitahuan ketika pekerjaan selesai dengan sukses atau gagal. Anda dapat menerima pemberitahuan melalui email.
Jika belum diaktifkan, pertama-tama Anda harus mengonfigurasi fitur Mail Database pada Azure SQL Managed Instance:
GO
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE
Sebagai contoh latihan, siapkan akun email yang akan digunakan untuk mengirim pemberitahuan email. Tetapkan akun ke profil email yang disebut AzureManagedInstance_dbmail_profile
. Untuk mengirim email menggunakan pekerjaan SQL Agent di SQL Managed Instance, harus ada profil yang harus disebut AzureManagedInstance_dbmail_profile
. Jika tidak, SQL Managed Instance tidak akan dapat mengirim email melalui SQL Agent.
Catatan
Untuk server email, kami sarankan Anda menggunakan layanan relai SMTP terautentikasi untuk mengirim email. Layanan relai ini biasanya terhubung melalui port TCP 25 atau 587 untuk koneksi melalui TLS, atau port 465 untuk koneksi SSL, namun Database Mail dapat dikonfigurasi untuk menggunakan port apa pun. Port ini memerlukan aturan keluar baru di kelompok keamanan jaringan instans terkelola Anda. Layanan ini digunakan untuk mempertahankan reputasi IP dan domain untuk meminimalkan kemungkinan domain eksternal menolak pesan Anda atau meletakkannya ke folder SPAM. Pertimbangkan layanan relai SMTP terautentikasi yang sudah ada di server lokal Anda. Di Azure, SendGrid adalah salah satu layanan relai SMTP, tetapi ada yang lain.
Gunakan contoh skrip berikut untuk membuat akun dan profil Email Database, lalu kaitkan bersama-sama:
-- Create a Database Mail account
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'SQL Agent Account',
@description = 'Mail account for Azure SQL Managed Instance SQL Agent system.',
@email_address = '$(loginEmail)',
@display_name = 'SQL Agent Account',
@mailserver_name = '$(mailserver)' ,
@username = '$(loginEmail)' ,
@password = '$(password)';
-- Create a Database Mail profile
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'AzureManagedInstance_dbmail_profile',
@description = 'E-mail profile used for messages sent by Managed Instance SQL Agent.';
-- Add the account to the profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'AzureManagedInstance_dbmail_profile',
@account_name = 'SQL Agent Account',
@sequence_number = 1;
Uji konfigurasi Email Database melalui T-SQL menggunakan prosedur tersimpan sistem sp_send_db_mail:
DECLARE @body VARCHAR(4000) = 'The email is sent from ' + @@SERVERNAME;
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AzureManagedInstance_dbmail_profile',
@recipients = 'ADD YOUR EMAIL HERE',
@body = 'Add some text',
@subject = 'Azure SQL Instance - test email';
Anda dapat memberi tahu operator bahwa sesuatu terjadi dengan pekerjaan SQL Agent Anda. Operator menentukan informasi kontak untuk individu yang bertanggung jawab atas pemeliharaan satu atau beberapa instans di SQL Managed Instance. Terkadang, tanggung jawab operator ditetapkan untuk satu individu.
Dalam sistem dengan beberapa instance di SQL Managed Instance atau SQL Server, banyak individu dapat berbagi tanggung jawab operator. Operator tidak berisi informasi keamanan, dan tidak mendefinisikan prinsip keamanan. Idealnya, operator bukan individu yang tanggung jawabnya dapat berubah, tetapi grup distribusi email.
Anda dapat membuat operator menggunakan SQL Server Management Studio (SSMS) atau skrip T-SQL yang ditunjukkan dalam contoh berikut:
EXEC msdb.dbo.sp_add_operator
@name=N'AzureSQLTeam',
@enabled=1,
@email_address=N'AzureSQLTeamn@contoso.com';
Konfirmasi keberhasilan atau kegagalan email melalui Log Email Database di SQL Server Management Studio.
Anda kemudian dapat memodifikasi pekerjaan Agen SQL apa pun dan menetapkan operator yang akan diberi tahu melalui email jika pekerjaan selesai, gagal, atau berhasil menggunakan SSMS atau skrip T-SQL berikut:
EXEC msdb.dbo.sp_update_job @job_name=N'Load data using SSIS',
@notify_level_email=3, -- Options are: 1 on succeed, 2 on failure, 3 on complete
@notify_email_operator_name=N'AzureSQLTeam';
Job history
Azure SQL Managed Instance saat ini tidak mengizinkan Anda untuk mengubah properti SQL Agent apa pun karena disimpan dalam nilai registri yang mendasarinya. Ini berarti opsi untuk menyesuaikan kebijakan penyimpanan Agent untuk catatan riwayat pekerjaan ditetapkan pada default 1000 total catatan dan maksimal 100 catatan riwayat per pekerjaan.
Untuk informasi selengkapnya, lihat Melihat riwayat pekerjaan SQL Agent.
Memperbaiki keanggotaan peran database
Jika pengguna yang ditautkan ke login non-sysadmin ditambahkan ke salah satu dari tiga peran database tetap Agen SQL dalam msdb
database sistem, ada masalah di mana izin EXECUTE eksplisit perlu diberikan ke tiga prosedur tersimpan sistem dalam master
database. Jika masalah ini ditemui, pesan The EXECUTE permission was denied on the object <object_name> (Microsoft SQL Server, Error: 229)
kesalahan akan ditampilkan.
Setelah Anda menambahkan pengguna ke peran database tetap Agen SQL (SQLAgentUserRole, SQLAgentReaderRole, atau SQLAgentOperatorRole) di msdb
, untuk setiap masuk pengguna yang ditambahkan ke peran ini, jalankan skrip T-SQL di bawah untuk secara eksplisit memberikan izin EXECUTE ke sistem prosedur tersimpan yang terdaftar. Contoh ini mengasumsikan bahwa nama pengguna dan nama untuk masuk sama:
USE [master]
GO
CREATE USER [login_name] FOR LOGIN [login_name];
GO
GRANT EXECUTE ON master.dbo.xp_sqlagent_enum_jobs TO [login_name];
GRANT EXECUTE ON master.dbo.xp_sqlagent_is_starting TO [login_name];
GRANT EXECUTE ON master.dbo.xp_sqlagent_notify TO [login_name];
Batasan pekerjaan SQL Agent di Azure SQL Managed Instance
Perlu dicatat perbedaan antara SQL Agent yang tersedia di SQL Server dan sebagai bagian dari SQL Managed Instance. Untuk informasi selengkapnya tentang perbedaan fitur yang didukung antara SQL Server dan SQL Managed Instance, lihat Perbedaan Azure SQL Managed Instance dari SQL Server.
Beberapa fitur SQL Agent yang tersedia di SQL Server tidak didukung di SQL Managed Instance:
- Pengaturan SQL Agent adalah hanya baca.
- Prosedur tersimpan sistem
sp_set_agent_properties
tidak didukung.
- Prosedur tersimpan sistem
- Mengaktifkan/menonaktifkan SQL Agent saat ini tidak didukung. SQL Agent selalu berjalan.
- Meskipun pemberitahuan didukung sebagian, hal berikut ini tidak didukung:
- Penyeranta tidak didukung.
- NetSend tidak didukung.
- Pemberitahuan tidak didukung.
- Proksi tidak didukung.
- Eventlog tidak didukung.
- Pemicu jadwal kerja berdasarkan CPU diam tidak didukung.
- Langkah-langkah pekerjaan replikasi penggabungan tidak didukung.
- Pembaca Antrean tidak didukung.
- Analysis Services tidak didukung.
- Menjalankan skrip yang disimpan sebagai file pada disk tidak didukung.
- Mengimpor modul eksternal, seperti dbatool dan dbacheck, tidak didukung.
- PowerShell Core tidak didukung.
Pelajari lebih lanjut
- Apa itu Azure SQL Managed Instance?
- Apa yang baru di Azure SQL Managed Instance?
- Perbedaan Azure SQL Managed Instance T-SQL dari SQL Server
- Perbandingan fitur: Azure SQL Database dan Azure SQL Managed Instance