Policy-Based Management SQL Server 2008 ile gelen bir özelliktir. Bu özellik hem Enterprise hem de Standard SQL Server Sürümlerinde kullanılabilir. Policy Based Management (PBM), SQL Server tarafından sunulan bir yönetim çerçevesidir. Sunucu veya veritabanı yapılandırmalarını kontrol etmek için kullanılır. Bu özellik, belirli politikalar belirleyerek SQL Server ortamını izlemeyi ve yönetmeyi sağlar. PBM ile veritabanı yöneticileri, sistemdeki çeşitli bileşenlerin belirli kurallar ve koşullara uygun olup olmadığını doğrulayabilir ve gerekli durumlarda bu kuralların ihlalini önlemek için tedbirler alabilirler.
Policy Based Management Instance altında bulunan Management sekmesi altında bulunmaktadır.

Policy Based Management altında bulunan kavramların ne olduğuna değinelim.
Facet: SQL Server’ın farklı yapı taşlarını temsil eder ve her bir facet, belirli bir sunucu veya veritabanı özelliğini yönetmek için kullanılır. SQL Server’da 74’ten fazla model vardır ve her modelin bir veya daha fazla özelliği vardır. Aşağıdaki resimde listelenen facet’ler, SQL Server’da yönetilebilecek alanları göstermektedir.
Bu facet’ler, sistemdeki yapılandırmaları izlemek, belirli politikalar tanımlamak ve sunucuyu bu politikalara göre yönetmek amacıyla kullanılır. İlgili Facet üzerine çift tıklayarak ne gibi özellikleri olduğunu gözlemleyebiliriz.

