Saya sedang berupaya menerapkan metode Paul Randal untuk menyebarkan DBCC CHECKDB secara manual selama beberapa hari untuk database yang sangat besar, yang pada dasarnya terdiri dari:
- Membagi tabel dalam database kira-kira sama antara 7 ember
- Menjalankan DBALL CHECKALLOC dua kali seminggu
- Menjalankan CHECKCATALOG DBCC seminggu sekali
- Menjalankan DBCC CHECKTABLE pada satu ember setiap hari dalam seminggu
Adakah yang menggunakan teknik ini? Adakah skrip yang ada di luar sana?
Saya khawatir ini mungkin tidak benar-benar mencakup semua yang dilakukan CHECKDB; dokumentasi Books Online untuk CHECKDB mengatakan bahwa selain CHECKALLOC, CHECKCATALOG dan CHECKTABLE, itu juga:
- Memvalidasi konten setiap tampilan yang diindeks dalam database.
- Memvalidasi konsistensi tingkat tautan antara tabel metadata dan direktori sistem file dan file saat menyimpan data varbinary (max) dalam sistem file menggunakan FILESTREAM. (Hanya SQL 2008)
- Memvalidasi data Pialang Layanan dalam database.
Jadi inilah pertanyaanku:
Apakah pemeriksaan tambahan ini penting / penting? (Pandangan yang diindeks mungkin sedikit lebih mengkhawatirkan saya, saya pikir kami belum menggunakan Broker Layanan atau FILESTREAM.)
Jika demikian, adakah cara untuk melakukan pemeriksaan tambahan ini secara terpisah?
CHECKALLOC dan CHECKCATALOG tampaknya berjalan sangat cepat, bahkan pada dbs besar. Adakah alasan untuk tidak menjalankan ini setiap hari?
(Catatan: ini akan menjadi rutin standar untuk ribuan database yang ada di ratusan server, atau setidaknya setiap database dengan ukuran tertentu. Ini berarti bahwa opsi seperti merestrukturisasi semua database untuk menggunakan CHECKFILEGROUP tidak terlalu praktis bagi kami.)
sumber
Jawaban:
Anda dapat menjalankan
DBCC CHECKTABLE WITH EXTENDED_LOGICAL_CHECKS
langsung pada tampilan yang diindeks . Memeriksa pandangan yang diindeks dapat menimbulkan masalah dalam keadaan tertentu , jadi bersiaplah untuk menyelidiki setiap kesalahan positif yang dihasilkan. (Paul Randal juga menyebutkan dalam komentar pada artikel yang dirujuk bahwa negatif palsu juga mungkin terjadi, tetapi saya tidak memiliki pengalaman langsung tentang hal itu.)Tidak ada dukungan untuk menjalankan Pialang Layanan atau
FILESTREAM
memeriksa secara terpisah, tidak.Bukannya aku sadar.
Anda mungkin juga mempertimbangkan untuk berlari
DBCC CHECKCONSTRAINTS
. Pemeriksaan ini tidak termasuk dalamDBCC CHECKDB
, terlepas dari opsi yang Anda tentukan. Anda juga mungkin ingin berpikir tentang sesekali berjalanCHECKDB
, karena dan ketika keadaan mengizinkan.sumber
DBCC CHECKDB sangat penting untuk database SQL Server agar 100% yakin bahwa tidak ada korupsi. Namun, karena basis data bertambah besar, sangat sulit untuk menemukan jendela pemeliharaan saat Anda mengklaim 24x7 ke atas. Selama bertahun-tahun, tim SQL Server telah menerapkan berbagai mekanisme yang akan mendeteksi bentuk paling umum dari korupsi terutama terkait dengan korupsi fisik yang disebabkan oleh perangkat keras.
SQL Server 2005 dan yang lebih baru memiliki PAGE_VERIFY = CHECKSUM yang dapat membantu Anda secara proaktif mendeteksi korupsi fisik di halaman database sehingga menambahkan checksum ke setiap halaman seperti yang ditulis ke sistem I / O dan memvalidasi checksum saat itu dibaca dari disk.
Juga, pencadangan (penuh atau diferensial) dengan CHECKSUM akan menjamin untuk mendeteksi korupsi I / O yang disebabkan oleh perangkat keras.
Oleh karena itu, dari sisi perangkat keras korupsi, SQL Server melakukan pekerjaan yang baik untuk mendeteksi dan melaporkannya. (Pastikan juga untuk mengatur Peringatan terkait korupsi yang penting ).
Bahwa sedang dikatakan, masih logis korupsi , kesalahan yang disebabkan scribbler - di mana halaman dalam memori rusak baik oleh kode pihak ketiga yang berjalan di dalam proses SQL Server atau oleh driver atau perangkat lunak lain dengan hak istimewa yang cukup mengeksekusi dalam mode kernel Windows dan / atau SQL Server Bug , dll tidak terdeteksi menggunakan metode di atas dan karenanya CHECKDB muncul.
DBCC CHECKDB melakukan pemeriksaan yang lebih menyeluruh yang mencakup memeriksa header halaman untuk kemungkinan korupsi yang tidak dapat dideteksi dengan cara lain.
Alih-alih menciptakan kembali roda, saya akan sangat menyarankan Anda untuk melihat solusi SQL Server Integrity Check
Menjalankan DBCC CHECKDB secara efisien:
Anda hanya perlu kreatif ketika Anda berada dalam jendela pemeliharaan yang ketat yang memiliki basis data sangat besar atau jumlah basis data yang tinggi untuk menjalankan CHECKDB.
Setelah mengikuti pelatihan SQLSkills, apa yang telah saya terapkan di lingkungan saya adalah:
DBCC CHECKTABLE
bersama dengan menjalankanDBCC CHECKALLOC
danDBCC CHECKCATALOG
DBCC CHECKTABLE
,DBCC CHECKALLOC
danDBCC CHECKCATALOG
. Sehingga Anda bisa merasakan berapa lama biasanya untuk menjalankan cek Anda.NOINDEX
opsi karena akan mempercepat operasi karena tidak memeriksa Indeks Non-Clustered pada tabel pengguna. Ini memiliki beberapa keuntungan karena tidak sepenting korupsi data karena tidak ada data yang hilang dan Anda dapat menjatuhkan dan membuat ulang Indeks jika perlu.Jelas, edisi Enterprise dapat mengambil keuntungan dari eksekusi Paralel pernyataan DBCC, tetapi perhatikan pengaturan MAXDOP karena mungkin akan berakhir dengan mengambil semua CPU Anda. Ini bisa sulit dibatasi oleh Gubernur Sumber Daya.
Catatan: Jika Anda memiliki kolom SPARSE, maka CHECKDB Anda akan mati lambat seperti dijelaskan di sini .
Akhirnya, ini adalah cara mencegah korupsi basis data dengan memanfaatkan semua set alat yang tersedia + keyakinan Anda pada sistem perangkat keras server basis data Anda dan yang paling penting nilai data Anda.
Beberapa referensi bagus:
sumber