SQL Server Job Oluşturmak
SQL Server üzerinde belirli aralıklarla bazı işlemler yapmak için job oluşturabilirsiniz. Örneğin hazırladığınız bir script’in yarım saatte bir çalışmasını istediğinizde ya da her gece backup almak için job’lara ihtiyacınız olabilir. Örnekleri çoğaltabiliriz. Bu makalede nasıl job oluşturulacağını anlatacağım.
SSMS üzerinde SQL Server Agent altında Jobs’a sağ tıklayarak aşağıdaki gibi New Job diyoruz.
Karşımıza gelen ekranda Name kısmında job’a bir isim veriyoruz. Owner kısmında ise job’ın sahibini belirliyoruz. Ben genelde sa olarak belirliyorum.
Steps sekmesinde job’ımız da hangi işi yapmak istiyorsak o iş için bir step oluşturacağız. Steps kısmına gelip New diyoruz ve karşımıza aşağıdaki gibi bir ekran geliyor.
Step name kısmında step’e bir isim veriyoruz. Type kısmında Transact-SQL script(T-SQL) ‘i seçtiğimiz için Command kısmında benim Select 1 yazdığım yere çalıştırmak istediğiniz script’i yazıyorsunuz.
Type kısmından aşağıdaki seçenekleri seçerek job ile yapmak istediğiniz değişik işlemleri yapabilirsiniz. Örneğin power shell komutu çalıştırmak, işletim sistemi komutu ya da execute edilebilir bir program çalıştırmak.
Step’i de oluşturduktan sonra step’te belirlediğimiz işlemin hangi aralıklarla çalışacağını belirlemek için Schedule kısmına gelip New diyoruz ve karşımıza aşağıdaki gibi bir ekran geliyor.
Name kısmında Schedule’a bir isim veriyoruz. Schedule type kısmında genelde Recurring seçeriz. Bu seçimi yaparak belirli aralıklarla bu job’ın çalışmasını sağlarız.
Start automatically when SQL Server Agent starts’ı seçerseniz SQL Server Agent açıldığı anda job çalışmaya başlar.
Start whenever the CPUs become idle’ı seçerseniz CPU idle konuma geldiği anda job çalışmaya başlar.
One time’ı seçerseniz job sadece bir kere çalışır.
Biz Recurring’i seçiyoruz ve aşağıdaki gibi Occurs’dan Daily’i seçiyoruz.(Job’ı her gün çalıştırmak için. Weekly seçerek haftanın belirli günleri ve saatlerinde çalışacak şekilde, Monthly seçerek ayın belirli gün ve saatlerinde çalışacak şekilde ayarlayabiliriz.)
Recurs every kısmında 1 Days’i seçerek her gün çalışacak şekilde ayarlıyoruz.
Occurs once at kısmında bir saat seçersek her gün şu saatte çalış diyebiliriz.
Biz Occurs every kısmından 2 hours’u seçerek her gün 2 saatte bir çalışacak şekilde ayarlıyoruz ve ok’e basarak job’ımızı oluşturmuş oluyoruz.
Peki job oluşturunca site yayın dışı kaldığında, hangfire gibi saydığı süreyi sıfırlıyor mu ? Örneğin hangfire, site ilk yayına girdiğinde bir kere çalışır. Sonra saatte 1 kereye ayarlamışsak, saatte bir kere çalışır. Diyelim ki 1 saat dolmadan site yayından düştü ve tekrar bağlandı. Bu durumda bağlandığı anda tekrar çalışır ve sıfırdan yine 1 saat sayar. Böyle olunca da 1 saat içinde 2 kere çalışıyor. Daha fazla kesilince de 1 saat içinde kaç kere kesilip bağlanmışsa o kadar çalışıyor. Job da aynı şekilde mi çalışıyor ?
Merhaba, bunu öncelikle bir site gibi düşünmeyin. o mantıkta çalışmıyor. Job’ı ilk oluşturduğunuz andan itibaren 1 saatte bir çalışıyor. Hiç bir zaman server restart olsa bile 1 saat içinde restart olması nedeniyle 2 kere çalışmaz. Server kapalı kalırsa çalışmadığı süreler boyunca o sayıda jobı çalıştırayım da demez. Açıldıktan sonra tekrar saatte bir çalışmaya devam eder belirli dakikalarda.
Hocam merhaba, always on yapısında sunucularda görevi sadece primary de çalışmasını istersek aşağıdaki kodu yazmamız yeterlimi?if is_local=1 and is_primary_replica=1 BEGIN–ZAMANI GELDİĞİNDE ÇALIŞTIRILACAK QUERYEND(NOT:step maddelerinde resimlerin çoğu çıkmıyor)