Genellikle kullanılan facet kavramların ne olduğuna değinelim.
1. Application Role: Uygulama rollerini yönetmek ve güvenlik yapılandırmalarını kontrol etmek için kullanılır.
2. Asymmetric Key: Asimetrik anahtarları yönetmek için kullanılır. Bu anahtarlar, şifreleme ve dijital imza gibi güvenlik operasyonları için kullanılır.
3. Audit : Sunucudaki denetim günlüklerinin ayarlanması ve izlenmesi için kullanılır. SQL Server Audit, güvenlik açısından önemli olayları izler.
4. Availability Database : AlwaysOn kullanılabilirlik gruplarındaki veritabanları için yönetim işlemlerini yapmanızı sağlar.
5. Availability Group : AlwaysOn gruplarını yönetmek ve yapılandırmak için kullanılır.
6. Availability Group State : AlwaysOn gruplarının durumu hakkında bilgi verir.
7. Availability Replica : Availability Group replikalarını yönetmek için kullanılır. Bu replikalar, bir veya daha fazla veri merkezi arasında veri yedekliği sağlamak için kullanılır.
8. Backup Device : Yedekleme cihazlarını yönetir. Yedekleme işlemleri için kullanılan fiziksel veya mantıksal cihazlardır.
9. Data File : Veritabanı dosyalarının yönetimi için kullanılır. Veritabanının fiziksel veri dosyaları burada kontrol edilir.
10. Database : SQL Server’daki veritabanlarını genel olarak yönetir. Veritabanı ayarları ve yapılandırmaları bu facet altında yapılır.
11 Database Audit Specification : Veritabanı denetim spesifikasyonlarını yönetir. Hangi olayların denetleneceğini belirler.
12. Database Maintenance : Veritabanı bakım işlemleri için kullanılır. Bakım planları, yedekleme ve indeks yeniden oluşturma gibi görevleri içerir.
13. Database Options : Veritabanının seçeneklerini ve ayarlarını yönetir. Örneğin, otomatik büyüme ve kurtarma modeli gibi seçenekler.
14. Database Performance : Veritabanının performansıyla ilgili ayarları ve yapılandırmaları kontrol eder.
15. Database Replica State : AlwaysOn replikalarının durumlarını ve sağlık bilgilerini yönetir ve görüntüler.
16. Database Role : SQL Server veritabanı içindeki rollerin yönetimi için kullanılır. Rollerin güvenlik ve yetkilendirme ayarları bu facet’ten yapılır.
17. Database Security : Veritabanı güvenliğiyle ilgili ayarları kontrol eder. Kullanıcı izinleri ve güvenlik denetimleri burada yapılır.
18. Default : Varsayılan ayarları ve değerleri temsil eden facet’tir.
19. Endpoint : SQL Server’daki bağlantı uç noktalarını yönetir. Endpoints, veritabanı ile istemciler veya diğer sunucular arasındaki iletişimi yönetir.
20. Filegroup : Veritabanı dosyalarının gruplar halinde yönetimi için kullanılır. Büyük veritabanlarında performans ve yönetim açısından dosyalar gruplandırılabilir.
21. Index : Veritabanı indekslerini yönetir. İndeksler, veritabanı sorgularının performansını iyileştirmek için kullanılır.
22. Linked Server : Bağlantılı sunucuları yönetir. SQL Server’dan diğer veritabanı sunucularına bağlanmayı sağlar.
23. Log File : Veritabanı log dosyalarının yönetimi için kullanılır. Transaction log dosyalarının büyüklüğünü ve performansını kontrol eder.
24. Login : Sunucu düzeyinde giriş bilgilerini yönetir. Bu facet ile kullanıcılar SQL Server’a giriş yapabilir.
25. Login Options : SQL Server’a giriş yapan kullanıcılar için seçenekleri yönetir. Kullanıcıların oturum açma ayarları buradan kontrol edilebilir.
26. Partition Function : Veritabanı bölümleri için kullanılan bölme fonksiyonlarını yönetir. Bu fonksiyonlar, verilerin nasıl bölümleneceğini belirler.
27. Partition Scheme : Veritabanı bölümleri için şemaları yönetir. Bölümlenmiş tabloların ve indekslerin fiziksel depolanmasını tanımlar.
28. Plan Guide : SQL Server’ın sorgu yürütme planlarını yönetmek için kullanılır. Sorguların performansını optimize etmek amacıyla kullanılır.
29. Server : SQL Server’ın genel sunucu ayarlarını ve yapılandırmalarını yönetir.
30. Server Audit : Sunucu düzeyindeki denetimleri yönetir. SQL Server denetim kayıtlarını oluşturmak ve izlemek için kullanılır.
31. Server Audit Specification : Sunucu denetimi için spesifikasyonları yönetir. Hangi sunucu olaylarının denetleneceğini belirler.
32. Server Configuration : SQL Server sunucusunun genel yapılandırma ayarlarını yönetir.
33. Server Performance : SQL Server sunucu performansını izlemek ve yönetmek için kullanılır.
34. Server Role : Sunucu düzeyindeki güvenlik rollerini yönetir. Sunucudaki kullanıcıların yetkilendirme seviyeleri bu facet üzerinden düzenlenir.
35. Server Settings: SQL Server’ın genel ayarlarını ve seçeneklerini yönetir. Sunucu yapılandırmalarının genel kontrolü buradan sağlanır.
32. Statistic: İstatistikleri yönetir. SQL Server’daki sorgu performansını iyileştirmek için veritabanı istatistiklerini kullanır.
37. Table: Veritabanındaki tabloları yönetir. Tablolar, verilerin saklandığı temel yapılar olarak işlev görür.
Condition:
Yukarıda tanımlanan Facet’ların alt koşullarının sağlanıp sağlanmadığını kontrol etmektedir. Yapacağımız örneklerde ilgili Facet’ı seçtikten sonra Condition bölümü karşımıza çıkmaktadır.
İlgili Facet seçildikten sonra Facet özelliğiyle uyumlu koşullar önümüze gelmektedir.
Yukarıdaki açıklamalardan sonra örnekler üzerinde işlemlerimizi anlamaya çalışalım. Aşağıdaki örnekte sadece Database Facet belirleyip bir örnek üzerinden diğer koşulları da belirtmiş olacağız.
Bulunmuş olduğunuz ortamda veritabanların Compatibility level’lerin ne olduğunu sorabilirler. Bunun için T-SQL script’leri mevcuttur veya veritabanı properties ekranında görebiliriz. Manuel bir şekilde uğraşmaktansa Policy Management tanımlamak herhangi bir level değişikliğinde bize uyarı vermesini sağlayacak bir yapı kurmaya çalışacağız. Aşağıdaki yapacağımız örneği database altında çoğaltabiliriz.
İşlemlerimize başlayalım. İnstance altında bulunan Management > Policy Management > Policies sekmelerinden New Policy diyoruz.

Gelen ekranda oluşturacağımız Policy’e bir isim vermek gerekiyor. Daha sonra Check Condition kısmında bir Condition oluşturmamız gerekiyor. İlgili bölümde New Condition’a tıklıyoruz.

Gelen ekranda Condition’a bir isim vermek gerekiyor. Facet kısmında veritabanı altında Compatibility level kontrol yapacağımız için Database Facet seçiyorum. Alternatif olarak başka bir seçeceğimiz Facet ise Database Options.

Expression kısmında bulunan …’ya tıklayarak Database Facet’ın içerisinde bulunan Field’ları seçebiliriz. Field ekranında dikkat edersek Database altında tüm kontrol işlemlerimizi yapabiliriz. Bunlar Recovery model, compatibility level, Size, Trustworthy, parameterSniffing, AutoClose, AutoShrink,Collation, Name, Maxdop.. vb işlemlerin konfigürasyonunu yapabiliriz.

Compatibility seçimini yaptıktan sonra Value kısmında hangi version’la ilgili şartımızın gelmesini istiyorsak onu seçiyoruz. Operatör kısmında ise nasıl bir senaryo oluşturuyorsak ona göre sembol seçilir. Burada eşittir sembolü veritabanlarının values kısmındaki şartta eşit değilse hata vermesini sağlamış olacağız.

Version 110’den başka olan leveller için hata mesajı üretmiş olacaktır. Bu ifadeyi belirttikten sonra OK deyip başlangıç ekranına geliyorum.

Gelen ekranda bazı konfigürasyonların yapılması gerekmektedir.

Evaluation Mode kısmından On Schedule’ı seçerek policy’in hangi zaman diliminde çalışacağını belirliyoruz. On Demand’ı seçersek, Manuel bir şekilde policy’i çalıştırmak gerekir.
On Schedule seçimini yapıp yeni bir Schedule oluşturuyoruz. Ya da Pick kısmında önceden oluşturulmuş bir Schedule’ı seçebiliriz.

Pick kısmına tıkladığımızda önceki oluşturulmuş olan zamanları görebiliriz.

Server restriction kısmında server bazında bir koşulunuz varsa server bazında bir condition oluşturarak koşulunuzun kontrolünü yapabilirsiniz. Bunun için Server restriction kısmında yeni bir condition oluşturabiliriz.

Yukarıdaki tüm işlemleri tamamladıktan sonra OK butonuna basıp işlemleri sonlandırıyorum.

Policies’i oluşturduktan sonra Sağ tıklayıp manuel bir şekilde çalıştırmak için Evaluate kısmına tıklanır.

Gelen ekranda Compatibility level 110 olmayan veritabanları aşağıdaki hata vermektedir.

Yukarıdaki ekranda Details kısmında View sekmesine tıkladığımızda gelen ekranda neden başarılı olduğunu veya hata aldığını görebiliriz.

Hata veren kısmın yanındaki kutucuğa tıklayıp Apply butonuna basarsak Compatibility level değer’ini yeni Compatibility level olarak güncelliyor.


Apply deyip gelen ekranda Yes dedikten sonra yeni değerimiz set edilmiş olacaktır. Aşağıdaki checkboxs’ı işaretlediğimiz zaman ise tüm veritabanlarımız üzerinde belirlemiş olduğumuz Compatibility level koşulun aktif edildiğini görebiliriz.

Policy’den hata aldığımız için instance’ın yanında mektuba benzeyen bir kutucuğun üstünde kırmızı renkli x işareti çıkıyor. Bunun sebebi instance üzerinde tanımlı olan ve hatalı biten bir policy’nin var olduğunun sql server’ın bize bildirmek istemesi. Bu işareti gördüğünüzde tanımlı policy’lere bakıp gerekliliklerini yerine getirmeniz gerekir.

Şimdi Policy’de hata veren versionları düzelttikten sonra x işaretin kaybolduğunu gözlemleyeceğiz.

Yukarıda yapmış olduğumuz işlemde Compatibility Level ile gerekli işlemleri yapmış olduk. Şimdi Database Facet seviyesinde diğer işlemlerin nasıl yapıldığına hafif değinelim. Sadece Compatibility level’den farklı olan yerleri yapmış olacağım diğer kısımların aynısı olduğu için tekrarlamayacağım.
- Veritabanlarının Recovery Model kontrolü yapmak istersek aşağıdaki ekran görüntüsü gibi düzenleme yapılır. Yeni bir Conditions oluşturduktan sonra aşağıdaki düzenleme yapılır.

- İkinci yapımız ise veritabanlarımızda son 24 saate backup alınıp alınmadığını görebiliriz. Facet’ımız yine Database Facet ve veritabanı Name DB olarak belirtilmiştir. Bu ifade full backup için karşımıza çıkmaktadır. Field kısmında son diff ve log backup ifadesinide görebiliriz.


En son alınan log backup için ifade konfigürasyon ekranı;

Aşağıdaki resimde sadece log backup olan veritabanı için olumlu cevap dönmüş oldu.

- Veritabanımızda Auto Shrink özelliğinin açık olmasını istemeyiz. Shrink veritabanımızın data file dosyalarında kullanılmayan alanların işletim sistemine iade edilmesidir. Data dosyalarının shrink edilmesi verilerin kaybolmasını sebebiyet verebilir. Bunun için bu özelliğin kapatılması gerekmektedir. İlgili ifade false değerine sahip değil true değerine sahipse hata mesajıyla karşılaşmış olacağız.


Bu makalede Database facet işlemini ele aldım. Bu yapı ile yukarıdaki örnekler haricinde Collation, Maxdop,Name,Owner,PageVerify,ParameterSniffing,ReadOnly,Size,Status,TrustWorthy,UserName,Version vb.. birden fazla işlem için kontrol işlemi yaparız. Bir sonraki Policy Based Managemet makalesinde görüşmek dileğiyle.
“İnsanlar (kıyamet günü) toplandığında, o taptıkları kendilerine düşman oluverir, onların ibâdetlerini de inkâr ederler.” Ahkâf-6