SQL Server Agent ile Job Nasıl Oluşturulur? Adım, Zamanlama ve Bildirim Ayarları
Beceri rehberi

SQL Server Agent ile Job Nasıl Oluşturulur? Adım, Zamanlama ve Bildirim Ayarları

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 6 dk okuma

SQL Server Agent, veritabanı görevlerini belirlediğiniz zamanda kendiliğinden çalıştıran Windows servisidir. İş, adım, zamanlama ve bildirimi sırayla kurarak yedek, bakım ve rapor yenileme görevlerini otomatikleştirirsiniz.

Bir bakışta

  1. Bir iş (job), bir ya da daha çok adımdan oluşur. Her adım tek bir görev yapar; örneğin bir T-SQL komutu çalıştırmak ya da bir SSIS paketini başlatmak.
  2. Zamanlama işi ne zaman çalıştıracağını söyler. Tek seferlik, yinelenen, Agent başlarken ya da işlemci boştayken çalıştırılabilir.
  3. Bildirim, işin başarısız olduğunu size duyurur. Operatör tanımlayıp işin başarıda, hatada ya da her bitişte haber vermesini sağlarsınız.
  4. İş kurmak kadar yetki ve servis durumu da önemlidir. Servis kapalıysa, yetki eksikse ya da bildirim altyapısı yoksa iş çalışmaz veya sessiz kalır.

SQL Server Agent ne yapar, hangi parçalardan oluşur?

Microsoft belgesine göre SQL Server Agent, SQL Server'daki zamanlanmış yönetim görevlerini (iş) yürüten bir Windows servisidir. İş bilgileri SQL Server içinde saklanır. Bir iş bir ya da birden çok adım içerir ve her adımın kendi görevi vardır; örneğin bir veritabanını yedeklemek. Agent, işi bir zamanlamaya göre, belirli bir olaya karşılık ya da elle istek üzerine çalıştırabilir; bir sorun çıkarsa olayı kaydedip size haber verir.

Temel parçalar şunlardır: iş görevin kendisini, zamanlama işin ne zaman çalışacağını, uyarı belirli bir olaya otomatik tepkiyi, operatör ise bildirimin gideceği kişiyi tanımlar. Aynı zamanlamayı birden çok iş kullanabilir; bir işe birden çok zamanlama da bağlanabilir. Yönetim için SSMS'in grafik arayüzü, T-SQL betikleri ya da SQL Server Management Objects kullanılır.

Tipik işler: gece yedekleri, indeks ve istatistik bakımı, ara tabloları yenileyen veri aktarımları, eski kayıtları temizleme ve raporlama tablolarını güncelleme. Ortak özellikleri, öngörülebilir adımlardan oluşmaları ve belli bir zamanda ya da olaya bağlı olarak tekrarlanmalarıdır.

Başlamadan önce: servis, yetki ve ürün desteği

İş kurmadan önce üç noktayı denetleyin. Birincisi servis: belgeye göre SQL Server kurulurken kullanıcı otomatik başlatmayı özellikle seçmediyse SQL Server Agent servisi varsayılan olarak devre dışıdır. İşiniz hiç tetiklenmiyorsa ilk bakılacak yer SQL Server Configuration Manager'daki servis durumudur.

İkincisi yetki: iş oluşturan kullanıcı sysadmin rolünde ya da msdb veritabanındaki SQL Server Agent sabit veritabanı rollerinden birinde olmalıdır. İşi yalnızca sahibi ya da sysadmin üyeleri değiştirebilir. Bir işi başka bir oturuma atamak, o oturumun işi çalıştırmaya yeterli yetkiye sahip olduğunu garanti etmez.

Üçüncüsü ürün desteği: Agent her SQL Server sürümünde ve her bulut ürününde aynı kapsamda bulunmaz. Yönetilen örnek ürünlerinde özelliklerin çoğu desteklenir ama hepsi değildir. Kullandığınız sürümün özellik tablosuna ve ilgili belgeye bakmadan iş tasarımına başlamayın.

