Kongsi Sekarang:
Jadual Kandungan menyembunyikan

DBCC CHECKDB ialah SQL Serveralat integriti pangkalan data utama. Ketahui cara menggunakannya dengan contoh, membetulkan rasuah dan mengoptimumkan prestasi.

1. Kepentingan SQL Server Kesihatan Pangkalan Data

1.1 Apakah Rasuah Pangkalan Data Costs Perniagaan

Hari ini, most perniagaan menyimpan data kritikal mereka dalam pangkalan data. Apabila rasuah pangkalan data berlaku, akibatnya adalah malapetaka:

  • Kerugian kewangan purata $2.3 juta setiap tahun disebabkan kehilangan data, dengan kegagalan perkakasan dan rasuah menjadi punca utama (EMC Corporation)
  • Kadar penutupan perniagaan menunjukkan bahawa 50% perniagaan kecil yang mengalami kehilangan data akibat kegagalan perkakasan akan gulung tikar dalam tempoh dua tahun, manakala 94% perniagaan yang mengalami kehilangan data yang teruk tidak dapat bertahan sama sekali
  • Kekerapan rasuah data menjejaskan 20% aplikasi kritikal misi setiap tahun, menyebabkan gangguan kesinambungan perniagaan (penyelidikan Gartner)
  • Rasuah berkaitan perkakasan menyumbang 67% daripada semua insiden kehilangan data melalui ranap cakera keras dan kegagalan sistem, dengan 40% kehilangan data secara langsung dikaitkan dengan kerosakan perkakasan
  • Rasuah perisian costs daripada beribu-ribu hingga berjuta-juta dolar bergantung pada keterukan dan skop, dengan 82% perniagaan mengalami gangguan yang tidak dirancang di mana rasuah merupakan punca utama

1.2 Mengapa Pemeriksaan Kesihatan Berkala Adalah Kritikal

Orang ramai memerlukan pemeriksaan kesihatan yang kerap untuk mengesan penyakit yang berpotensi lebih awal. Begitu juga, pangkalan data juga memerlukan pemeriksaan kesihatan yang kerap:

  1. Kesan potensi rasuah lebih awal dan atasinya dengan segera, mengelakkan masalah daripada menjadi teruk dan berleluasa, yang boleh membawa kepada akibat bencana kepada perniagaan.
  2. Memastikan pangkalan data beroperasi pada prestasi optimum.
  3. Cost pemeriksaan kesihatan pangkalan data proaktif adalah jauh lebih rendah daripada pemulihan data reaktif selepas bencana pangkalan data berlaku.

1.3 Pengenalan kepada Perintah Integriti Pangkalan Data

SQL Server menyediakan beberapa arahan terbina dalam untuk mengekalkan kesihatan pangkalan data, dengan DBCC CHECKDB berkhidmat sebagai most alat semakan integriti komprehensif tersedia. Arahan ini berfungsi bersama-sama untuk mengesahkan pelbagai aspek struktur pangkalan data anda, daripada jadual individu kepada ketekalan pangkalan data keseluruhan, membentuk strategi penyelenggaraan lengkap yang memastikan data anda selamat dan boleh diakses.

2. Apakah itu DBCC CHECKDB

DBCC CHECKDB is SQL Serveralat utama untuk mengesahkan integriti pangkalan data dan mengenal pasti isu rasuah.

  • Ia adalah pernyataan T-SQL, bukan alat GUI.
  • Anda boleh melaksanakannya melalui kaedah biasa, seperti SQL Server Studio Pengurusan(SSMS), SQL Server Ejen, SQLCMD, dsb.

2.1 Perkara Yang Sebenarnya CHECKDB Semak dalam Pangkalan Data Anda

Apabila anda menjalankan DBCC CHECKDB, arahan melaksanakan berbilang lapisan pengesahan merentas struktur pangkalan data anda:

  • Pengesahan jumlah semak halaman untuk mengesan rasuah fizikal dan isu berkaitan perkakasan
  • Pengesahan ketekalan indeks untuk memastikan pengambilan data dan prestasi pertanyaan yang betul
  • Semakan struktur peruntukan untuk mengesahkan penggunaan ruang yang tepat dan peruntukan halaman
  • Peperiksaan integriti rujukan antara jadual berkaitan dan hubungan utama asing
  • Pengesahan ketekalan jadual sistem untuk memastikan SQL ServerMetadata dalaman kekal boleh dipercayai
  • Pengesahan pautan halaman data untuk mengesahkan integriti rantaian halaman yang betul
  • Ketekalan skema pangkalan data untuk mengesahkan definisi dan kebergantungan objek

Pemeriksaan menyeluruh ini meliputi kedua-dua data pengguna dan struktur sistem, memberikan keterlihatan lengkap ke dalam status kesihatan pangkalan data anda.

3. Menjalankan DBCC CHECKDB: Langkah demi Langkah

Prasyarat 3.1

Di bawah ialah senarai semak sebelum melaksanakan sebarang operasi DBCC CHECKDB:

  • Lengkapkan sandaran pangkalan data – Buat sandaran penuh sebelum menjalankan pemeriksaan integriti sebagai jaring keselamatan anda jika rasuah ditemui atau operasi pembaikan menjadi perlu.
  • Keizinan yang betul – Anda memerlukan kebenaran sysadmin atau db_owner untuk melaksanakan arahan DBCC CHECKDB
  • Sumber sistem yang mencukupi:
    • Memori: 25% daripada saiz pangkalan data
    • Ruang Tempdb: 10-15% daripada saiz pangkalan data
    • CPU: ketersediaan 50-70% semasa penyelenggaraan
    • I/O: Jangkakan operasi bacaan berat
  • Kebolehcapaian pangkalan data – Sahkan bahawa pangkalan data anda boleh diakses dan bukan dalam keadaan terhad, kerana CHECKDB memerlukan akses baca ke semua halaman pangkalan data

3.2 Perintah Asas

Most arahan asas DBCC CHECKDB termasuk tiga variasi biasa:

(1) Semak pangkalan data semasa (tiada parameter):

DBCC CHECKDB

(2) Semak pangkalan data mengikut nama:

DBCC CHECKDB ('YourDatabaseName')

(3) Semak pangkalan data mengikut ID:

DBCC CHECKDB(5)  -- Replace 5 with your database ID

Perintah asas ini melakukan pemeriksaan integriti lengkap pangkalan data yang ditentukan, memeriksa semua jadual, indeks dan struktur sistem. Untuk pangkalan data dengan nama standard yang tidak mengandungi ruang, anda boleh meninggalkan petikan. Perintah akan dijalankan sehingga selesai, memaparkan mesej kemajuan dan hasil akhir. Sintaks asas ini berfungsi dengan sempurna untuk pangkalan data yang lebih kecil atau apabila anda mempunyai masa penyelenggaraan yang mencukupi.

Di bawah ialah tangkapan skrin menjalankan DBCC CHECKDB masuk SQL Server Studio Pengurusan (SSMS):

Tangkapan skrin menjalankan DBCC CHECKDB masuk SQL Server Studio Pengurusan (SSMS), termasuk hasil output.

3.3 Pilihan Lengkap

Berikut ialah pilihan lengkap untuk DBCC CHECKDB:

kategori Lebih Baik Penerangan Produk Contoh DBCC CHECKDB
Pilihan Pembaikan REPAIR_REBUILD Pembaikan tanpa kehilangan data (cth, bina semula indeks) DBCC CHECKDB ('MyDB', REPAIR_REBUILD)
REPAIR_FAST Tiada pembaikan. Keserasian ke belakang sahaja DBCC CHECKDB ('MyDB', REPAIR_FAST)
REPAIR_ALLOW_DATA_LOSS Membaiki semua ralat (mungkin menyebabkan kehilangan data) DBCC CHECKDB ('CorruptDB', REPAIR_ALLOW_DATA_LOSS)
Kawalan Skop NOINDEX Melangkau semakan indeks tidak berkelompok DBCC CHECKDB ('LargeDB', NOINDEX)
PHYSICAL_ONLY Semak hanya integriti storan fizikal (halaman/rekod) DBCC CHECKDB ('ProdDB', PHYSICAL_ONLY)
DATA_PURITY Menyemak ralat nilai lajur logik (cth, tarikh tidak sah) DBCC CHECKDB ('OldDB', DATA_PURITY)
EXTENDED_LOGICAL_CHECKS Pemeriksaan logik yang mendalam (pandangan diindeks, indeks XML/spatial) DBCC CHECKDB ('ComplexDB', EXTENDED_LOGICAL_CHECKS)
Kawalan Keluaran ALL_ERRORMSGS Menunjukkan semua ralat (lalai: 200 setiap objek) DBCC CHECKDB ('MyDB', ALL_ERRORMSGS)
NO_INFOMSGS Menyembunyikan mesej maklumat DBCC CHECKDB ('MyDB', NO_INFOMSGS)
prestasi TABLOCK Menggunakan kunci meja (mengurangkan penggunaan TempDB tetapi menyekat menulis) DBCC CHECKDB ('BigDB', TABLOCK)
MAXDOP = number Mengatasi tetapan selari DBCC CHECKDB ('MyDB', MAXDOP = 2)
utiliti ESTIMATEONLY Anggarkan ruang TempDB diperlukan. (tiada cek sebenar) DBCC CHECKDB ('MyDB', ESTIMATEONLY)

4. Memahami Keputusan Anda

DBCC CHECKDB akan menghasilkan keputusan yang berbeza berdasarkan sama ada pelaksanaannya berjaya atau tidak. Mari kita jelaskan secara terperinci.

4.1 Perlaksanaan CHECKDB Berjaya

Jika pelaksanaan DBCC CHECKDB berjaya diselesaikan, ia akan melaporkan jenis keputusan yang berbeza bergantung pada status kesihatan pangkalan data anda.

4.1.1 Tiada Isu Ditemui

Jika DBCC CHECKDB tidak menemui sebarang isu, anda akan melihat output yang serupa dengan:

CHECKDB found 0 allocation errors and 0 consistency errors in database 'YourDatabase'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Keputusan ini menunjukkan pangkalan data anda mengekalkan integriti sempurna merentas semua struktur yang diperiksa.

4.1.2 Mendapati Kesilapan Rasuah

Apabila DBCC CHECKDB mengesan ralat rasuah, ia akan melaporkan mesej ralat dengan struktur berikut:
Penjelasan terperinci tentang struktur mesej ralat DBCC CHECKDB, termasuk maksud setiap bahagian.Panduan Tahap Keterukan:

  • Tingkat 16-19: Ralat yang boleh dibetulkan pengguna, selalunya rasuah kecil
  • Tingkat 20-24: Ralat sistem, rasuah serius yang memerlukan perhatian segera
  • Tahap 25: Ralat maut, pangkalan data mungkin tidak dapat diakses

Kesilapan biasa termasuk:

  • Kegagalan jumlah semak halaman (mesej 824)
  • Ralat peruntukan (mesej 8928)
  • Masalah ketekalan indeks (mesej 8964)

Memahami struktur mesej membantu mengutamakan tindakan tindak balas dan menentukan strategi pemulihan yang sesuai.

4.1.3 Mesej Maklumat dan Amaran Biasa

Tidak semua output DBCC CHECKDB menunjukkan masalah yang serius. Ia juga mungkin mengeluarkan beberapa mesej maklumat dan amaran, termasuk:

  • Pernyataan pembaikan – Mesej yang mencadangkan arahan pembaikan untuk membetulkan isu kecil
  • Amaran peruntukan – Amaran tentang peruntukan ruang yang tidak menjejaskan akses data
  • Cadangan prestasi – Cadangan untuk penyelenggaraan dan pengoptimuman indeks
  • Notis maklumat – Mesej status am yang tidak memerlukan tindakan segera

Mesej ini memberikan panduan penyelenggaraan yang berharga sambil membezakan antara rasuah kritikal yang memerlukan tindakan segera dan isu kecil yang boleh ditangani semasa tingkap penyelenggaraan biasa.

Contoh mesej amaran:

DBCC results for 'InventoryDatabase'.
Msg 2570, Level 16, State 3, Line 1
Page (2:8452), slot 17 in object ID 485577333, index ID 0, partition ID 72057594038845456, 
alloc unit ID 72057594042515968 (type "In-row data").
Column "ProductPrice" value is out of range for data type "decimal". Update column to a legal value.
There are 45892 rows in 1247 pages for object "Products".
CHECKDB found 0 allocation errors and 1 consistency errors in table 'Products' (object ID 485577333).
CHECKDB found 0 allocation errors and 1 consistency errors in database 'InventoryDatabase'.

4.2 Perlaksanaan CHECKDB Dibatalkan

Jika CHECKDB membatalkan semasa pelaksanaannya atas pelbagai sebab, ia akan melaporkan mesej ralat dan menambah log ralat dengan kod keadaan di bawah:

Negeri Penerangan Produk
0 Nombor ralat 8930 telah dibangkitkan. Ini menunjukkan rasuah dalam metadata yang menamatkan arahan DBCC.
1 Nombor ralat 8967 telah dibangkitkan. Terdapat ralat dalaman DBCC.
2 Kegagalan berlaku semasa pembaikan pangkalan data mod kecemasan.
3 Ini menunjukkan rasuah dalam metadata yang menamatkan arahan DBCC.
4 Tegas atau pelanggaran akses telah dikesan.
5 Ralat tidak diketahui berlaku yang menamatkan perintah DBCC.

Contoh mesej ralat:

Failed:(-1073548784) Executing the query "DBCC CHECKDB('InventoryDB') WITH NO_INFOMSGS" failed with the following error: "There is insufficient system memory to run this query.Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

or

2024-11-18 09:52:41.38 spid35 I/O error (bad page ID) detected during read at offset 0x00000024886000 in file 'C:\Data\MSSQL\DATA\SalesDatabase.mdf'.

Contoh log ralat:

11/15/2024 09:23:17,spid52,Unknown,DBCC CHECKDB (SalesDatabase) WITH all_errormsgs no_infomsgs executed by CORP\dbadmin terminated abnormally due to error state 3. Elapsed time: 1 hours 32 minutes 18 seconds.

Dalam kes sedemikian, anda boleh mencuba pilihan lanjutan alternatif seperti DataNumen SQL Recovery untuk membetulkan rasuah dalam pangkalan data anda.

5. Memperbaiki Kesilapan Rasuah

5.1 Sandaran dan Pemulihan: Pembetulan Paling Selamat

Apabila DBCC CHECKDB mengenal pasti ralat rasuah, memulihkan daripada sandaran bersih mewakili yang paling selamat dan most penyelesaian yang boleh dipercayai. Pendekatan ini menjamin integriti data sambil menghapuskan punca rasuah yang mendasari. Sebelum memulihkan, sahkan integriti sandaran menggunakan PULIHKAN SAHAJA arahan, dan pertimbangkan pilihan pemulihan titik dalam masa untuk meminimumkan kehilangan data. Dokumentasikan butiran rasuah untuk analisis punca, kerana isu perkakasan atau pepijat perisian mungkin memerlukan perhatian tambahan untuk mengelakkan berulang.

5.2 Penyelesaian Rasuah Peringkat Halaman

Untuk rasuah halaman terpencil yang menjejaskan bahagian data kecil, SQL Server Edisi Perusahaan menawarkan keupayaan memulihkan halaman yang membaiki halaman tertentu yang rosak tanpa pemulihan pangkalan data penuh. Teknik lanjutan ini memerlukan model pemulihan penuh dan sandaran log semasa.

Proses pemulihan halaman langkah demi langkah:

  1. Kenal pasti halaman yang rosak daripada mesej ralat CHECKDB (cth, halaman 1:256)
  2. Ambil sandaran log semasa untuk menangkap transaksi terkini:
BACKUP LOG YourDatabase TO DISK = 'C:\Backups\YourDB_Log.trn'
  1. Pulihkan halaman yang rosak daripada most sandaran penuh baru-baru ini:
RESTORE DATABASE YourDatabase PAGE = '1:256' 
FROM DISK = 'C:\Backups\YourDB_Full.bak'
  1. Gunakan sandaran pembezaan (jika ada):
RESTORE DATABASE YourDatabase PAGE = '1:256' 
FROM DISK = 'C:\Backups\YourDB_Diff.bak'
  1. Gunakan semua sandaran log mengikut urutan, termasuk yang baru dibuat:
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log1.trn'
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log2.trn'
-- Continue for all log backups in order
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log.trn'
  1. Ambil sandaran log terakhir dan pulihkan untuk membawa halaman semasa:
BACKUP LOG YourDatabase TO DISK = 'C:\Backups\YourDB_Final.trn'
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Final.trn'

Alternatif untuk data tidak kritikal: Jika rasuah menjejaskan data tidak kritikal, anda mungkin mengeksport baris yang tidak terjejas ke jadual baharu sebelum membina semula struktur yang rosak:

-- Export good data to a new table
SELECT * INTO YourTable_Backup 
FROM YourTable 
WHERE NOT EXISTS (SELECT 1 FROM corrupt_page_list WHERE page_id = target_page)

