Policy-Based Management(Veritabanı İsimlerinde Özel Karakter Kontrolü-Database Facet)
Policy-Based Management SQL Server 2008 ile gelen bir özelliktir. Sistemlerimizde istediğimiz kuralları koymamıza, standartlarımızı belirlememize ve kontrollerimizi otomatik olarak yapmamıza olanak sağlar. Örneğin stored procedure’lerimizin isimlerinin rakam ile başlamaması ya da veritabanı recovery modellerinin simple olmaması için kontrol amaçlı olarak policy oluşturabiliriz.
Policy Based Management(PBM)’ı kavramak için bazı kavramları anlamanız gerekir.
Facet: PBM tarafından yönetilebilen bir özelliktir. Örneğin Database isminde bir facet vardır. Ve bu facet’ı kullanarak veritabanı isimlerindeki karakterleri kontrol eden bir policy oluşturabilirsiniz.
Tüm facet’ların listesine aşağıdaki gibi SSMS üzerinden erişebilirsiniz. Facet detayı için üzerine çift tıklamalısınız.
Condition: ilgili facet’ların alt özelliklerinin belirlenen koşulu sağlayıp sağlamadığını kontrol eder. Örneğin Database facet’ının Name alt özelliğinde istemediğiniz bir karakter olup olmadığını kontrol edebilirsiniz.
Veritabanı isimlerinde istemediğimiz karakterler olup olmadığını kontrol etmek için bir policy oluşturalım.
Aşağıdaki gibi Management > Policy Management > Policies sekmelerinden New Policy diyoruz.
Karşımıza çıkan ekranda Policy’e bir isim veriyoruz ve Check Condition kısmından bir condition oluşturmamız gerekiyor.
New Condition’a tıklıyoruz.
Karşımıza çıkan ekranda Name kısmından condition’a bir isim veriyoruz.
Facet kısmından veritabanlarının isimlerini kontrol edeceğimiz için Database facet’ını seçiyoruz.
Expression kısmında … ‘ya tıklayarak Database facet’ının alt özelliği olan @Name ‘i seçiyoruz.
Kontrol edeceğimiz 3 parametre var. Bunları teker teker açıklayalım.
İlk parametre olan ‘%[^A-Za-z0-9[_]]%’ ifadesinde başına ve sonuna % işareti koyarak veritabanı içersinde herhangi bir yerde içindekiler geçiyorsa diyoruz. İçindekilerden kastımız [^A-Za-z0-9_]
^ ifadesinde ise, hemen sonrasında gelecek ifadelerin dışında olan herhangi bir şey,
A-Z ifadesinde A’dan Z’ye kadar olan harfler,
a-z ifadesinde a’dan z’ye kadar olan harfler,
_ ifadesinde de sadece _’yi ifade ediyoruz.
Yani sonuç olarak bu parametrelerle demek istediğimiz sonuç şu:
Veritabanı isminde A’dan Z’ye kadar büyük harfler, a’dan z’ye kadar küçük harfler, 0’dan 9’a kadar rakamlar ve _ ifadesi geçebilir. Bunu dışındakiler veritabanı isminde varsa policy fail etsin.
İkinci parametre olan ‘[0-9]%’ ifadesinde başlangıca % koymadığımızı farketmişsinizdir. Bu şekilde veritabanı isimlerinin başlangıcında rakam olmamasını, eğer rakam ile başlayan veritabanı varsa fail olmasını talep etmiş oluyoruz.
Üçüncü parametrede @Name yerine gördüğünüz gibi LEN(@Name)’i kullandık. Bunun sebebi sizin de anlamış olduğunuz gibi veritabanı uzunluğunu kontrol etmek istememiz. Burada da veritabanındaki karakter sayısı 20’den fazla olursa policy fail etsin demiş oluyoruz.
Evaluation Mode kısmından On Schedule’ı seçerek policy hangi aralıklarla kontrol’ü yapacağını belirliyoruz ve daha sonra Enable kutucuğuna tıklıyoruz.
On Demand’ı seçersek, sadece policy’i çalıştırdığımızda kontrolleri yapar.
Server restriction kısmında server bazında bir koşulunuz varsa server bazında bir condition oluşturarak koşulunuzun kontrolünü yapabilirsiniz.
Belirli aralıklarla otomatik kontrol etmesini istiyorsak Schedule kısmından new diyoruz ve policy’nin kontrol’ü yapacağı sıklığı belirliyoruz. Biz aşağıda her gün 00:00:000’da bir kere çalışacak şekilde set ettik.
Policy’mizi bu şekilde oluşturduk. Manual olarak çalıştırmak için aşağıdaki gibi Evaluate diyoruz.
Ben kendi lokal’imde bu işlemi gerçekleştirdiğimde aşağıdaki gibi bir sonuç aldım.
Fail eden veritabanı isimlerim şöyle:
İlk veritabanı . Ve / karakterlerine takıldığı için fail etti.
İkinci veritabanı da 20’den fazla karakteri olduğu için fail etti.
hakan/.gurb11as.
AdventureWorks2014Yeni
Instance üzerinde refresh yaptığınızda Instance’ın yanında aşağıdaki gibi mektuba benzeyen bir kutucuğun üstünde kırmızı renki 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.
Örneğimizle ilişkilendirecek olursak veritabanlarının isimlerinde gerekli düzeltmeleri yaptıktan sonra policy’i yukarda anlattığım gibi tekrar evaluate ettiğimizde bu işaret kaybolacaktır.
Policy Based Management ile SQL Server üzerinde yapabileceğiniz bir çok kontrol vardır. Ve profesyonel bir veritabanı yöneticisi bence SQL Server’ın bize sunduğu bu özelliği bütün detaylarıyla kullanmalı. Policy Based Management ile yapabileceğiniz diğer kontrolleri sitemizdeki menüden MSSQL’in altındaki POLICY-BASED MANAGEMENT alt menüsünden erişebileceğiniz makalelerde bulabilirsiniz.