MSSQL Server Job Oluşturma

Bu makalede MSSQL Server Job Oluşturma konusunu ele almış olacağız. Job ile ilgili tüm detaylı bilgileri paylaşmış olacağız. Sql Server  Agent sekmesi altında bulunan Job belirli aralıklarla tekrarlanmasını istediğimiz bazı işlemlerin yapılmasını sağlayan bir yapı olarak karşımıza çıkmaktadır.

SSMS üzerinde  Sql Server  Agent sekmesi altında Job’a sağ tıklayarak New Job diyiyoruz.

Gelen ekranda Job’ın genel bilgilerini girdiğiniz bölüm olan Genaral sekmesinde bazı kavramlar göze çarpmaktadır.

Şimdi bu kavramların ne olduğunu açıklayalım.

Name kısmında Job’ımıza bir isim veriyoruz. Owner kısmında Job’ımızın sahibini belirtiyoruz. Yetkili bir kullanıcının seçilmesi gerekmektedir. Category kısmı  job’ın hangi işin kategorisi olduğunu belirlediğimiz alan. Listede çeşitli kategoriler yer alıyor. Bu kategoriler tamamen bilgilendirme amacı içindir. 

Data Collector, Log Shipping, REPL (Replication) kategorileri: SQL Server işlevselliğine dayalı farklı görevler ve kategorilerdir.  Genelde Database Maintenance ve Uncategorized (Local)  kategorileri ile karşılaşırız. Job’ımız, henüz bir kategoriye atanmadığı için “Uncategorized (Local)” olarak bırakılabilir. Eğer bu iş veri toplama, dağıtım (replication) ya da bakım görevleri gibi belirli bir kategoriye aitse, ilgili kategoriyi seçerek işlemi yapılandırabilirsiniz.

Description kısmı Job ile ilgili gerekli açıklamaları yaptığımız kısımdır.

General sekmesindeki açıklamalardan sonra ikinci kısmımız olan Steps bölümüne geçiyoruz.

Steps sekmesinde Job’ımız hangi görevi yapmak istiyorsa o görevle ilgili bir adım tanımlanır. Bunun için Steps sekmesinde bulunan New butonuna tıklıyoruz.

Gelen ekranda ilgili kısımları açıklayalım.

Step Name: İş adımına bir isim vermeniz gereken alan. Örneğin, bu adımda ne yapacağınızı belirten bir isim koyabilirsiniz.

Type: Bu, adımın ne tür bir görev gerçekleştireceğini belirleyen seçenektir. Liste şu seçenekleri içerir:

Transact-SQL script (T-SQL): SQL Server üzerinde T-SQL komutları çalıştırmak için kullanılır.

Operating System (CmdExec): Windows komut satırı komutları çalıştırmak için kullanılır.(sqlcmd gibi)

PowerShell: PowerShell betikleri çalıştırmak için kullanılır.

SQL Server Analysis Services Command: Analysis Services üzerinde bir komut çalıştırmak için.

SQL Server Analysis Services Query: Analysis Services üzerinde bir sorgu çalıştırmak için.

SQL Server Integration Services Package: Integration Services (SSIS) paketini çalıştırmak için kullanılır.

Database: Hangi veritabanı üzerinde çalışmak istiyorsak o seçilir.

Command: Seçilen türdeki komutun girileceği alan. Örneğin, T-SQL seçildiğinde burada SQL komutlarını yazarsınız; PowerShell seçildiğinde ise PowerShell betikleri yazılır. Komut çalıştıracağım için type kısmını T-SQL olarak belirliyorum.

Yapacağımız örnekte STEP_1’de A veritabanında bir tablo oluşturma steps’i yapmış olacağız. Devamında bir tane daha steps oluşturup tablonun içerisine veri insert etmiş olacağız.

Aşağıdaki resimde STEP_1 de tablo oluşturma adımını görmekteyiz. Command kısmında ifadenin doğru olup olmadığını sol tarafta bulunan Parse kısmından anlarız. Herhangi bir sıkıntı yoksa The command was successfully parsed mesajını almış olacağız. Bu sadece yazım hatalarına bakmaktadır. Kodun doğru olup olmadığına bakmaz.

Yukarıdaki adımları yaptıktan sonra Advanced sekmesine gelinir. Bu kısım daha detaylı Step tanımlamalarımızı yapabiliriz.

Yukarıdaki bölümlerin  ne işe yaradığına bakalım.

1. On success action: Job adımının başarıyla tamamlanması durumunda ne yapılacağını seçmenizi sağlar. Seçenekler şunlardır:

Go to the next step: Bir sonraki adıma geçer.

Quit the job reporting success: Jobı başarıyla tamamlanmış olarak durdurur.

