Karena saya seorang DBA (dan dalam banyak kasus, sysadmin de-facto), SQL Server diinstal pada hampir setiap server saya harus bekerja dengan secara teratur. Saya menyadari baru-baru ini bahwa saya telah menggunakan Agen SQL sebagai penjadwal pekerjaan di hampir setiap kasus, daripada Penjadwal Tugas Windows asli.
Dari perspektif saya, Agen SQL memiliki sejumlah keunggulan dibandingkan Penjadwal Tugas Windows asli:
- Remote (dari workstation saya) memulai / menghentikan / memonitor tugas
- Jadwal bersama (bukan masing-masing tugas sendiri)
- Beberapa langkah dan aliran kontrol
- Berbagai jenis tugas
- Lansiran tentang kegagalan / penyelesaian
- Dapat dikonfigurasi untuk bertindak sebagai pengguna yang berbeda
- (Sedang) pesan kesalahan deskriptif, bukan hanya kode kesalahan
Namun, saya tidak bisa lepas dari perasaan bahwa ini adalah praktik yang buruk - Agen SQL harus dicadangkan hanya untuk tugas-tugas yang berhubungan dengan database, dan saya harus membiarkan tugas-tugas tingkat OS berjalan di Penjadwal Tugas Windows, meskipun saya tidak suka kegunaannya.
Apakah saya tetap bisa mengandalkan SQL Agent dengan cara ini? Jika tidak, apakah saya harus mempertimbangkan penjadwal tugas Windows pihak ketiga untuk mendapatkan beberapa fungsionalitas yang saya cari?
Jawaban:
Secara pribadi saya pikir peringatan terbesar adalah kesulitan dalam menjaga daftar pekerjaan terorganisir. Sejauh yang saya ketahui Anda tidak dapat membuat folder untuk mengatur pekerjaan, jadi sejumlah besar akan merepotkan. Saya tidak 100% yakin akan hal ini, karena tidak ada server saya yang memiliki lebih dari selusin pekerjaan. Penjadwal Tugas Server 2008 dan yang lebih baru memungkinkan organisasi yang lebih mudah, IMO, dan secara umum memiliki fungsionalitas yang jauh lebih baik daripada versi sebelumnya. Saya yakin aplikasi pihak ketiga melakukan pekerjaan yang lebih baik. Saya akan menangis jika saya harus menggunakan penjadwal tugas Server 2003 atau
at.exe
.Peringatan kedua yang bisa saya pikirkan akan berpotensi menempatkan terlalu banyak beban pada server SQL. Agen adalah program kecil, tetapi menjalankan tugas yang panjang atau rumit dapat dengan mudah menghabiskan banyak sumber daya. Sumber daya itu tidak akan tersedia untuk mesin SQL. Karena mesin SQL diprogram untuk mengambil sekitar 80% dari memori sistem yang tersedia, ini bisa menjadi masalah.
Ketiga, cadangan mungkin menjadi masalah. Anda tidak hanya perlu membuat cadangan sistem file, tetapi juga database msdb untuk memungkinkan pemulihan pekerjaan (atau menggunakan sesuatu untuk skrip tugas ke file teks). Ini menambah lapisan kompleksitas untuk pemulihan bencana.
Akhirnya, Anda tidak ingin berada dalam posisi di mana Anda membayar lisensi SQL Server hanya untuk menjalankan SQL Server Agent. Jika database dinonaktifkan, Anda harus mengembangkan rencana untuk bermigrasi dari SQL Server Agent.
sumber
Pada pekerjaan saya sebelumnya, saya melakukan hal ini, sebagian besar karena semua pekerjaan dijalankan dari pusat, kluster primer kami, yang merupakan server yang paling terlihat. Saya bisa melihat semua tugas terjadwal kami di satu tempat daripada harus memeriksa item baris perintah pada sekelompok server.
Meskipun ini sebagian besar subyektif (dan akan sulit untuk mendapatkan jawaban yang "benar" dalam format ini), saya tidak berpikir ada yang salah dengan pendekatan ini selain menjadi satu titik kegagalan.
Itu mungkin tidak relevan jika semua tugas berinteraksi dengan, atau bergantung pada, server database sedang berjalan dan layanan SQL Server berjalan (dalam kasus kami, itu memang).
Oh, dan Anda perlu menambahkan penanganan kesalahan untuk kasus-kasus di mana server di mana tugas mencoba untuk menjalankan tidak sampai - sesuatu yang Anda tidak harus lakukan jika tugas itu diatur pada server itu.
sumber
Saya akan ~ kemungkinan ~ mengambil SQL Agent ke windows task manager ... jelas untuk tugas-tugas terkait database.
Jika Anda dapat membuat kode sama sekali, atau memiliki orang yang dapat membuat kode, Anda dapat melakukan sedikit hal dengan aplikasi konsol dan membungkusnya menjadi pembuat layanan seperti TopShelf (http://topshelf-project.com/) Ini bisa menjadi murah / hack mudah untuk mendapatkan decoupling kecil dari SQL Agent untuk semuanya dan mulai juga memberi Anda lapisan untuk antrian jika Anda berada di titik itu.
Secara pribadi, Anda tampaknya cukup peduli tentang hal ini serta cukup mengetahui tentang gotcha Anda sehingga saya pikir Anda akan baik-baik saja. Orang-orang yang tidak peduli / tahu yang benar-benar saya khawatirkan. Saya tidak ragu bahwa Anda akan mengevaluasi solusi Anda pada interval yang masuk akal dan bertindak sesuai.
sumber
Pilihan lain adalah membuat tabel untuk tugas yang dijadwalkan dengan prosedur tersimpan untuk memperbarui tabel antrian pesan darinya. Kemudian Agen SQL Server akan memanggil prosedur tersimpan setiap kali untuk membuat pesan dan memperbarui status tugas. Sistem lain akan meminta tabel antrian pesan melalui koneksi SQL atau lapisan API web sebagai JSON.
sumber