DBCC CHECKFILEGROUP Nedir ve Ne Zaman Kullanılır

27 Şub by NURULLAH ÇAKIR

DBCC CHECKFILEGROUP Nedir ve Ne Zaman Kullanılır

DBCC CHECKFILEGROUP ile filegroup üzerindeki tüm tablo ve indexed view’lerin tutarlılık testi yapılır. Filegroup’un ne olduğunu daha detaylı incelemek için “Veritabanı Oluşturmak Deyip Geçmeyin!” isimli makalemden faydalanabilirsiniz.

 

DBCC CHECKFILEGROUP aslında arka planda filegroup üzerinde DBCC CHECKALLOC’u, filegroup üzerindeki tüm tablolarda da DBCC CHECKTABLE’ı çalıştırır. DBCC CHECKDB ve DBCC CHECKTABLE ile çok benzer yapıda çalışır. Bu komutlarlar ilgili aşağıdaki makalelerimden faydalanabilirsiniz.

 

DBCC CHECKDB Detayları“,

DBCC CHECKALLOC Nedir“,

DBCC CHECKTABLE Nedir

 

DBCC CHECKFILEGROUP ‘un birkaç farklı kullanım şekli vardır. Bunların hepsini teker teker inceleyelim.

 

Aşağıdaki komut ile Test veritabanındaki PRIMARY filegroup’daki mantıksal ve fiziksel hatalar tespit edilir.

USE Test
GO
DBCC CHECKFILEGROUP ('PRIMARY')

 

Aşağıdaki sorgu yardımıyla Test veritabanındaki PRIMARY file group’unda, non clustered index ‘ler dışındaki hatalar tespit edilir.

 

USE Test
GO
DBCC CHECKFILEGROUP (N'PRIMARY',NOINDEX)

 

Aşağıdaki komutu kullanarak PRIMARY filegroup üzerindeki tablolardaki non clustereded index’lerdeki hataları veri kaybı olmadan düzeltecek şekilde DBCC CHECKFILEGROUP komutunu çalıştırabilirsiniz.

 

REPAIR_REBUILD işlemi filestream veri içeren hataları düzeltmez.

USE Test
GO
ALTER DATABASE Test SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DBCC CHECKFILEGROUP (N'PRIMARY',REPAIR_REBUILD) WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
ALTER DATABASE Test SET MULTI_USER;

 

Aşağıdaki komutu kullanarak tablodaki bütün hataları veri kaybı riski ile beraber düzeltecek şekilde DBCC HECKFILEGROUP komutunu çalıştırabilirsiniz.

USE Test
GO
ALTER DATABASE [Test] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
DBCC CHECKFILEGROUP (N'PRIMARY', REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
ALTER DATABASE [Test] SET MULTI_USER;

 

Script’in sonundaki ALL_ERRORMSGS yazmasak bile default olarak bu şekilde kabul eder. Her nesne için alınan bütün hataları göster anlamına gelir.

 

Script’in sonundaki NO_INFOMSGS bilgilendirme mesajlarını gösterme anlamına gelir.

 

NOT1: Veritabanının suspect olduğu teyidini yaptıktan sonra kurtarmak için(REPAIR_REBUILD ya da REPAIR_ALLOW_DATA_LOSS komutları ile çalıştırmadan önce) girişime başlamadan önce yapmamız gereken ilk işin bu haliyle bir backup’ını almak olmalı!!!

 

NOT2: DBCC CHECKFILEGROUP komutunu REPAIR_REBUILD ya da REPAIR_ALLOW_DATA_LOSS ile çalıştırdıktan sonra DBCC CHECKCONSTRAINTS komutunu çalıştırmanızı öneririm. Bu komutla ilgili bilgiyi “DBCC CHECKCONSTRAINTS Nedir” isimli makalemde bulabilirsiniz.

 

Aşağıdaki komutu kullanarak çalıştırırsanız internal database snapshot kullanmak yerine lock koyar. “SQL Server Lock Çeşitleri” isimli makalemi okumak isteyebilirsiniz.

 

USE Test
GO
DBCC CHECKFILEGROUP (N'PRIMARY') WITH TABLOCK,NO_INFOMSGS, ALL_ERRORMSGS;

 

Aşağıdaki komutu kullanırsanız herhangi bir tutarlılık testi yapılmaz. Sadece tutarlılık testi yapılabilmesi için tempdb’de ne kadar alan gerektiği hesaplanır ve aşağıdaki gibi bir çıktı üretir.

 

USE Test
GO
DBCC CHECKFILEGROUP (N'PRIMARY') WITH ESTIMATEONLY,NO_INFOMSGS, ALL_ERRORMSGS;

Estimated TEMPDB space (in KB) needed for CHECKFILEGROUP on database Test = 467.

 

Aşağıdaki komutu kullanarak çalıştırdığınızda tutarlılık kontrolü sadece fiziksel olarak yapılır. Mantıksal olarak yapılmaz.

 

Bana sorarsanız bu komutu kullanarak çalıştırmanın pek bir anlamı yok. Çünkü mantıksal tutarlılığını kontrol etmiyor. Tabi özel durumlarda kullanılmak üzere böyle bir seçeneği bize sunmuşlar.

 

PHYSICAL_ONLY komutu ile herhangi bir REPAIR(sorunu düzeltme) işlemi yapamazsınız. Ayrıca PHYSICAL_ONLY kullandığınızda file stream veriler kontrol edilmez. File Stream ile ilgili bilgiyi “File Stream Nedir” isimli makalemde bulabilirsiniz.

 

USE Test
GO
DBCC CHECKFILEGROUP (N'PRIMARY') WITH PHYSICAL_ONLY,NO_INFOMSGS, ALL_ERRORMSGS;

 

DBCC CHECKFILEGROUP ‘un daha hızlı tamamlanması için DBCC CHECKTABLE komutunu çalıştırmadan önce server konfigurasyonlarından maxdop(max degree of paralellism)’u arttırabilirsiniz. Eğer sisteminiz oltp bir sistemse ve tamamen küçük transaction lardan oluşuyorsa maxdop’u arttırmak çalışan sistemin performansını yavaşlatabilir. Bu yüzden maxdop’u arttırdıktan sonra sistemi incelemeli ve herhangi bir performans probleminde değişikliği geri almalısınız. Maxdop değerini doğru ayarlamak için  “sp_configure(SQL Server’da Server Seviyesinde Konfigurasyonlar)” isimli makalemden faydalanabilirsiniz.

 

Tutarlılığı kontrol edilen non clustered index’in ait olduğu tablo başka bir filegroup’ta ise bu index için tutarlılık testi yapılmaz.

 

Kontrol edilen tablodaki non clustered index başka bir file group’ta ise index’in kontrolü yapılmaz.

 

Partition yapılmış bir tablo birden fazla filegroup üzerindeyse tablonun sadece ilgili filegroup üzerindeki kısmı kontrol edilir. Partition ile ilgili detaylı bilgi almak için “Partition Oluşturmak” isimli makalemden faydalanabilirsiniz.

 

Peki DBCC CHECKFILEGROUP ne zaman kullanılır?

 

Genellikle büyük veritabanlarında kullanılır. Örneğin büyük bir veritabanındaki büyük bir tablo partition yapıldı ve önceki yıllara ait filegroup’lar read only hale getirildi. Partition yapmak için “Partition Oluşturmak” isimli makalemi okumanızı tavsiye ederim. Toplam boyut’un 300 TB olduğunu ve read only verinin 280 TB olduğunu düşünün. Bütün veritabanı için DBCC CHECKDB yapmak yerine  sadece read only olmayan file group’lar için DBCC CHECKFILEGROUP yapmak isteyebiliriz.

 

Read only file group’lar içinde PHYSICAL_ONLY ile belirli aralıklarla çalıştırabiliriz.

 

Büyük veritabanları için her seferinde 300 TB’ın backup’ını almak çok maliyetli olacaktır. Read Only FileGroup’ların backup’ını tek sefer aldıktan sonra aktif file group’ların backup’ını düzenli olarak almak  ve gerektiğinde FileGroup Restore yapmak için “FileGroup Backup ve FileGroup Restore İşlemleri” isimli makalemi okumanızı tavsiye ederim.

 

Aktif file group’larda ayrıca DBCC CHECKALLOC ve DBCC CHECKCATALOG çalıştırmalısınız. Aşağıda bu komutlarla ilgili makaleleri bulabilirsiniz.

DBCC CHECKALLOC Nedir“,

DBCC CHECKCATALOG Nedir

Örnek olarak;

 

38 TB(Tera Byte) boyuta sahip bir veritabanında DBCC CHECKALLOC işlemi yaklaşık 3 saat sürdü.

 

Ayrıca bu komutları düzenli olarak çalıştırmak için Maintenance Plan kullanabilirsiniz. Maintenance Plan’larla ilgili makaleleri de aşağıda bulabilirsiniz.

 

Maintenance Plan Kullanarak Full Backup Almak“,

Maintenance Plan Kullanarak Differential Backup Almak“,

Maintenance Plan Kullanarak Log Backup Almak“,

Maintenance Plan Kullanarak Veritabanı Tutarlılığını Kontrol Etmek“,

Maintenance Plan Kullanarak Index’leri Rebuil Etmek“,

Maintenance Plan Kullanarak Index’leri Reorganize Etmek“,

Maintenance Plan Kullanarak İstatistikleri Update Etmek“,

Maintenance Plan Kullanarak Backup, Restore, Job ya da Maintenance Plan Geçmişini Silmek“,

Maintenance Plan Kullanarak Mevcut Bir Job’ı Çalıştırmak“,

Maintenance Plan Kullanarak Bir Klasördeki Belirlenen Uzantıya Sahip Dosyaları Silmek(Maintenance Cleanup Task)

Loading

Bir yanıt yazın

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