SSMS ile adım adım iş oluşturma

SSMS'te işi sihirbaz benzeri bir iletişim kutusuyla kurarsınız. Nesne Gezgini'nde sunucuyu genişletin, SQL Server Agent altında Jobs düğümüne sağ tıklayıp New Job seçin. İletişim kutusunda soldaki sayfalar sırayla şunlardır: General (iş adı, sahip, açıklama), Steps (adımlar), Schedules (zamanlamalar), Alerts (uyarılar), Notifications (bildirimler) ve Targets (hedef sunucular). Tamam dediğinizde iş kaydedilir.

Adımlar sayfasında her adım için ad, tür, komut ve çalışacağı veritabanı bilgisi girilir. Birden çok adım varsa sıralarını değiştirebilir, işin hangi adımla başlayacağını seçebilirsiniz. Zamanlama sayfasında yeni bir zamanlama oluşturur ya da var olanı seçersiniz. Bildirim sayfasında işin bittiğinde kime ve hangi durumda haber vereceğini belirlersiniz.

Tasarımda akılda tutulacak ilke: işi küçük ve anlaşılır adımlara bölün. Tek devasa adım yerine 'hazırlık, ana işlem, doğrulama' gibi ayrı adımlar, hatanın nerede olduğunu hemen gösterir ve adım düzeyinde yeniden deneme tanımlamanıza izin verir.

Şekil 1

İş, adım, zamanlama ve bildirim sırayla kurulur

Her aşama bir öncekinin üzerine biner

  1. İşi oluşturAd, sahip ve açıklama General sayfasında girilir.
  2. Adım ekleKomut, tür ve veritabanı belirlenir; sıra ayarlanır.
  3. Zamanlaİşin ne zaman ve ne sıklıkla çalışacağı tanımlanır.
  4. BildirOperatör seçilir; başarı, hata ya da her bitişte haber verilir.
  5. Elle çalıştırıp sınaZamanını beklemeden başlatıp çıktıyı ve geçmişi denetleyin.
Kaynak: Kaynak: Microsoft Learn, SQL Server Agent iş oluşturmaMindset Institute

T-SQL ile iş oluşturma

Aynı işi betikle kurmak, ortamlar arasında tekrarlanabilir olduğu için daha iyidir. Belgedeki yaklaşım msdb veritabanındaki sistem yordamlarını kullanır: sp_add_job işi oluşturur, sp_add_jobstep adımı ekler, sp_add_schedule zamanlamayı tanımlar, sp_attach_schedule zamanlamayı işe bağlar ve sp_add_jobserver işi yerel sunucuya atar.

USE msdb; GO

EXECUTE dbo.sp_add_job @job_name = N'Gece_Rapor_Tablolarini_Yenile'; GO

EXECUTE dbo.sp_add_jobstep @job_name = N'Gece_Rapor_Tablolarini_Yenile', @step_name = N'Ozet tabloyu doldur', @subsystem = N'TSQL', @command = N'EXEC dbo.rapor_tablosunu_yenile;'; GO

EXECUTE dbo.sp_add_schedule @schedule_name = N'Gunluk', @freq_type = 4, @freq_interval = 1, @active_start_time = 010000; GO

EXECUTE dbo.sp_attach_schedule @job_name = N'Gece_Rapor_Tablolarini_Yenile', @schedule_name = N'Gunluk'; GO

EXECUTE dbo.sp_add_jobserver @job_name = N'Gece_Rapor_Tablolarini_Yenile'; GO

Belgedeki günlük zamanlama örneği de aynı üç parametreyi kullanır: bu değerler birlikte her gün belirli bir saatte çalışan bir zamanlama tanımlar. sp_add_jobserver unutulursa iş tanımlanır ama hiçbir sunucuda çalışmaz; bu, betikle iş kurarken en sık yapılan eksik adımdır.

