Policy-Based Management(Veritabanının Son Log Backup Alma Zamanı 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.
Bu makaleyi okumadan önce Transaction Log kavramını anlamak için “SQL Server Transaction Log Nedir” isimli makaleyi okumanızı tavsiye ederim. Daha detaylı bilgi için sitemizin Arama kısmını kullanabilirsiniz.
Transaction Log Backup belirli bir süre alınmazsa ve veritabanının recovery model’i simple değilse transaction log büyümeye devam edecektir ve bir süre diskte yer de kalmayacağı için uygulama çalışamaz duruma gelecektir. Bu yüzden Transaction Log Backup’ın düzenli olarak alındığını kontrol etmemiz gerekir. Policy Based Management sistemi ile bunu gerçekleştirebiliriz.
Recovery Model ile ilgili “Veritabanı Recovery Modelleri” isimli makaleyi okumak isteyebilirsiniz.
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ının log backup’ının alınıp alınmadığını 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.
Veritabanı Recovery Model’i simple olmayan veritabanları arasından son 1 gündür log backup’ı alınmayan veritabanlarını kontrol eden 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 Database facet’ını seçiyoruz.
Expression kısmında … ‘ya tıklayarak Database facet’ının alt özelliği olan @LastLogBackupDate ‘i seçiyoruz.
Operator kısmından >’ü seçerek value kısmına DateAdd(‘HH’, -24, GetDate()) değerini yazıyoruz.
Böylelikle son bir gündür log backup’ı alınmayan veritabanı varsa policy fail edecektir.
Evaluation Mode kısmından On Schedule’ı seçerek policy’nin 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şturduğumuzda bütün veritabanları için gerekli kontrolleri yapacak. Ama aslında bizim amacımız simple olmayan veritabanlarında bu kontrolü yapmasıydı.
Bu yüzden aşağıdaki gibi Every yazan yere tıklayarak hangi veritabanlarında bu kontrolü yapacağını belirlemek için New Condition diyoruz.
Karşımıza gelen ekranda aşağıdaki gibi Recovery Model’i Simple olmayanları seçiyoruz.
Bu işlemi yaptıktan sonra aşağıdaki gibi bir ekranın karşımıza gelmesi gerekiyor.
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. Gördüğünüz gibi recovery model’i simple olmayan veritabanlarının hiçbirinde log backup alınmadığı için policy fail etti.
View’e tıklayarak daha detaylı bilgi edinebilirsiniz.
Policy fail olduğu için Instance üzerinde refresh yaptığınızda Instance’ın yanında aşağıdaki gibi mektuba benzeyen bir kutucuğun üstünde kırmızı renkli x işareti çıkar. 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.
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.