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 ise Availability Facet konusunu örneklerle ele almış olacağız.
Ortamımızda databaselerimiz bir AlwaysOn yapısı altında olabilir. Herhangi bir switch over işleminden önce ilgili AG’mizin failover’a hazır olup olmadığını veya AlwaysOn yapımız hakkında bilgi almak isteyebiliriz. Bunun için aşağıdaki facet’ların seçilip belirli Condition’ların tanımlanması gerekmektedir.
1. Availability Database : AlwaysOn kullanılabilirlik gruplarındaki veritabanları için yönetim işlemlerini yapmanızı sağlar. IsFailoverReady Condition’ını kullanarak failover’a hazır olup olmadığını bulabiliriz.
2. Availability Group : AlwaysOn gruplarını yönetmek ve yapılandırmak için kullanılır. AutomatedBackupPreference alt özelliğinin Secondary Only olup olmadığını kontrol eden bir condition oluşturabilirsiniz.
3. Availability Group State : AlwaysOn gruplarının durumu hakkında bilgi verir.
4. 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.
İş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 AG altında databaselerin failover işlemine Hazır olup olmadığını kontrol eden @IsFailoverReady ifadesiyle kontrol işlemi yapmış olacağız. Bu yapı switch-over işlemi olmadan önce herhangi bir sıkıntı varsa hata mesajıyla karşılaşmış olacağız. Operator kısmından =’i , value kısmından da True’yu seçiyoruz. Böylelikle AG failover’a hazır değilse policy fail edecektir.

@IsFailoverReady ifadesini True yaptıktan sonra OK butonuna tıklıyoruz.

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.

Herhangi bir sorun olsaydı Target kısmından ilgili database’e müdahale edebilecektik. Target kısmından ilgi veritabanlarımızı görebiliriz.

Yukarıdaki örneği yaptıktan sonra şimdi AlwaysOn için yapılan diğer işlemlere değinelim.
Availability Group : AlwaysOn gruplarını yönetmek ve yapılandırmak için kullanılır. Bu yapı yeni bir AG oluşturulurken arayüzden konfigürasyon yapmış olduğumuz bölümler olarak görülmektedir. AlwaysOn yapılarında backup’ın öncelikli olarak hangi sunucularda alınması gerektiğini AG ekranında yapabilmekteyiz. Bu işlemi normal AG üzerine tıklayarak ta öğrenebiliriz. İlgili facet’ın AutomatedBackupPreference alt özellikli condition’la backup’ın öncelikli nerede alınması gerektiğini görebiliriz. Secondary olup olmadığını kontrol eden bir condition oluşturabilirsiniz.

Aşağıda resimde backup’ların sadece Primary sunucusunda olduğunu görebiliriz.
Availability Group State : AlwaysOn gruplarının durumu hakkında bilgi verir. Otomatik failover açık mı,online mı gibi işlemler yapılabilir. AG üzerine sağ tıklayıp properties ekranından kontrol edilmesi daha mantıklıdır. Ama birden fazla AG yapınız varsa kullanılması kolaylık sağlayacaktır.

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. Primary ve secondary sunucularında kontrol işlemlerini kolaylıkla yapabiliriz. Aşağıdaki resimde göründüğü gibi birden fazla tanımlama yapılabilir.

Aşağıdaki iki örnekten birincisinde secondary sunucularında kullanıcının instance altında herhangi bir işlem yapıp yapmadığını yani okuma olup olmadığını öğreniyoruz. Bunu tanımlamak yerine AG üzerine sağ tıklayıp properties ekranından yapabilir. Birden fazla AG varsa yapmak mantıklıdır.


Policy’den hata aldığımız da 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.

Bu makalede Replica yapılarımızda Policy Based Management altında bulunan Facet ve Condition altında bazı yapıları görmüş olduk. Başka bir makalede görüşmek dileğiyle.
“Doğrusu mallarınız ve çocuklarınız sizin için bir imtihandır. Büyük mükafat ise Allah’ın yanındadır.” Teğabun-15