Quit the job reporting failure: Jobı başarısız olarak durdurur.

Not: Bu adımda bazı joblarımızda başarılı çalışmasına rağmen hata mesajı dönüyor sebebi ise go to next step dememiz ve sonraki on failure action kısmında işlem başarısız olduğuna dair mesajı almaktayız. Dikkat edilmesi gereken yerlerden biridir.

İki adımlı bir step oluşturacağımız için Go to the next step  diyiyoruz.

2. Retry attempts: Job adımı başarısız olursa, kaç kez yeniden denenmesi gerektiğini belirler. Bu örnekte, yeniden deneme sayısı “1” olarak ayarlanmış. Retry interval kısmında ise yeniden denemek için beklenilen süreyi göstermektedir. Bu örnekte, bekleme süresi “1” dakika olarak ayarlanmış

3. On failure action: Job adımının başarısız olması durumunda ne yapılacağını belirler. Seçenekler:

Quit the job reporting failure: Jobı başarısız olarak sonlandırır.

Go to the next step: Bir sonraki adıma geçer.

Quit the job reporting success: Jobı başarıyla tamamlanırsa durdurur.

4. T-SQL script: Bu Job adımında çalıştırılacak komut veya betik türü (örneğin, Transact-SQL komutu) bu alanda belirtilir.

5. Output file: İş adımının çıktısının kaydedileceği dosyayı belirtir. İsterseniz çıktıyı bir dosyaya yazdırabilirsiniz.

6. Log to table: Çıktıyı SQL Server’da bir tabloya kaydetme seçeneği sunar. Bu seçenek, adımın sonuçlarını veritabanına loglamanızı sağlar.

7. Include step output in history: Job adımının çıktısını, Job geçmişine dahil eder.

8. Run as user: Job adımının hangi kullanıcı hesabı altında çalıştırılacağını belirtir. Özel bir hesapla çalıştırmanız gerekiyorsa bu alana kullanıcı adı yazılır. Çünkü job’ımız farklı bir kullanıcı ile oluşturulmuş olabilir.

Yukarıdaki Step ile ilgili tüm bilgilendirmeleri verdikten sonra OK butonuna basıp 1. Step’imi oluşturmuş oluyorum.

Aşağıdaki resimde ikinci step’imi oluşturmak için New seçeneğine tıklıyorum. Edit bölümünde ilgili step’i seçerek düzenlemeler yapılabilir.

Yukarıda ilk step’i oluşturma adımlarının aynısını STEP_2 içinde yapıyorum. Tekrardan göstermenin bir anlamı yok. STEP_3 adında bir step daha oluşturmuş oldum. Bu adımlardan ilk iki job başarılı 3. Steps de hata vermiş olacak.

Schedules sekmesine geçmeden önce yukarıda bazı ifadeleri belirteyim. Start Step kısmından Job’ımızı istediğimiz stepten başlatabiliriz. Move step kısmında ise yukarıda step adımlarında step’imizi seçtikten sonra yukarı veya aşağıya taşıma işlemini yapabiliriz.

Bu bilgilerden sonra Schedules kısmına geçelim.  Yukarıda oluşturduğumuz Step’in hangi aralıklarda veya hangi zamanda çalışacağını belirtiyoruz. Schedules kısmına giriş yaptıktan sonra New seçeneğine tıklayarak yeni bir Schedules oluşturalım.

Gelen ekrandaki kavramların ne olduğunu açıklayalım.

Name kısmında Schedule’ımıza bir isim veriyoruz. Schedule type kısmında nasıl çalışması gerektiğini belirtiyoruz.

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.

Recurring ifadesi ise aşağıdaki belirlediğimiz zaman dilimine göre tekrarlanacağını göstermektedir.

Bu makalemizde Recurring ifadesini seçip  zaman ayarlamasını yapmamız gerekmektedir.

Schedule type kısmında Recurring’ı seçtikten sonra aşağıda bulunan kısımda zaman ayarlamasını yapıyoruz.

Occurs kısmından Daily, Weekly ya da Monthly seçeneklerinden birini seçebilirsiniz. Günlük olarak bu Job’ın çalışmasını istiyorsanız Daily seçeneğini, Haftalık olarak bu Job’ın çalışmasını istiyorsanız Weekly seçeneğini, Aylık olarak bu Job’ın çalışmasını istiyorsanız Monthly seçeneğini seçmelisiniz.

Frequency kısmında Haftada bir Cumartesi günü çalışacak şekilde ayarladık.

Daily Frequency kısmında Occurs every seçeneğini seçip 6 hours diyiyoruz. Cumartesi günü her  6 saat’te bir Job’ın çalıştıracak şekilde set etmiş oluyoruz.