Mevcut işleri listelemek için msdb içindeki dbo.sysjobs tablosuna sorgu yazabilirsiniz; işi elle başlatmak için sp_start_job yordamı vardır.

Adım türleri ve güvenlik bağlamı

Bir adım T-SQL komutu çalıştırabileceği gibi, bir SSIS paketi, işletim sistemi komutu (CmdExec), PowerShell betiği ya da Analysis Services komutu da çalıştırabilir. T-SQL adımları, işin sahibinin güvenlik bağlamında çalışır; belge, bu bağlamı EXECUTE AS ile ayarlamayı önerir. T-SQL dışındaki adımlar ise bir proxy hesabı üzerinden çalışır ve proxy yalnızca ilişkilendirildiği alt sistemlerde kullanılabilir.

Bu tasarımın amacı, her adımın görevini yapmaya yetecek en az yetkiyle çalışmasıdır. Dolayısıyla iş sahibini genel amaçlı güçlü bir hesap yapmak yerine, adımın ihtiyacına göre kısıtlı bir hesap ya da proxy seçin. Proxy gerektiren adımlarda işin yeni bir sahibe devredilmesi, yeni sahibin o proxy'ye erişimi yoksa işin başarısız olmasına yol açar.

T-SQL adımında komutu kısa tutmak da iyidir: karmaşık mantığı bir saklı yordama koyup adımda yalnızca o yordamı çağırmak hem sınamayı kolaylaştırır hem de sürüm denetimini basitleştirir.

Zamanlama ve bildirim seçenekleri

Zamanlama türleri şunlardır: Agent servisi başladığında çalışmak, bilgisayarın işlemcisi sizin boşta saydığınız düzeye indiğinde çalışmak, belirli bir tarih ve saatte bir kez çalışmak ve yinelenen bir takvime göre çalışmak. Yinelenen zamanlamada sıklık, günlük sıklık ve süre ayrı ayrı belirlenir. Aynı zamanlamayı birden çok işe bağlayarak ortak bir bakım penceresi tanımlayabilirsiniz.

Bildirimde işin bittiğinde ne olacağını seçersiniz: operatöre e-posta göndermek, Windows uygulama olay günlüğüne yazmak ya da işi otomatik silmek. Her seçenek için tetikleyici koşul başarı, hata ya da her bitiş olarak ayarlanır. Belgeye göre e-posta ve çağrı cihazı bildirimleri için SQL Server Agent'ın Database Mail kullanacak biçimde yapılandırılmış olması gerekir; çağrı cihazı ve net send seçenekleri ise gelecek sürümlerde kaldırılacağı için yeni kurulumlarda kullanılmamalıdır.

Bir işi tek zamanlama ve tek operatörle başlatın. Sonra gereksinim doğdukça uyarılar (belirli bir olaya otomatik tepki) ekleyin. Bildirimi yalnızca hata durumuna bağlamak, kutunuzu başarılı iş iletileriyle doldurmayı önler; başarıyı ayrıca iş geçmişinden izlersiniz.

Servis, yetki, bildirim: sık görülen sorunlar

  • Servis kapalı: iş tanımlıdır ama hiçbir zaman başlamaz. Önce servisin çalıştığını doğrulayın.
  • sp_add_jobserver atlanmış: betikle kurulan iş sunucuya bağlanmadığı için çalışmaz.
  • Yetki eksikliği: iş sahibinin ya da proxy'nin adımın istediği kaynağa erişimi yoktur. Dışarıdan bir dosyaya erişen adımlar sık takılır.
  • Bildirim yapılandırılmamış: Database Mail kurulu değilse operatör tanımlansa bile e-posta gitmez; hata sessiz geçer.
  • Hata durumunda hiçbir şey yapılmaması: adım için başarısızlık sonrası eylem tanımlanmazsa iş sessizce biter. Hatada işin durması mı, sonraki adıma geçmesi mi gerektiğine bilinçli karar verin.
  • Çakışan zamanlamalar: aynı kaynağı kullanan iki iş aynı anda çalışırsa birbirini bekletir. Bakım işlerini farklı saatlere yayın.
  • Yük devretme beklentisi: belgeye göre failover küme örneğinde yük devri sırasında çalışmakta olan işler diğer düğümde devam etmez; başlamış ama bitmemiş gibi görünür. Kritik işleri yeniden başlatılabilir tasarlayın.