-- Drop and recreate the corrupted table
DROP TABLE YourTable
-- Recreate table structure and reload clean data

5.3 Pembetulan Pantas Rasuah Indeks

Rasuah indeks sering bertindak balas dengan baik untuk membina semula operasi yang mencipta semula struktur indeks tanpa menjejaskan data jadual asas:

ALTER INDEX ALL ON YourTable REBUILD

Pendekatan ini berfungsi dengan baik terutamanya untuk rasuah indeks bukan berkelompok, kerana membina semula menjana semula halaman indeks daripada data jadual sumber, menghapuskan rasuah dengan berkesan sambil mengekalkan semua maklumat asal.

6. Gunakan REPAIR_REBUILD dan REPAIR_ALLOW_DATA_LOSS

Jika kaedah sebelumnya semuanya gagal atau tidak boleh dilaksanakan, anda boleh menggunakan pilihan REPAIR_REBUILD dan REPAIR_ALLOW_DATA_LOSS untuk membaiki pangkalan data.

6.1 REPAIR_REBUILD (Pilihan Lebih Selamat):

  • Gunakan untuk: Rasuah indeks dan kesilapan peruntukan kecil
  • Keselamatan data: Percubaan membetulkan rasuah tanpa pemadaman data
  • Tahap risiko: Rendah – tiada kehilangan data dijangka
  • Senario biasa: Rasuah indeks tidak berkelompok, isu metadata kecil
  • Contoh perintah: DBCC CHECKDB('YourDB', REPAIR_REBUILD)

6.2 MEMBAIKI_BENARKAN_DATA_KERUGIAN (Last Resort):

  • Gunakan untuk: Rasuah teruk apabila sandaran tidak tersedia
  • Keselamatan data: Boleh memadam data yang rosak untuk memulihkan fungsi pangkalan data
  • Tahap risiko: Tinggi - kehilangan data kekal mungkin
  • Senario biasa: Rasuah halaman, kerosakan jadual sistem, ralat rantaian peruntukan
  • Contoh perintah: DBCC CHECKDB('YourDB', REPAIR_ALLOW_DATA_LOSS)

6.3 Amalan Terbaik untuk Pilihan Ini:

  • Sentiasa menguji operasi pembaikan pada salinan pangkalan data apabila boleh
  • Sentiasa membuat sandaran sebelum menjalankan pilihan ini
  • Dokumen semua perubahan untuk tujuan pematuhan dan penyelesaian masalah
  • Tetapkan pangkalan data kepada mod pengguna tunggal sebelum menjalankan operasi pembaikan

Biasalah, kita patut cuba REPAIR_REBUILD pilihan dahulu. Jika gagal, maka cubalah PEMBAIKAN_ALLOW_DATA_LOSS pilihan.

6.4 REPAIR_ALLOW_DATA_LOSS Results

6.4.1 Kejayaan Pembaikan dengan Kehilangan Data

Kadang-kadang PEMBAIKAN_ALLOW_DATA_LOSS pilihan akan berjaya, tetapi beberapa data adalah lost selepas pembaikan.

Di bawah ialah beberapa contoh mesej:

CHECKDB found 0 allocation errors and 103 consistency errors in database ‘SalesDatabase’.
CHECKDB fixed 0 allocation errors and 103 consistency errors in database ‘SalesDatabase’.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Msg 8909, Level 16, State 1, Line 8
Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 45035996309880832 (type Unknown), page ID (1:553) contains an incorrect page ID in its page header. The PageId in the page header = (0:0).
The error has been repaired.
Msg 8939, Level 16, State 98, Line 8
Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 111464090777419776 (type Unknown), page (0:0). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 2057 and -1.
Could not repair this error.

Ini kerana DBCC CHECKDB membetulkan pangkalan data dengan meninggalkan beberapa rekod yang rosak, tetapi sebenarnya, most daripadanya masih boleh dipulihkan melalui DataNumen SQL Recovery.

Contoh fail:

SQL Server versi Fail MDF rosak Fail MDF dibetulkan oleh DataNumen SQL Recovery
SQL Server 2014 Ralat10_1.mdf (Ms 8909 diikuti oleh Msg 8939) (600 rekod lost dengan REPAIR_ALLOW_DATA_LOSS) Ralat10_1_fixed.mdf (Tiada rekod lost)
SQL Server 2014 Ralat10_2.mdf (Msg 8909 diikuti dengan Msg 8939) (6000 rekod(50%) lost dengan REPAIR_ALLOW_DATA_LOSS) Ralat10_2_fixed.mdf (Hanya 100 rekod lost)
SQL Server 2014 Error7.mdf (100 rekod lost dengan REPAIR_ALLOW_DATA_LOSS) Ralat7_fixed.mdf (Hanya satu rekod lost)

6.4.2 Pembaikan Gagal – Pertimbangkan Penyelesaian Profesional

If PEMBAIKAN_ALLOW_DATA_LOSS gagal, ia akan mengeluarkan satu atau berbilang mesej ralat.

Di bawah adalah beberapa contoh:

