Berikut ini adalah kompilasi hasil yang saya baca. Anda akan menemukan lebih banyak informasi di blog dan dokumen yang ditautkan.
Pertama, itu bisa terjadi yang DBCC CHECKDB
tidak akan mendeteksi inkonsistensi jika Anda mematikan verifikasi checksum atau torn_page. Kutipan dari Paul Randal dalam posting ini :
Anda benar - jika sobekan halaman atau checksum tidak diaktifkan maka tidak ada yang dapat dideteksi sejauh menyangkut opsi perlindungan halaman. CHECKDB mungkin masih menemukan korupsi yang ditemukannya dari melakukan semua pemeriksaan konsistensi yang dilakukannya - tetapi tidak akan melihat korupsi di tengah nilai data, misalnya.
Ha - itu payah tentang mengaktifkan halaman checksum - tidak ada yang terjadi sampai halaman dibaca, diubah, dan ditulis kembali. Satu-satunya cara untuk memaksa halaman untuk mendapatkan checksum adalah dengan mengubahnya - misalnya dengan membangun kembali semua indeks Anda, yang mungkin tidak menyenangkan - tidak ada alat 'sentuh' di sana.
Situasi di atas dapat mengenai Anda, jika Anda memutakhirkan database dari SQL Server 2000 atau sebelum ke 2005 atau lebih baru. Anda kemudian perlu mengaktifkan checksum halaman secara manual dengan ALTER DATABASE untuk mengaktifkannya. Tetapi kemudian paragraf ke-2 dari kutipan di atas menendang dan mungkin mengganggu Anda.
BACKUP WITH CHECKSUM
akan mendeteksi ketidakkonsistenan checksum, tetapi hanya jika halaman tersebut sudah memiliki checksum yang ditulis untuknya, ketika sedang didukung Biasanya DBCC CHECKDB
juga mendeteksi kesalahan ini, jadi itu bukan ide yang baik untuk menggunakan CADANGAN DENGAN CHECKSUM untuk menggantikan DBCC CHECKDB .
Sekarang ada kemungkinan kedua untuk DBCC CHECKDB
tidak menunjukkan ketidakkonsistenan, bahkan jika ada beberapa. Untuk ini saya hanya mengutip lagi Paul Randal dalam Kesalahpahaman tentang korupsi: dapatkah mereka menghilang? :
Jadi bagaimana dengan korupsi yang menghilang? Ini masuk ke dalam cara kerja pemeriksaan konsistensi. Pemeriksaan konsistensi hanya berjalan di halaman dalam database yang dialokasikan. Jika halaman tidak dialokasikan untuk apa pun, maka 8192 byte itu tidak ada artinya dan tidak dapat diartikan. Jangan bingung antara dicadangkan dan dialokasikan - saya jelaskan dalam kesalahpahaman pertama posting di sini. Selama halaman dialokasikan, itu akan diperiksa konsistensi oleh DBCC CHECKDB, termasuk menguji halaman checksum, jika ada. Korupsi dapat 'menghilang' jika halaman yang rusak dialokasikan pada saat DBCC CHECKDB berjalan, tetapi kemudian dihapuskan pada saat DBCC CHECKDB berikutnya berjalan. Pertama kali akan dilaporkan sebagai korup, tetapi yang kedua tidak dialokasikan, jadi tidak diperiksa konsistensi dan tidak akan dilaporkan sebagai korup. Korupsi sepertinya menghilang secara misterius. Tetapi belum - hanya saja halaman korup tidak lagi dialokasikan. Tidak ada yang menghentikan SQL Server untuk menghapus halaman yang rusak - pada kenyataannya, itulah yang dilakukan oleh banyak perbaikan DBCC CHECKDB - membatalkan semua yang rusak, dan memperbaiki semua tautan.
Saya tidak memiliki jawaban akhir untuk pertanyaan Anda, tetapi karena DBCC CHECKDB
hanya memeriksa halaman yang dialokasikan itu tidak akan menunjukkan ketidakkonsistenan dalam halaman yang tidak dialokasikan. Satu-satunya situasi yang dapat saya bayangkan sekarang adalah bahwa CADANGAN juga membuat cadangan halaman yang tidak dialokasikan yang menunjukkan potensi kesalahan checksum yang dilewati DBCC CHECKDB
.