Kurulum sonrası bir sınama yapın: işi elle başlatın, çıktısının beklenen tabloyu doldurduğunu görün, sonra bilerek hata üretip bildirimin geldiğini doğrulayın.

Agent'a hazırlık: Mindset programları

Agent ile iş kurmak, SQL bilgisinin yönetim tarafıdır: işin içinde çalışacak komutu yazabilmeniz ve veritabanı yönetimini anlamanız gerekir. SQL ile Programlama Eğitimi sorguları, veri işleme dilini ve görünümleri oturtur. Veritabanı Yönetim Sistemleri ve Uygulamaları programı ise veritabanı yönetimi ve optimizasyon, güvenlik ve yetkilendirme ve gerçek dünya uygulamaları modülleriyle yönetim bakışını verir.

Bakım ve raporlama görevlerini otomatikleştirmek isteyen veri analistleri, raporlama geliştiricileri ve yeni başlayan veritabanı yöneticileri için iki program birbirini tamamlar. Hangi modülün hangi konuyu kapsadığını program sayfalarından kontrol edin.

İlgili Mindset programı

SQL ile Programlama Eğitimi

Sık sorulanlar

Sık sorulan sorular

SQL Server Agent çalışmıyor, iş neden başlamıyor?

İlk bakılacak yer servistir: belgeye göre SQL Server kurulurken otomatik başlatma özellikle seçilmediyse Agent servisi varsayılan olarak devre dışıdır. SQL Server Configuration Manager'dan servisin çalıştığını ve başlangıç türünü denetleyin. Sonra işin bir sunucuya atandığını, zamanlamanın etkin olduğunu ve iş sahibinin yetkisini doğrulayın.

İşin başarısız olduğunu e-postayla nasıl öğrenirim?

Önce bir operatör tanımlayın, sonra işin Bildirimler sayfasında e-posta seçeneğini işaretleyip operatörü ve koşulu (başarı, hata ya da her bitiş) seçin. Belgeye göre e-posta bildirimleri için Agent'ın Database Mail kullanacak şekilde yapılandırılması gerekir; bu hazır değilse bildirim gitmez.

Aynı zamanlamayı birden çok işte kullanabilir miyim?

Evet. Bir zamanlama birden çok işe bağlanabilir ve bir işe birden çok zamanlama atanabilir. Ortak bir bakım penceresi tanımlamak istediğinizde zamanlamayı bir kez oluşturup işlere bağlamanız yeterlidir. Betikte sp_add_schedule ile zamanlamayı yaratır, sp_attach_schedule ile her işe eklersiniz.

T-SQL dışındaki bir adım neden yetki hatası veriyor?

T-SQL adımları işin sahibinin bağlamında çalışır. CmdExec, PowerShell ya da SSIS gibi diğer adım türleri ise bir proxy hesabı üzerinden çalışır ve proxy yalnızca ilişkilendirildiği alt sistemleri kullanabilir. Sysadmin üyesi bile olsanız proxy o alt sisteme erişim yetkisi almadıysa adım başarısız olur.

Çalışan bir iş yük devrinde ne olur?

Belgeye göre bir failover küme örneğinde yük devri sırasında çalışmakta olan işler diğer düğümde kaldığı yerden devam etmez. Başlamış ama bitmemiş işler günlükte yalnızca başlangıç kaydıyla görünür. Bu yüzden önemli işleri baştan çalıştırıldığında güvenle tekrarlanabilecek, yani yeniden başlatılabilir biçimde tasarlayın.