Occurs one at demiş olsaydık sadece belirlemiş olduğumuz zaman diliminde Cumartesi günü çalışmış olacaktı.

Starting at ve Ending at kısmında belirlediğimiz gün içerisinde hangi zaman diliminden itibaren çalışacağını belirleyebiliriz.

Duration kısmında ise Job’ımızın başlangıç tarihini ve bitiş tarihini belirtebiliriz. No end date ifadesi job’ımızın sonsuza kadar çalışacağını göstermektedir.

Bu kısımdaki zamanlamayı yaptıktan sonra OK deyip işlemi tamamlıyorum.

Gelen ekranda Alert’imiz varsa Job’ımız sonucunda Alert üretebiliriz. Notification kısmında Başarılı veya başarısız sonucumuzu mail gönderebiliriz. Targets kısmında ise sunucu bazlı bazı işlemler yapabiliriz.

Aşağıdaki resimde Job’ımızın  hemen çalışmasını istiyorsak Enable kısmının işaretlenmesi gerekmektedir. Bu checkboxs’ı kapatarak Job’ı Disable moduna getiririz. Ayrıca Created kısmında Job’ın oluşturma tarihi, Last modified ise Job’ın en son düzenlenmiş hali görülmektedir.

OK deyip Job’ımızı oluşturduktan sonra Sql Server Agent altında Job sekmesinde ilgili Job’ımız üzerine sağ tıklayınca ne gibi bölümler var bunu görmüş olalım.

Yeni bir Job oluşturmak istediğimizde New Job diyiyoruz. Start Job at Stsp Job’ımızı manuel başlatmak için, Stop Job Job’ımızı manuel durdurmak için, View History Job’ımızın geçmiş görüntüsü, Script Job as Job’ımızı başka bir ortama taşımak istediğimizde create script’ini alıp yeni sunucu üzerinde çalıştırma veya session üzerinde diğer sunucuya connect olarak oluştura biliriz. Rename ile Job’ımızın ismini değiştirebiliriz. Properties ekranında Job’ımızla ilgili düzenleme yapabiliriz.

Job Script Alma;

Job’ın script’ini aldıktan sonra başka bir sunucuda çalıştıracağımız zaman bazı kavramlar değişebilir. ilgili Job scriptinde Ctrl+H yaparak değiştirilmesini istediğimiz tüm bölümleri değiştire biliriz.

Aşağıdaki resimde abc ifadesini A karakterine çevirir. Sağ tarafta çerçeve içerisine alınmış ifadeyle tek değişim veya hepsini değiştire bilirsiniz.

Not: Joblarda sonradan yapılan değişiklik diğer sunuculara yansımaz.

Makaleyi bitirmeden önce şunu da belirtmek gerekir ki. View History kısmında aşağıdaki gibi Ünlem (!) işaretleriyle karşılaşırsak bu şu anlama gelmektedir. İlgili step’in yapacağı işin  önceden mevcut olduğunu ve oluşturulduğunu söylüyor. İlgili step’i yapamaz ama job başarılı gibi devam etmektedir. Aşağıdaki resimde de görüldüğü gibi 1. adımda hata mesajı aldıktan sonra 2. ve 3. step’lerin başarılı olduğunu aşağıdaki resimde görmüş oluyoruz. Aslında job başarılıdır.

Not: Primary sunucusu üzerinde oluşturulan job secondary sunucusunda script ile oluşturulduğunda schedules id değeri aynı olmasında bir sakınca yoktur. Primary schedules üzerinde yapılan bir değişiklik secondary sunucusuna yansımaz. Birbirlerinden bağımsız hareket etmektedir.

Not: Aynı sunucu üzerinde job scripti alınıp jobın ismi farklı olacak şekilde tanımlandığında iki jobın schedules id değeri aynı olmaktadır. Aşağıdaki resimde görülmektedir. Aşağıdaki resimde görülen iki jobdan birinin schedules yapısında bir değişiklik olduğunda diğer jobın schedules değeride değişmektedir. İkinci resimde görülmektedir. Bu joblar aynı instance altındadır.

Not: Schedule_Name isimleri aynı olunca jobların schedules değişiklikleri birbirlerine yansıyacak diye bir kural yok. İşin aslı schedule id kısımlarında bu değerler aynı olduğunda sıkıntı yaşanmaktadır.

Bu makalede Baştan sona bir Job nasıl oluşturulur ne gibi konfigürasyonlar yapılır konusunu ele almış olduk. Bir sonraki makalemizde ise tanımlamış olduğumuz bu job’ın başarılı veya başarısız olma durumunu mail ile kişilere bildirmiş olacağız.

“Asr’a yemin olsun ki,İnsan mutlaka ziyandadır.” Asr-1-2

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir