Bu makalede sql server üzerinde Maintenance konusunu genel hatlarıyla ele almış olacağız. Maintenance Plan sql server üzerinde bakım ve performans işlemlerimizi gerçekleştirdiğimiz bir yapı olarak karşımıza çıkmaktadır. Günümüzde tercih edilmesede bazı durumlarda tercih edilmektedir.
SSMS üzerinde Management sekmesi altında görebileceğimiz bir yapı olarak karşımıza çıkmaktadır.
Maintenance Plan oluştururken iki seçenek karşımıza çıkar. Maintenance Plans kısmına sağ tıkladığımızda New Maintenance Plan.. ve Maintenance Plan Wizard kısmı karşımıza çıkmaktadır.

Maintenance Plan’ın çalışması için Sql Agent servisinin çalışması gerekmektedir. Çünkü her ne kadar Management sekmesi altında yapmış olsak da arka planda oluşturmuş olduğumuz Maintenance plan için bir job oluşturuyor.
İkinci seçenek olan Maintenance Plan Wizard ile bir Maintenance Plans oluşturalım. Gelen ekranda aşağıdaki gibi Do not show this starting page again’i seçerek next diyoruz.
Not: Herhangi bir görev oluşturmadan(backup,istatistik vs..) yapılan tüm işlemler aynıdır.

Gelen ekranda Name kısmından Maintenance Plan’a bir isim veriyoruz. Sadece bir tane görev oluşturacağımız için Single schedule for the entire plan or no schedule seçeneğini seçiyoruz. Separate schedules for each task seçeneği ile birden fazla görev seçip sırasıyla scheduled ve ayarlamalar yapabiliriz.

Scheduled kısmında Change.. butonuna basarak bir zamanlayıcı oluşturulur.

Gelen ekranda ihtiyaçlarınıza göre zamanlama belirtilir. Haftada 1 gün sadece Pazar gecesi 23.23.23 zaman diliminde çalışması için bir zamanlayıcı belirtiyoruz. Scheduled type Recurring ve Scheduled’ın aktif olması için checkboxs’ın Enable yapılması gerekmektedir. Daily frequency kısmında Occurs every kısmını seçmiş olsaydık haftada belirtilmiş gün içerisinde kaç defa çalışması gerektiğini ve zaman aralığını belirtebilirdik.

Bu ayarlama yaptıktan sonra Ok denilip ekrandan çıkılır. Gelen ekranda Next denilip bir sonraki aşamaya geçilir.

Gelen ekranda sql server için hangi bakım onarım işlemini yapmak istiyorsak o seçilir. Bu görevler, SQL Server veritabanlarının performansını, bütünlüğünü ve düzenliliğini sağlamak için düzenli olarak yapılması gereken işlemleri içeriyor. Aşağıdaki resme kadar tüm işlemler maintenance plans için ortak olan işlemler olarak karşımıza çıkmaktadır.

Bu kavramların ne işe yaradığına değinelim. Aşağıdaki konu başlıklarının hepsi ayrı ayrı bir makaleninin konusu ama Maintenance Plan oluşturulurken aşağıdaki belirtilen arayüzlerin farklı olduğu diğer kısımların default olarak aynı olduğunu söyleyebilirim.
Check Database Integrity: Veritabanındaki mantıksal ve fiziksel bütünlük problemlerini kontrol eder. Bu işlem, veritabanındaki hataları tespit etmek için kullanılan `DBCC CHECKDB` komutunu çalıştırır.

All databases seçeneğini seçersek bütün veritabanları için dbcc checkdb işlemlerini gerçekleştirecektir.
System databases seçeneğini seçersek sistem veritabanları için dbcc checkdb işlemlerini gerçekleştirecektir.
All user databases seçeneğini seçersek bütün kullanıcı veritabanları için dbcc checkdb işlemlerini gerçekleştirecektir.
These databases seçeneği seçeneğini seçerek spesifik veritabanı seçimi yapabiliriz. Örneğin biz bu örneğimizde aşağıdaki gibi sadece Test veritabanı için dbcc checkdb işlemlerini yapacağız.
Ignore databases where the state is not online seçeneğini seçerseniz dbcc checkdb işlemi sırasında veritabanı erişilemez durumda ise o veritabanını atlar ve işleme devam eder.
Yukarıdaki tüm açıklamalar tüm maintenance plan ekranlarında ortaktır.

Shrink Database: Veritabanındaki boş alanı geri kazanmak için veri dosyalarını küçültür. Ancak bu işlem, indekslerde bozulmalarına neden olabilir, bu yüzden dikkatli kullanılması önerilir.

Reorganize Index: İndeks fregmantasyonu azaltarak veritabanı performansını artırır. Mevcut indekslerin yapısını bozmadan düzenler.

Rebuild Index: Bozulmuş indeksleri tamamen yeniden oluşturur. Bu işlem, performansı artırırken daha fazla sistem kaynağı kullanabilir.
Veritabanını seçtikten sonra aşağıdaki ekranda gördüğünüz gibi spesifik bir tabloyu ya da view’i seçebilirsiniz. Object kısmından Table, View ya da Tables and Views seçeneklerinden birini seçmelisiniz.

Update Statistics: Veritabanı istatistiklerini günceller. İstatistikler, sorgu performansını artırmak için SQL Server tarafından kullanılır. Hangi veritabanını, nesneyi veya objenin istatistiklerini güncellemek istiyorsak ilgili seçenekler seçilmektedir.

Clean Up History: SQL Server Agent görev geçmişini ve maintenance task’ların geçmişini temizler. Bu, sunucu üzerindeki fazla log verilerini temizlemek için kullanılır. Bu yapı ile kısacası Backup, Restore, Job ya da Maintenance Plan Geçmişini silebiliriz.
Aşağıda bulunan Remove historical data older than kısmında hangi tarihten önceki seçilmiş olan checkboxs kayıtlarını silmek istiyorsak onu seçiyoruz.

Execute SQL Server Agent Job: SQL Server Agent tarafından yönetilen görevlerin çalıştırılmasını sağlar.


Back Up Database (Full): Veritabanının tam yedeğini alır. Bu işlem, veritabanının tüm içeriğini yedekler.
Back Up Database (Differential): Full yedekten sonra yapılan değişikliklerin yedeğini alır. Bu, daha hızlı ve küçük yedeklemeler sağlar.
Back Up Database (Transaction Log): Veritabanının yapılan her işlemini yedekler. Bu yedek, felaket anında veritabanını son anına kadar geri yüklemek için kullanılır.
Maintenance Cleanup Task: Eski yedek dosyaları veya bakım görevleri sonucunda oluşan artık dosyaları temizler. Bu görevlerden biri veya birkaçı seçilerek, veritabanı için düzenli bakım planları oluşturulabilir.
Yukarıdaki seçimlerin herhangi birini yapabilirsiniz. Ben sadece uygulamalı bir şekilde full backup işlemini göstermek istediğim için ilgili checkbox’ı işaretliyorum. Next deyip bir sonraki aşamaya geçiyorum. Farklı olan kısım sadece hangi görevi yapmak istiyorsak ilgili görevi yapabiliriz.

Gelen ekranda bir değişiklik yapmadan Next deyip bir sonraki aşamaya geçiyorum. Aşağıdaki ekranda General bölümünde database kısmında herhangi bir veritabanını seçebiliriz.
Databases kısmından Select one or more seçeneğine tıkladığımızda hemen altında gözüken pencere açılıyor.
All databases seçeneğini seçersek bütün veritabanlarının full backup işlemlerini gerçekleştirecektir.
System databases seçeneğini seçersek sistem veritabanlarının full backup işlemlerini gerçekleştirecektir.
All user databases seçeneğini seçersek bütün kullanıcı veritabanlarının full backup işlemlerini gerçekleştirecektir.
These databases seçeneği seçeneğini seçerek spesifik veritabanı seçimi yapabiliriz. Örneğin biz bu örneğimizde aşağıdaki gibi sadece AdventureWork2012 veritabanı için full backup işlemlerini yapacağız.
Ignore databases where the state is not online seçeneğini seçerseniz full backup işlemi sırasında veritabanı erişilemez durumda ise o veritabanını atlar ve işleme devam eder. Bu seçenek All databases seçeneği ve tüm databaseler için geçerlidir.


Destination kısmında ise klasörlerin nasıl oluşturulduğunu belirleyebiliriz. Seçmiş olduğumuz yol haritasına göre bu adımlar değişmektedir.

Options kısmında ise daha spesifik yetkiler verilebilir. Normal SSMS arayüzünde almış olduğumuz backup işlemi için gelen ekran önümüze gelmektedir. Backup makalelerinde aşağıdaki kısımların ne işe yaradığını görebiliriz.

Aşağıdaki tüm kısımlar tüm Maintenance Plans’lar için ortak olan işlemler.
Bir sonraki ekranda aşağıdaki gibi Write a report to a text file seçeneğini seçerseniz Folder location seçeneğinde belirlediğiniz klasörde yapılan işlemlerle ilgili log kayıtlarını tutacaktır.
E-mail report seçeneğini seçerek yapılan işlemlerle ilgili raporları To: kısmında belirlediğiniz mail adresine gönderecektir.



Başarılı bir şekilde işlemlerimizin gerçekleştiğini görmüş olduk. Bu işlemleri Log ve Diff backup içinde yapabiliriz.
Maintenance Plans sekmesi altında bir plan oluştuğunu ve sql agent altında ise bu plan’a bağlı bir job oluşmaktadır.

Execute işlemini ilgili job üzerinden de yapabiliriz.



Oluşmuş olan job’ın içeriğine baktığımızda plan oluştururken oluşturmuş olduğumuz Schedule ve step’in geldiğini görmüş oluyoruz.


Belirlemiş olduğumuz şekilde alt dizin oluşturarak Backup işlemini gerçekleştirmiş olduk.

İlgili maintenance plan sildiğimizde oluşmuş olan job’ımızda kaybolur.


Manuel bir şekilde bu işlemi gerçekleştirmek için Maintenance Plans üzerine sağ tıklayıp New Maintenance Plans diyiyoruz. Bu şekilde Wizard ekranından bağımsız bir şekilde manuel oluşturabiliriz.

Name kısmından bir isim belirliyoruz.
OK dedikten sonra karşımıza bir boş ekran gelmektedir.

Toolbox bölümünün yanında bulunan ekran aşağıda görülmektedir.

Schedule bölümünden bir zamanlayıcı belirtilir.

Schedule bölümüne tıklanıp bir zamanlayıcı belirlenmektedir.

Zamanlama işlemini yaptıktan sonra OK dedikten sonra gelen ekranda yapmak istediğimiz işlemi çek bırak yöntemi ile gerçekleştiriyoruz. Toolbox bölümünde görevlerin ne olduğunu makalenin başında açıklamıştık.

Backup Up Database Task kutucuğuna çift tıklayıp konfigürasyonumu yapıyorum. Gelen ekran Maintenance Plan Wizard ekranının aynısı.

Yukarıdaki ilgili database’i seçtikten sonra Destination kısmında Backup’ı nereye almam gerektiğini ve uzantısının ne olması gerektiği işlemlerini belirtiyorum.

Options kısmında ise backup alırken nasıl konfigürasyon yaptığımızda aynı işlemleri yapıyoruz. İfadelerin ne olduğuyla ilgili backup makalelerinden öğrenebilirsiniz.

View T–SQL butonuna tıklayarak yapılan işlemlerin script’ini alıyoruz. İlgili komutu çalıştırıyoruz.

Senkronizasyon olduktan sonra Task’ımız yeşil renge dönmüş oldu.

İlgili query’i kapatıp kaydediyoruz. Aşağıdaki resimde çarpı işareti olan yere tıklıyoruz.

Sql Server Agent altında ilgili job’ımızı görmekteyiz.

Maintenance plan’ı execute veya ilgili job’ı start ettiğimizde backup’ımız başarılı bir şekilde alınmış oldu.


Backup aldıktan sonra belirlenen süredeki backupların silinmesini istersek Toolbox bölümünde ilgili chexcboxs çekilip bırakılır. Backup’dan sonra çalışsın diye yeşil ok çekilir.

History Cleanup Task ifadesine çift tıklanır konfigürasyon yapılır. İlgili bölümlerden hangi ayarların yapılmasını istiyorsak seçilmektedir.

Backup komutumuz çalıştıktan sonra temizle job’ımızda çalışmış olacak.

Bu işlemleri makalenin başında vermiş olduğum her başlık ne iş yapıyor kısmından bakıp uygulamalı bir şekilde deniyebilirsiniz.
Bu makalede Maintenance Plans konusunun ana başlıklarına değinmeye çalıştık.
Başka bir makalede görüşmek dileğiyle.
“(Ey Muhammed!) Senin göğsünü açıp genişletmedik mi? Belini büken yükünü üzerinden kaldırmadık mı? Senin şânını ve ününü yüceltmedik mi? Şüphesiz güçlükle beraber bir kolaylık vardır. Gerçekten, güçlükle beraber bir kolaylık vardır. Öyleyse, bir işi bitirince diğerine koyul. Ancak Rabbine yönel ve yalvar.” İnşirah