Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Ikhtisar Fungsi DBCC CheckDB

Pengantar

Pemeliharaan basis data secara teratur adalah bagian penting dari pekerjaan Administrator Basis Data yang membantu memastikan bahwa sistem yang sangat penting berjalan seperti biasa. Salah satu cara termudah untuk melakukannya adalah dengan mengotomatisasi tugas-tugas yang terkait dengan DBCC CheckDB. Apa pun versi SQL Server yang Anda jalankan, tidak akan pernah ada database yang tidak memerlukan pemeliharaan. Anda harus merencanakan pemeliharaan agar terjadi secara teratur sehingga Anda dapat melindungi punggung Anda terutama pada saat skenario bencana nyata.

DBA Selalu Pelakunya

Setiap kali ada masalah database, semua mata tertuju pada DBA. Apakah masalah tersebut disebabkan oleh hujan atau karena beberapa pengembang menulis kode buruk yang mengakibatkan kelambatan basis data, DBA selalu diharapkan untuk memperbaiki kekacauan tersebut. Dan Anda dapat membayangkan jenis tekanan yang perlu Anda tangani jika Anda diminta untuk memulihkan database dengan cepat menggunakan cadangan terakhir yang tersedia yang, seperti yang Anda temukan dalam prosesnya, tidak valid dan integritas database telah dikompromikan beberapa bulan. yang lalu. Di sinilah letak perbedaan antara DBA proaktif dan DBA reaktif. Pada kenyataannya, strategi pemulihan Anda jauh lebih penting dibandingkan dengan strategi cadangan. Apa kegunaan cadangan basis data harian jika tidak digunakan pada saat pemulihan?

Mengapa Pemeliharaan Penting?

Dengan pertumbuhan teknologi database yang belum pernah terjadi sebelumnya dan dengan fitur baru yang muncul di setiap rilis, penting bagi Anda sebagai DBA untuk tetap terdepan dan memastikan bahwa Anda mengikuti praktik terbaik industri dalam pemeliharaan basis data.

DBCC CheckDB dan Cara Menjalankannya

DBCC CheckDB – nama ini cukup menggambarkan fungsionalitas. Sederhananya, ia memeriksa database. Ini penting untuk memastikan bahwa database berfungsi seperti yang diharapkan. Pada dasarnya, DBCC CheckDB memeriksa integritas logis dan fisik dari semua objek dalam database. Inilah yang dilakukan DBCC CheckDB di bawah tenda menurut resmi Dokumentasi Microsoft:

  • Menjalankan DBCC CHECKALLOC pada database – konsistensi alokasi ruang disk

  • Menjalankan DBCC CHECKTABLE pada setiap tabel dan tampilan dalam database – ini adalah integritas semua halaman dan struktur yang membentuk tabel atau tampilan terindeks.

  • Menjalankan DBCC CHECKCATALOG pada database – ini memeriksa konsistensi katalog dalam database yang ditentukan.

  • Memvalidasi konten setiap tampilan yang diindeks dalam database.

  • Memvalidasi konsistensi tingkat tautan antara metadata tabel dan direktori/file sistem file saat menyimpan data varbinary(max) dalam sistem file menggunakan FILESTREAM.

  • Memvalidasi data Pialang Layanan dalam database.

Bila Anda menjalankan perintah DBCC CheckDB secara eksplisit atau melalui suatu pekerjaan, pada dasarnya melakukan semua hal di atas.

Menjalankan DBCC CheckDB Langsung di Database

Anda dapat menjalankan perintah DBCC CheckDB langsung pada database dan memeriksa hasilnya. Periksa output perintah seperti yang ditunjukkan pada gambar di bawah. Output menunjukkan detail tentang baris dalam tabel dan jumlah halaman yang digunakan oleh baris ini.

Jika Anda melihat lebih dekat, Anda akan melihat lebih banyak detail khusus untuk objek database. Sebagai contoh, pada database “VLDB”, saya dapat melihat output berikut:

“ID Objek 1179151246 (objek 'Warehouse.ColdRoomTemperatures'):Operasi tidak didukung dengan tabel yang dioptimalkan memori. Objek ini telah dilewati dan tidak akan diproses.”