DBCC results for ‘MyDatabase’.
CHECKDB found 0 allocation errors and 0 consistency errors in database ‘MyDatabase’.
Msg 824, Level 24, State 2, Line 8
SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0xea8a9a2f; actual: 0x37adbff8). It occurred during a read of page (1:28) in database ID 39 at offset 0x00000000038000 in file ‘MyDatabase.mdf’. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
Msg 7909, Level 20, State 1, Line 8
The emergency-mode repair failed.You must restore from backup.
Msg 8992, Level 16, State 1, Line 8
Check Catalog Msg 3852, State 1: Row (object_id=69) in sys.objects (type=S ) does not have a matching row (object_id=69,column_id=1) in sys.columns.
Msg 8945, Level 16, State 1, Line 8
Table error: Object ID 41, index ID 1 will be rebuilt.
Could not repair this error.
Msg 2510, Level 16, State 17, Line 8
DBCC checkdb error: This system table index cannot be recreated.
Repair: The Nonclustered index successfully rebuilt for the object “sysidxstats” in database “MyDatabase”.
Msg 8921, Level 16, State 1, Line 8
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Msg 8998, Level 16, State 2, Line 8
Page errors on the GAM, SGAM, or PFS pages prevent allocation integrity checks in database ID 39 pages from (1:0) to (1:8087). See other errors for cause.
CHECKDB found 1 allocation errors and 0 consistency errors not associated with any single object.
Msg 2575, Level 16, State 1, Line 8
The Index Allocation Map (IAM) page (1:157) is pointed to by the next pointer of IAM page (0:0) in object ID 3, index ID 1, partition ID 196608, alloc unit ID 196608 (type In-row data), but it was not detected in the scan.
Could not repair this error.
CHECKDB found 1 allocation errors and 0 consistency errors in table ‘sys.sysrscols’ (object ID 3).
Msg 8948, Level 16, State 3, Line 8
Database error: Page (1:295) is marked with the wrong type in PFS page (1:1). PFS status 0x70 expected 0x60.
The error has been repaired.
Msg 8905, Level 16, State 1, Line 8
Extent (1:296) in database ID 39 is marked allocated in the GAM, but no SGAM or IAM has allocated it.
The error has been repaired.
Msg 5028, Level 16, State 4, Line 4
The system could not activate enough of the database to rebuild the log.
Msg 5125, Level 24, State 2, Line 2
File ‘C:Program FilesMicrosoft SQL ServerMSSQL12.SQL2014MSSQLDATASalesDatabase.mdf’ appears to have been truncated by the operating system. Expected size is 5120 KB but actual size is 5112 KB.
Msg 3414, Level 21, State 1, Line 2
An error occurred during recovery, preventing the database ‘SalesDatabase’ (39:0) from restarting. Diagnose the recovery errors and fix them, or restore from a known good backup. If errors are not corrected or expected, contact Technical Support.
Msg 3313, Level 21, State 1, Line 2
During redoing of a logged operation in database ‘SalesDatabase’, an error occurred at log record ID (135:752:2). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.

Dalam senario ini, anda perlu menggunakan penyelesaian profesional seperti DataNumen SQL Recovery untuk membetulkan pangkalan data anda.

Contoh Fail

SQL Server versi Fail MDF rosak Fail MDF dibetulkan oleh DataNumen SQL Recovery
SQL Server 2014 Ralat1_3.mdf (Single Ms 824) Ralat1_3_fixed.mdf
SQL Server 2014 Ralat1_1.mdf (Ralat Msg 824 Berterusan) Ralat1_1_fixed.mdf
SQL Server 2014 Ralat1_2.mdf ((Msg 824 diikuti dengan Msg 7909) Ralat1_2_fixed.mdf
SQL Server 2014 Ralat4_1.mdf (Ms 8992 diikuti dengan Msg 3852) Ralat4_1_fixed.mdf
SQL Server 2014 Ralat4_2.mdf (Ms 8992 diikuti dengan Msg 3852) Ralat4_2_fixed.mdf
SQL Server 2014 Ralat5.mdf (Ms 8945) Ralat5_fixed.mdf
SQL Server 2014 Ralat6.mdf (Ms 2510) Ralat6_fixed.mdf
SQL Server 2014 Ralat2.mdf (Ms 2575) Ralat2_fixed.mdf
SQL Server 2014 Ralat11.mdf (Ms 8905) Ralat11_fixed.mdf
SQL Server 2014 Ralat3.mdf (Ms 5028) Ralat3_fixed.mdf
SQL Server 2014 Error8.mdf (Ms 5125) Error8_fixed.mdf
SQL Server 2014 Ralat9.mdf (Ms 3313) Ralat9_fixed.mdf

7. Amalan Terbaik

7.1 Menjadualkan Operasi CHECKDB Berkala

Laksanakan pelaksanaan DBCC CHECKDB mingguan untuk pangkalan data pengeluaran kritikal, dengan semakan harian untuk sistem transaksi tinggi. Jadualkan operasi semasa tempoh penggunaan rendah untuk meminimumkan kesan prestasi, dan pertimbangkan untuk berputar antara semakan penuh dan pilihan PHYSICAL_ONLY berdasarkan saiz pangkalan data dan tetingkap penyelenggaraan. Penjadualan automatik melalui SQL Server Ejen memastikan pelaksanaan yang konsisten sambil menyediakan pemantauan terpusat dan keupayaan amaran.

7.2 Pengurusan Kesan Prestasi

Operasi DBCC CHECKDB menggunakan sumber sistem yang besar, yang berpotensi menjejaskan aktiviti pengguna serentak. Pantau penggunaan CPU, penggunaan memori dan I/O cakera semasa pemeriksaan untuk memahami corak kesan prestasi. Pertimbangkan untuk menggunakan pilihan NOINDEX untuk pemeriksaan rutin, menempah pengesahan penuh untuk tingkap penyelenggaraan bulanan. Laksanakan sambungan tamat masa pertanyaan dan strategi komunikasi pengguna untuk mengurus jangkaan semasa tempoh semakan integriti.

7.3 Perancangan Tingkap Penyelenggaraan

Selaraskan penjadualan DBCC CHECKDB dengan aktiviti penyelenggaraan lain seperti operasi sandaran, pembinaan semula indeks dan kemas kini statistik. Elakkan operasi intensif sumber bertindih yang boleh menyebabkan kemerosotan prestasi atau isu tamat masa. Rancang tetingkap penyelenggaraan berdasarkan unjuran pertumbuhan saiz pangkalan data, memastikan masa yang mencukupi untuk pengesahan integriti lengkap apabila volum data meningkat.

7.4 Pemantauan dan Makluman Automatik

Konfigurasi SQL Server Makluman ejen untuk memberitahu pentadbir dengan segera apabila DBCC CHECKDB mengenal pasti rasuah. Laksanakan penyelesaian penghuraian log yang mengekstrak dan mengkategorikan hasil semakan integriti, membolehkan analisis aliran dan pengenalpastian masalah proaktif. Buat prosedur peningkatan yang mentakrifkan jangka masa tindak balas dan kakitangan yang bertanggungjawab untuk tahap keterukan rasuah yang berbeza.

8. JADUAL SEMAK DBCC: Alternatif Ringan

8.1 Bila Perlu Menggunakan CHECKTABLE Daripada CHECKDB

DBCC CHECKTABLE menyediakan semakan integriti terfokus untuk jadual individu, menjadikannya sesuai untuk tarmendapat penyelesaian masalah dan penyelenggaraan objek pangkalan data tertentu. Gunakan CHECKTABLE apabila menyiasat isu prestasi dengan jadual tertentu, mengesahkan jadual perniagaan kritikal antara semakan pangkalan data penuh atau apabila kekangan masa menghalang pengesahan pangkalan data yang lengkap. Pendekatan ini terbukti sangat berharga dalam pangkalan data yang besar di mana operasi CHECKDB penuh melebihi tetingkap penyelenggaraan yang tersedia.

8.2 JADUAL SEMAK DBCC Sintaks dan Contoh

Perintah CHECKTABLE asas tarmendapat jadual tertentu:

DBCC CHECKTABLE('YourTable')

Seperti CHECKDB, CHECKTABLE menyokong pelbagai pilihan termasuk NOINDEX untuk pengoptimuman prestasi dan parameter pembaikan untuk penyelesaian rasuah. Anda juga boleh menentukan nama skema untuk pengenalan jadual yang tepat:

DBCC CHECKTABLE('SchemaName.TableName', NOINDEX)

ini tarpendekatan geted membolehkan pengesahan integriti berbutir sambil mengekalkan prestasi sistem semasa waktu perniagaan.

8.3 Faedah Prestasi untuk Pangkalan Data Besar

Operasi CHECKTABLE selesai dengan ketara lebih pantas daripada semakan pangkalan data penuh, membolehkan pengesahan integriti yang lebih kerap bagi jadual kritikal. Pendekatan ini membolehkan pengesahan harian jadual perniagaan penting sambil menempah operasi CHECKDB yang komprehensif untuk jadual mingguan atau bulanan. Penggunaan sumber yang dikurangkan menjadikan CHECKTABLE sesuai untuk pelaksanaan persekitaran pengeluaran dengan impak pengguna yang minimum.

9. Apabila CHECKDB Gagal

DBCC CHECKDB akan gagal dalam pelbagai senario, termasuk:

Dalam senario ini, kami memerlukan alat yang lebih profesional untuk membantu kami membetulkan kerosakan dalam pangkalan data.

9.1 Pengenalan kepada DataNumen SQL Recovery

DataNumen SQL Recovery menyediakan keupayaan yang lebih maju:

  • Kadar pemulihan terbaik dalam industri.
  • Pulihkan fail pangkalan data yang rosak teruk.
  • Pulihkan semua objek pangkalan data, termasuk jadual, indeks, pandangan, pencetus, peraturan dan lalai.
  • Pulihkan prosedur tersimpan, fungsi skalar, fungsi nilai jadual sebaris dan fungsi nilai jadual berbilang penyata.
  • Pulihkan rekod yang dipadamkan secara kekal.
  • Nyahsulit objek yang disulitkan dalam SQL Server pangkalan data.
  • Membaiki fail MDF dalam kelompok.
  • Pilihan pembaikan yang komprehensif.
  • Pembalakan dan pelaporan lanjutan.
  • Sokongan untuk semua SQL Server versi.
  • Ketersediaan sokongan teknikal
  • Kemas kini dan penambahbaikan yang kerap

9.2 Perbandingan Kadar Kejayaan

Kadar kejayaan pemulihan berbeza dengan ketara:

  • DBCC CHECKDB & CHECKTABLE: 1.27% kadar pemulihan purata
  • DataNumen: 92.6% kadar pemulihan

Di bawah ialah perbandingan kompetitif yang lengkap:

Carta perbandingan kadar pemulihan antara DataNumen SQL Recovery dan pesaing lain, termasuk DBCC CHECKDB & CHECKTABLE.

9.3 Pemulihan daripada Rasuah Teruk

Keupayaan lanjutan untuk kes yang teruk:

  • Pemulihan daripada storan yang rosak secara fizikal
  • Pemulihan daripada pemacu berformat atau sistem ranap
  • Pulih daripada imej cakera, fail sandaran, fail cakera mesin maya, temporarfail y, dsb.

9.4 Bila Perlu Pertimbangkan Penyelesaian Profesional

  • Tiada ketersediaan sandaran terkini
  • DBCC CHECKDB gagal
  • Senario rasuah yang teruk
  • Berurusan dengan data perniagaan kritikal
  • Apabila masa kritikal
  • Apabila pemulihan maksimum adalah penting

10. Soalan Lazim

10.1 Soalan Penggunaan Asas

S: Berapa kerap saya perlu menjalankan DBCC CHECKDB?

A: Untuk pangkalan data pengeluaran kritikal, jalankan CHECKDB setiap minggu. Untuk sistem transaksi tinggi, pertimbangkan semakan harian menggunakan pilihan PHYSICAL_ONLY, dengan semakan penuh setiap minggu. Pangkalan data pembangunan boleh disemak setiap bulan.

S: Bolehkah saya menjalankan DBCC CHECKDB pada pangkalan data pengeluaran langsung?

A: Ya, DBCC CHECKDB boleh berjalan pada pangkalan data dalam talian tanpa menyekat pengguna. Walau bagaimanapun, ia menggunakan sumber yang besar, jadi jadualkannya semasa tempoh aktiviti rendah dan pantau prestasi sistem.

S: Apakah perbezaan antara CHECKDB dan CHECKTABLE?

A: CHECKDB meneliti keseluruhan pangkalan data, manakala CHECKTABLE memfokuskan pada jadual individu. Gunakan CHECKTABLE untuk tarmendapat penyelesaian masalah atau apabila anda perlu menyemak jadual tertentu tanpa mengimbas seluruh pangkalan data.

10.2 Prestasi dan Soalan Sumber

S: Mengapakah DBCC CHECKDB mengambil masa yang lama pada pangkalan data besar saya?

A: Tempoh CHECKDB bergantung pada saiz pangkalan data, prestasi perkakasan dan pilihan yang digunakan. Gunakan PHYSICAL_ONLY untuk semakan yang lebih pantas atau NOINDEX untuk melangkau indeks bukan berkelompok. Pertimbangkan berjalan semasa tingkap penyelenggaraan dengan sumber khusus.

S: Berapa banyak ruang tempdb yang diperlukan oleh CHECKDB?

A: Secara amnya, peruntukkan 10-15% daripada saiz pangkalan data anda untuk tempdb semasa operasi CHECKDB. Gunakan pilihan ESTIMATEONLY untuk mendapatkan anggaran yang tepat: DBCC CHECKDB('YourDB') WITH ESTIMATEONLY

S: Bolehkah saya membatalkan operasi CHECKDB yang sedang berjalan?

A: Ya, anda boleh membatalkan CHECKDB menggunakan arahan KILL pada ID sesi. Walau bagaimanapun, pembatalan tidak memberikan maklumat tentang integriti pangkalan data dan anda perlu menjalankannya semula kemudian.

10.3 Ralat Mengendalikan Soalan

S: CHECKDB menemui ralat – patutkah saya panik?

A: Jangan panik, tetapi bertindak segera. Mula-mula, tentukan sama ada CHECKDB berjaya diselesaikan tetapi mendapati rasuah, atau jika CHECKDB sendiri gagal dijalankan. Semak sama ada ralat hanya menjejaskan indeks bukan berkelompok (kurang kritikal) atau data jadual (lebih serius).

S: Bilakah saya harus menggunakan REPAIR_ALLOW_DATA_LOSS?

A: Hanya sebagai pilihan terakhir mutlak apabila anda tidak mempunyai sandaran yang boleh digunakan dan kehilangan data boleh diterima berbanding dengan jumlah kehilangan pangkalan data. Sentiasa cuba memulihkan dari sandaran dahulu, kerana operasi pembaikan boleh menyebabkan kehilangan data kekal.

S: Apakah maksud "ralat ketekalan dalam pangkalan data" vs "ralat peruntukan"?

A: Ralat peruntukan menjejaskan cara SQL Server menjejaki penggunaan ruang cakera, manakala ralat ketekalan menunjukkan masalah dengan data atau struktur indeks. Kedua-duanya memerlukan perhatian, tetapi ralat konsistensi biasanya memberi kesan kepada kebolehcapaian data secara lebih langsung.

10.4 Soalan Sandaran dan Pemulihan

S: Patutkah saya menjalankan CHECKDB pada sandaran saya?

A: Sudah tentu! Jalankan CHECKDB selepas memulihkan sandaran untuk menguji pelayan. Ini mengesahkan integriti sandaran dan memastikan anda benar-benar boleh pulih daripada rasuah. Automatikkan proses ini jika boleh.

S: Sandaran saya juga rosak – bagaimana sekarang?

A: Cuba sandaran yang lebih lama sehingga anda menemui yang bersih. Jika tiada sandaran bersih wujud, pertimbangkan penyelesaian pemulihan profesional seperti DataNumen SQL Recovery. Dokumentasikan garis masa rasuah untuk mengelakkan kejadian pada masa hadapan.

S: Bolehkah pemulihan halaman membetulkan rasuah tanpa pemulihan pangkalan data penuh?

A: Ya, tetapi hanya dalam SQL Server Edisi Perusahaan dengan model pemulihan penuh dan sandaran log semasa. Pemulihan halaman berfungsi untuk rasuah halaman terpencil tetapi memerlukan pelaksanaan yang teliti mengikut prosedur yang betul.

10.5 Soalan Penyelesaian Masalah

S: CHECKDB gagal dengan ralat "keluar ruang" - apakah yang boleh saya lakukan?

A: Kosongkan ruang tempdb, alihkan tempdb ke storan yang lebih pantas atau gunakan pilihan TABLOCK untuk mengurangkan penggunaan tempdb. Pertimbangkan untuk menjalankan CHECKDB dengan NOINDEX atau PHYSICAL_ONLY untuk mengurangkan keperluan sumber.

S: Bagaimanakah cara saya mengenal pasti jadual mana yang mempunyai rasuah daripada output CHECKDB?

A: Cari nombor "ID objek" dalam mesej ralat, kemudian gunakan: SELECT OBJECT_NAME(object_id) untuk mencari nama jadual. Mesej ralat juga termasuk nombor halaman dan slot untuk pengenalan lokasi yang tepat.

S: Bolehkah isu perkakasan menyebabkan CHECKDB melaporkan positif palsu?

A: Ya, perkakasan yang gagal (terutama storan) boleh menyebabkan kerosakan sekejap yang muncul dan hilang antara larian CHECKDB. Jika ralat tidak konsisten, siasat subsistem I/O anda dan jalankan berbilang semakan untuk mengesahkan corak.

10.6 Soalan Konfigurasi Lanjutan

S: Apakah bendera surih yang boleh meningkatkan prestasi CHECKDB?

A: Bendera jejak 2562 boleh meningkatkan prestasi dengan menjalankan CHECKDB sebagai satu kelompok. Bendera jejak 2549 membantu apabila fail pangkalan data berada pada cakera berasingan. Gunakan ini dengan berhati-hati dan uji dalam bukan pengeluaran dahulu.

S: Bagaimanakah cara saya mengautomasikan pemantauan dan amaran CHECKDB?

A: Penggunaan SQL Server Makluman ejen untuk nombor ralat 8930, 8939 dan lain-lain. Laksanakan penghuraian log untuk mengekstrak hasil CHECKDB dan buat pemberitahuan untuk sebarang penemuan rasuah. Pertimbangkan untuk menggunakan rangka kerja penyelesaian penyelenggaraan seperti skrip Ola Hallengren.

S: Perlukah saya menggunakan pilihan EXTENDED_LOGICAL_CHECKS?

A: Hanya jika anda mengesyaki rasuah logik yang kompleks dan mempunyai overhed prestasi yang mencukupi. Pilihan ini melakukan semakan tambahan pada paparan diindeks, indeks XML dan indeks spatial tetapi dengan ketara meningkatkan masa pelaksanaan.

11. kesimpulan

11.1 Ringkasan Perkara Utama

11.1.1 Rekap Perintah DBCC CHECKDB yang penting

Kuasai sintaks asas DBCC CHECKDB untuk semakan pangkalan data yang komprehensif, gunakan pilihan NOINDEX dan PHYSICAL_ONLY untuk pengoptimuman prestasi, dan fahami CHECKTABLE untuk tarmendapat pengesahan jadual. Perintah asas ini membentuk asas penyelenggaraan pangkalan data yang proaktif, membolehkan pengesanan rasuah awal dan pemantauan integriti yang sistematik.

11.1.2 Peringatan Amalan Terbaik Kritikal

Sentiasa mengekalkan sandaran semasa sebelum menjalankan semakan integriti, menjadualkan operasi CHECKDB biasa berdasarkan kritikal pangkalan data, dan melaksanakan pemantauan automatik untuk amaran rasuah segera. Ingat bahawa pencegahan melalui pemantauan tetap mengatasi pendekatan reaktif, dan penyelesaian pemulihan profesional menyediakan pilihan sandaran yang berharga apabila alat standard terbukti tidak mencukupi.

11.2 Bila hendak menggunakan DBCC CHECKDB lwn. Penyelesaian Lanjutan

Gunakan DBCC CHECKDB untuk pemantauan integriti rutin dan penyelesaian rasuah kecil, sambil menempah alat pemulihan profesional untuk senario rasuah yang teruk di luar keupayaan pembaikan terbina dalam. Rangka kerja keputusan harus mempertimbangkan ketersediaan sandaran, kritikal data, kekangan masa dan keterukan rasuah. Pentadbir pangkalan data yang berjaya menggabungkan pemantauan CHECKDB biasa dengan strategi sandaran komprehensif dan kesedaran tentang pilihan pemulihan lanjutan apabila pendekatan standard terbukti tidak mencukupi.

11.3 Senarai Semak Kesihatan Harian Pantas untuk DBA

Selain menjalankan DBCC CHECKDB, kekalkan kesihatan pangkalan data yang optimum dengan amalan harian penting ini:

1. Sahkan Integriti Sandaran

  • Sahkan sandaran berjadual berjaya diselesaikan
  • Gunakan PULIHKAN SECARA VERIFYONLY untuk mengesahkan kebolehbacaan sandaran
  • Pastikan salinan luar tapak disegerakkan dan boleh diakses

Anda juga boleh mendapatkan maklumat lanjut daripada panduan komprehensif kami tentang SQL Server sandaran.

2. Semak Status Ketekalan

  • Semak keputusan DBCC CHECKDB automatik daripada larian semalaman
  • Pantau SQL Server log ralat untuk amaran rasuah
  • Siasat sebarang kegagalan integriti dengan segera

3. Pantau Kesihatan Pelayan

  • Semak CPU, memori dan metrik I/O cakera
  • Sahkan ketersediaan ruang tempdb
  • Kenal pasti proses yang disekat dan pertanyaan jangka panjang

4. Jejaki Aktiviti Kebuntuan

  • Semak graf kebuntuan daripada peristiwa kesihatan sistem
  • Kenal pasti pertanyaan bermasalah dan optimumkan dengan pasukan pembangunan
  • Pantau kiraan mangsa kebuntuan dan kesan perniagaan

Peringatan Penting

  • Elakkan pangkalan data yang kerap mengecut – ia meningkatkan pemecahan dan merendahkan prestasi. Hanya mengecut selepas pemadaman data utama apabila benar-benar perlu.
  • Automasi tugas pemantauan menggunakan SQL Server Pekerjaan ejen atau pelan penyelenggaraan dengan makluman untuk isu kritikal.
  • Uji prosedur pemulihan bencana setiap minggu untuk memastikan sandaran boleh dipulihkan dan objektif pemulihan kekal boleh dicapai.

Dengan menggabungkan senarai semak harian ini dengan operasi DBCC CHECKDB biasa, anda mencipta perlindungan komprehensif untuk persekitaran pangkalan data anda melalui pemantauan proaktif dan tindak balas isu segera.

12. Rujukan

  1. Microsoft Learn. "DBCC CHECKDB (Transact-SQL)." SQL Server dokumentasi. Microsoft Corporation.
    https://learn.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-ver17
  2. Microsoft Learn. "Selesaikan masalah ralat konsistensi pangkalan data yang dilaporkan oleh DBCC CHECKDB." SQL Server dokumentasi. Microsoft Corporation.
    https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/database-file-operations/troubleshoot-dbcc-checkdb-errors
Kongsi Sekarang: