Aşağıdakiler, okuduğum sonuçların bir derlemesidir. Bağlantılı bloglarda ve belgelerde çok daha fazla bilgi bulacaksınız.
İlk olarak, DBCC CHECKDB
sağlama toplamı veya torn_page doğrulamasını kapatırsanız tutarsızlıkları algılamaz. Bu yazıda Paul Randal'dan bir alıntı :
Haklısınız - yırtık sayfa veya sağlama toplamı açık değilse, sayfa koruma seçenekleriyle ilgili olarak algılanabilecek hiçbir şey yoktur. CHECKDB, yaptığı tüm tutarlılık kontrollerini yapmaktan bulduğu bozulmaları hala alabilir - ancak veri değerlerinin ortasında bozulmalar görmez.
Ha - bu sayfa sağlama toplamlarını açmanın en kötü yanı - bir sayfa okunana, değiştirilip tekrar yazılana kadar hiçbir şey olmuyor. Sayfaları sağlama toplamları almaya zorlamanın tek yolu, onları değiştirmektir - örneğin, tüm dizinlerinizi yeniden oluşturarak, hoş olmayan olabilir - orada hiçbir 'dokunma' aracı yoktur.
Bir veritabanını SQL Server 2000'den veya daha önce 2005 veya sonraki bir sürüme yükselttiyseniz, yukarıdaki durum size ulaşabilir. Daha sonra, aktif hale getirmek için sayfa kontrol toplamlarını ALTER DATABASE ile manuel olarak etkinleştirmeniz gerekir. Ama sonra yukarıdaki alıntıdaki 2. paragraf devreye girer ve sizi rahatsız edebilir.
BACKUP WITH CHECKSUM
sağlama toplamı tutarsızlıklarını algılar, ancak yalnızca sayfanın kendisine yedeklenmiş bir sağlama toplamı yazmışsa. Normalde DBCC CHECKDB
bu hataları da algılar, bu nedenle DBCC CHECKDB'in yerini almak için CHECKSUM İLE YEDEKLEME kullanmak iyi bir fikir değildir .
Şimdi DBCC CHECKDB
, bazı tutarsızlıklar olsa bile, herhangi bir tutarsızlık göstermemek için ikinci bir olasılık var. Bunun için Paul Randal'ı yolsuzluklarla ilgili yanılgılarda tekrar söylüyorum : kaybolabilirler mi? :
Peki kaybolan yolsuzluklar ne olacak? Bu, tutarlılık kontrollerinin nasıl çalıştığına girer. Tutarlılık denetimleri yalnızca veritabanındaki ayrılan sayfalarda çalışır. Bir sayfa hiçbir şeye tahsis edilmemişse, 8192 bayt anlamsızdır ve yorumlanamaz. Ayrılmış ve tahsis edilenler arasında kafanız karışmasın - bunu ilk yanlış anlamalarda burada açıklıyorum. Bir sayfa tahsis edildiği sürece, sayfa kontrol toplamının test edilmesi de dahil olmak üzere DBCC CHECKDB tarafından tutarlılık kontrol edilecektir. Bir DBCC CHECKDB çalıştığı sırada bozuk bir sayfa tahsis edilirse, ancak bir sonraki DBCC CHECKDB çalıştığı zaman yeniden konumlandırılırsa, bir yolsuzluk 'yok gibi görünebilir. İlk kez bozuk olarak bildirilecek, ancak ikinci kez ayrılmadığı için tutarlılık kontrol edilmedi ve bozuk olarak bildirilmeyecek. Yolsuzluk gizemli bir şekilde yok gibi görünüyor. Ancak olmadı - sadece bozuk sayfa artık ayrılmıyor. SQL Server'ın bozuk bir sayfayı dağıtmasını durduran hiçbir şey yoktur - aslında, DBCC CHECKDB onarımlarının çoğunun yaptığı şey - kırık olanları dağıtmak ve tüm bağlantıları düzeltmek.
Sorunuza son bir cevabım yok, ancak DBCC CHECKDB
yalnızca tahsis edilen sayfaları kontrol ettiği için, tahsis edilen sayfalarda tutarsızlıklar gösterilmeyecek. Şimdi hayal edebileceğim tek durum, YEDEKLEME'nin atlanan potansiyel sağlama toplamı hatalarını gösteren bu ayrılmış sayfaları yedeklemesidir DBCC CHECKDB
.