Seperti yang ditunjukkan output ini, DBCC CheckDB tidak didukung dengan tabel yang dioptimalkan memori. Tabel dengan memori yang dioptimalkan pertama kali diperkenalkan di SQL Server 2014 sebagai fitur khusus Perusahaan. Namun, selama bertahun-tahun mereka telah menjadi fungsionalitas yang populer dan tersebar luas di SQL Server.

Anda juga akan melihat bahwa DBCC Check memvalidasi data broker layanan dalam database seperti yang ditunjukkan di bawah ini.

“Hasil DBCC untuk 'VLDB'.Pesan Pialang Layanan 9675, Status 1:Jenis Pesan dianalisis:14.Pesan Broker Layanan 9676, Status 1:Kontrak Layanan dianalisis:6.Pesanan Broker Layanan 9667, Status 1:Layanan dianalisis:3.Pesan Broker Layanan 9668, Status 1:Antrean Layanan dianalisis:3.Pesan Broker Layanan 9669, Status 1:Titik akhir Percakapan dianalisis:0.Pesan Broker Layanan 9674, Status 1:Grup Percakapan dianalisis:0.Pesan Broker Layanan 9670, Status 1:Pengikatan Layanan Jarak Jauh dianalisis:0.Pesan Broker Layanan 9605, Status 1:Prioritas Percakapan dianalisis:0.”

Akhirnya, setelah perintah DBCC CheckDB berhasil diselesaikan, Anda akan melihat output berikut:

Apa yang Terjadi jika Kesalahan Dilaporkan setelah Menjalankan DBCC CheckDB?

Pada contoh di atas, Anda dapat melihat bahwa DBCC CheckDB telah selesai tanpa kesalahan. Namun, jika Anda tidak seberuntung itu, Anda mungkin menemukan kesalahan konsistensi – dan saat itulah Anda perlu membuat beberapa keputusan penting. Jika Anda menemukan masalah pada database produksi, yang terbaik adalah memberi tahu pemilik bisnis atau Manajer Operasi Anda untuk meletakkan kartu Anda di atas meja. Anda dapat memberi mereka opsi untuk memulihkan database dari cadangan terakhir yang tersedia atau Anda dapat bereksperimen dengan menjalankan perintah DBCC CheckDB dengan opsi tambahan.

Pesan kesalahan DBCC mungkin terlihat seperti di bawah ini:

Kesalahan tabel:ID Objek 36, ID indeks 1, ID partisi, ID unit alokasi (ketik Data baris). Kunci rusak pada halaman (1:107), slot 6 dan 9.CHECKDB menemukan 0 kesalahan alokasi dan 1 kesalahan konsistensi dalam tabel 'sys.syk' (ID objek 36).CHECKDB menemukan 0 kesalahan alokasi dan 1 kesalahan konsistensi dalam database 'VLDB'.repair_rebuild adalah tingkat perbaikan minimum untuk kesalahan yang ditemukan oleh DBCC CHECKDB (VLDB). 

Dalam pesan kesalahan, Anda dapat melihat pesan kesalahan yang ditulis dengan hati-hati – “repair_rebuild adalah minimal tingkat perbaikan untuk kesalahan yang ditemukan oleh DBCC CHECKDB ” – menyarankan Anda untuk menjalankan DBCC CheckDB dengan opsi repair_rebuild. Lihat saja kata yang disorot – 'minimum'. Ini berarti bahwa, dengan opsi repair_rebuild, tidak ada kemungkinan kehilangan data yang nyata dan SQL Server melakukan beberapa perbaikan cepat di bawah tenda. Silakan merujuk ke perintah di bawah ini untuk menjalankan DBCC CheckDB dengan opsi repair_rebuild. Pastikan untuk menempatkan database ke mode pengguna tunggal.

Sesuai dokumentasi Microsoft, opsi REPAIR_REBUILD adalah versi yang paling tidak berbahaya karena tidak akan ada kehilangan data. Namun, jika REPAIR_REBUILD masih tidak memperbaiki kesalahan konsistensi, ada satu opsi lain – untuk mengaktifkan REPAIR_ALLOW_DATA_LOSS. Melihat namanya, kita tahu bahwa akan ada kemungkinan kehilangan data jika kita mengaktifkan opsi ini. Oleh karena itu, Microsoft memperingatkan kami untuk menggunakan ini dengan sangat hati-hati karena mungkin ada konsekuensi yang tidak terduga dalam menjalankan DBCC CheckDB dengan REPAIR_ALLOW_DATA_LOSS. Perintah DBCC CheckDB dalam hal ini akan terlihat seperti berikut:

Hal-hal yang perlu dipertimbangkan sebelum menggunakan opsi Perbaikan dengan DBCC CheckDB

  • Seberapa kritis database yang dimaksud?

  • Apakah database pada produksi atau lingkungan pengujian?

  • Berapa besar databasenya?

  • Apakah Anda memiliki strategi pemulihan yang baik jika masalah muncul?

  • Sudahkah Anda memvalidasi backup database Anda?

Berdasarkan situasi dan jawaban atas pertanyaan di atas, cobalah membuat keputusan dengan mempertimbangkan kepentingan terbaik klien.

Mengotomatiskan Tugas DBCC CheckDB di SQL Server Menggunakan Rencana Pemeliharaan Basis Data

Ya, Anda tidak perlu menjalankan semua perintah ini secara manual di server Anda. Itu sebabnya kami memiliki rencana pemeliharaan. Pastikan untuk menjadwalkan siklus pemeliharaan rutin untuk semua database Anda menggunakan rencana pemeliharaan database. Ini adalah tugas yang agak sederhana dan mudah. Di bawah “Tugas Rencana Pemeliharaan”, pilih “Periksa Tugas Integritas Basis Data”.

Ini akan menambahkan sub-tugas ke rencana pemeliharaan Anda untuk menjadwalkan pemeriksaan integritas untuk database Anda. Pastikan untuk memilih database yang diperlukan seperti yang ditunjukkan.

Pastikan untuk menjalankan semua pemeriksaan database selama waktu tidak sibuk dalam seminggu. Biasanya, masa pemeliharaan dilakukan pada akhir pekan ketika server tidak terlalu sibuk dibandingkan hari-hari lain dalam seminggu. Namun, ini akan bervariasi dari server ke server dan tergantung pada aplikasi. Pada sistem basis data kritis, peringatan umumnya ditampilkan setiap kali ada DBCC CheckDB atau pemeriksaan integritas yang terlewat. Dengan cara ini, DBA dapat secara proaktif memeriksa dan memastikan mereka menyelesaikan pemeriksaan integritas untuk menghindari kejutan di kemudian hari.

Mengotomatiskan Tugas DBCC CheckDB di SQL Server Menggunakan Skrip Khusus atau Skrip Populer Lainnya

Rencana pemeliharaan SQL Server tidak perlu digunakan sepanjang waktu untuk melakukan tugas pemeliharaan pada instans SQL Server Anda. Ada skrip khusus lain yang tersedia yang dapat Anda gunakan. Salah satu alat perawatan gratis yang populer adalah solusi perawatan Ola Hallengren. Anda dapat menginstal seluruh solusi pemeliharaan yang mencakup tugas untuk pencadangan, pengoptimalan, dll., atau Anda hanya dapat mengunduh skrip yang relevan yang terkait dengan pemeriksaan integritas. Dalam demo ini, kami akan mencoba menginstal skrip khusus untuk pemeriksaan integritas basis data.

Klik opsi DatabaseIntegrityCheck.sql seperti yang ditunjukkan untuk mengunduh prosedur tersimpan yang memeriksa integritas database. Setelah menjalankan prosedur tersimpan ini di database master, saya menemukan pesan peringatan ini:

“Modul 'DatabaseIntegrityCheck' bergantung pada objek yang hilang 'dbo.CommandExecute'. Modul akan tetap dibuat; namun, itu tidak dapat berjalan dengan sukses sampai objek itu ada.”

Jika Anda menjalankan prosedur tersimpan untuk melakukan pemeriksaan integritas, Anda akan mendapatkan kesalahan berikut:

Seperti yang dinyatakan oleh kesalahan, Anda dapat mengunduh kode yang hilang di sini. Setelah ini selesai, Anda dapat mulai mencoba pemeriksaan integritas database.

Anda dapat menyesuaikan berbagai opsi menggunakan parameter perintah DBCC tambahan. Anda dapat menemukan lebih banyak detail dan contohnya di sini.

Namun, dalam demo ini, kami akan memeriksa beberapa contoh untuk melihat betapa mudah dan ramah pengguna skrip ini sebenarnya.

Untuk menjalankan DBCC CheckDB di semua database pengguna , Anda harus menjalankan yang berikut:

JALANKAN dbo.DatabaseIntegrityCheck@Databases ='USER_DATABASES',@CheckCommands ='CHECKDB'

Anda dapat melihat perintah yang dijalankan dan status hasil yang mengonfirmasi bahwa DBCC CheckDB berhasil diselesaikan.

Untuk menjalankan DBCC Periksa hanya untuk database sistem, jalankan perintah ini:

JALANKAN dbo.DatabaseIntegrityCheck@Databases ='SYSTEM_DATABASES',@CheckCommands ='CHECKDB'

Pada tangkapan layar, Anda dapat melihat bahwa DBCC CheckDB berhasil diselesaikan untuk database sistem.

Untuk menjalankan DBCC CheckDB hanya untuk database tertentu, jalankan perintah berikut:

JALANKAN dbo.DatabaseIntegrityCheck@Databases ='VLDB', -- Nama DB spesifik Anda@CheckCommands ='CHECKDB'

Pada contoh di atas, Anda melihat beberapa cara kita dapat menggunakan parameter. Namun, ada sejumlah filter lain yang dapat Anda pilih berdasarkan preferensi Anda. Juga, seperti yang telah disebutkan, Anda dapat merujuk ke tautan . ini untuk pemahaman lebih lanjut tentang skrip Ola Hallengren. Untuk menegaskan kembali, saya menggunakan skrip Ola Hallengren di server yang saya kelola dan sangat direkomendasikan dan dikenali dalam komunitas SQL Server. Anda dapat menjadwalkan prosedur tersimpan berdasarkan parameter pilihan Anda dan menjalankannya adalah pekerjaan SQL selama jam sibuk. Dengan cara ini, Anda tidak perlu menjalankan skrip ini secara manual, sehingga Anda dapat fokus pada tugas penting lainnya.

Kesimpulan

  • Dari artikel ini, Anda telah mempelajari tentang DBCC CheckDB dan cara menggunakannya
  • Anda juga memahami pentingnya menjalankan DBCC CheckDB secara teratur di semua database penting Anda
  • Anda juga belajar tentang pentingnya memiliki strategi cadangan yang teruji – disarankan untuk memulihkan database Anda menggunakan cadangan yang baik daripada menyelesaikan kesalahan konsistensi apa pun menggunakan opsi Perbaikan DBCC
  • Anda juga melihat betapa mudahnya mengonfigurasi dan mengotomatisasi skrip baik menggunakan rencana pemeliharaan SQL Server atau skrip yang disesuaikan, mis., yang dari Ola Hallengren
  • Anda juga mempelajari risiko tidak menjadwalkan DBCC CheckDB pada infrastruktur yang didukung
  • Anda juga mengetahui bahwa, tidak peduli server apa yang Anda gunakan atau infrastruktur apa yang Anda jalankan, tidak akan ada database yang tidak memerlukan pemeliharaan
  • Terakhir, pastikan untuk menjaga database Anda tetap sehat dan, bagaimanapun juga, bersiaplah untuk hari-hari LIBUR yang mungkin tidak berada di bawah kendali Anda

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jangan hanya membabi buta membuat indeks yang hilang itu!

  2. Pola Desain UI yang Tidak Berskala

  3. Cara Membuat Tabel Database dengan SQL

  4. SQL Setara (=) Operator untuk Pemula

  5. Membuat Rencana Pemeliharaan Basis Data