MSSQL Server Ola Hallengren Database Integrity Check

Bu makalede Ola Hallengren MaintenanceSolution scriptini çalıştırdıktan sonra sql agent altında gelen Database Integrity Check system databases ve Database Integrity Check user databases yapılarını detaylı bir şekilde görmüş olacağız. Bu yapıya geçmeden önce sayfamızda DBCC makalelerine bakılması gerekmektedir. Şimdi oluşturulan bu jobın bizlere neler sağladığı ve nasıl kontrol edildiğini görmüş olalım.

Default olarak script tarafından oluşturulan yukarıda görülen jobların kendi bulunduğumuz ortama göre dizayn edebiliriz. Bunun için Ola Hallengren MaintenanceSolution scriptinin indirilmesi gerekmektedir. Gerçek sistemler üzerinde yapılar şu şekilde çalışmaktadır. Secondary sunucusunda hafta bir dbcc checkdb fiziksel ve mantıksal olarak çalıştırılması gerekirken. Primary sunucusunda ayda 1 sadece fiziksel tutarlılık testi yapılması yeterlidir. Neden test yapılmıyor diye sorabilirsiniz. Çünkü mantıksal olarak secondary sunucusunda yapılmaktadır. DBCC makalelerinde belirtilen tüm scriptlerini Ola Hallengren scriptlerinde görmek mümkündür.

Genel olarak Job içerisinde kullanabileceğimiz genel komutlar aşağıda gösterilmektedir.

EXECUTE dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKDB',--CHECKFILEGROUP,CHECKTABLE.. yazılabilir.
@PhysicalOnly = 'Y', --Sadece fiziksel olarak kontrol yapılması
@NoIndex = 'Y', -- Non clustered indexler dışında kontrol sağlanır.
@AvailabilityGroupReplicas='SECONDARY', --ALL,PRIMARY şeklinde belirtilebilir.
@TimeLimit=2000,-- Saniye cinsinden belirli bir çalışma zamanı belirlenebilir. 2 bin saniye boyunca çalışır.
@LogToTable='Y', -- Yapılan işlemleri log tablosuna kaydeder.
@AvailabilityGroups='ALL_AVAILABILITY_GROUPS',-- Tüm availability kontrol veya tek AG üzerinde tarama işlemi yapar.
@NoInformationalMessages='Y',-- Bu ifade bilgilendirme mesajlarını göstermez.
@TabLock='N', --Performans anlamında tabloya ve ilgili ifadeye lock koyar.
@Maxdop=8-- Tutarlılık testinin paralel çalışmasını sağlayabiliriz.

Not: Ola Hallengren scriptlerinde Availability Group kontrol şartı aranmaz. Çünkü ola kendi içerisinde yapmaktadır.

Yukarıda genel olarak verilen çoğu komutu ihtiyacınıza göre yapabilirsiniz.

  • File group bazında integrity kontol işlemi yapılmak isteniyorsa aşağıdaki şekilde komut güncellenir.
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = 'AdventureWorks',
@CheckCommands = 'CHECKFILEGROUP',
@FileGroups = 'AdventureWorks.PRIMARY'
  • File group bazında integrity kontrol edilmek isteniyorsa aşağıdaki komutta tüm file grouplar dahil edip bazı file groupları çıkarabiliriz.
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKFILEGROUP',
@FileGroups = 'ALL_FILEGROUPS, -AdventureWorks.PRIMARY'
  • Tablo bazında kontrol edilmesi istenirse ilgili veritabanı, schema adı ve tablo adının girilmesi gerekmektedir.
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = 'AdventureWorks',
@CheckCommands = 'CHECKTABLE',
@Objects = 'AdventureWorks.Production.Product'
  • Tüm tablolarının mantıksal ve fiziksel olarak kontrol işlemi yapılırken bazı tablolar kontrol işleminden çıkarılabilir.
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKTABLE',
@Objects = 'ALL_OBJECTS, -AdventureWorks.Production.Product'
  • Hangi replica üzerinde çalıştırılacağına karar verilebilir. Hayati önem taşır. Çünkü yanlış replicada çalıştırılması performans anlamında ciddi sorunlar yaratabilir.
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@CheckCommands = 'CHECKDB',
@AvailabilityGroupReplicas='SECONDARY',
@LogToTable='Y'
  • Primary sunucu üzerinde sadece fiziksel test yapmak için aşağıdaki komut çalışmaktadır.
EXECUTE dbo.DatabaseIntegrityCheck
@Databases = 'USER_DATABASES',
@PhysicalOnly = 'Y',
@AvailabilityGroupReplicas='PRIMARY',
@LogToTable='Y'

Aşağıdaki komut ile sqlcmd üzerinden Integrity jobımız çalışmaktadır.

sqlcmd -E -S $(ESCAPE_SQUOTE(SRVR)) -d master -Q "EXECUTE [dbo].[DatabaseIntegrityCheck] @Databases = 'USER_DATABASES', @AvailabilityGroupReplicas='SECONDARY' ,@LogToTable = 'Y'" -b

Yukarıdaki komutlarımızda @CheckCommands ifadesinin bulunmamasının sebebi default olarak stored procedure yapımızın içinde çalışmasından dolayıdır. Stored procedure’in içerisinde olan değişkenlerin ekran resimleri:

Bu makalede DBCC komutlarını system üzerinden job aracılığıyla nasıl çalışacağını detaylı bir şekilde görmüş olduk. Başka bir makalede görüşmek dileğiyle..

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir