DBCC CHECKDB tarafından bildirilen veritabanı tutarlılığı hatalarını giderme
Bu makalede, komut tarafından bildirilen hataların nasıl giderildiği DBCC CHECKDB
açıklanır.
Özgün ürün sürümü: SQL Server
Özgün KB numarası: 2015748
Belirtiler
DBCC CHECKDB (veya DBCC CHECKTABLE gibi diğer benzer komutlar) yürütürken, SQL Server hata günlüğüne aşağıdaki gibi bir ileti yazılır:
DBCC CHECKDB (mydb) executed by MYDOMAIN\theuser found 15 errors and repaired 3 errors.
Elapsed time: 0 hours 0 minutes 0 seconds.
Internal database snapshot has split point LSN = 00000026:0000089d:0001 and first LSN = 00000026:0000089c:0001.
This is an informational message only. No user action is required.
Bu ileti, bir onarım seçeneği kullanıldıysa kaç veritabanı tutarlılığı hatası bulunduğunu ve kaç tane onarıldığını gösterir. Bu ileti ayrıca Windows Uygulama Olay Günlüğü'ne EventID=8957 ile bilgi düzeyi iletisi olarak yazılır. Hatalar bildirilmiş olsa bile bu ileti bir bilgi düzeyi iletisidir.
"İç veritabanı anlık görüntüsü..." ile başlayan iletideki bilgiler yalnızca veritabanının modda olmadığı SINGLE_USER
çevrimiçi çalıştırıldığında görüntülenirDBCC CHECKDB
. Bunun nedeni, çevrimiçi DBCC CHECKDB
bir için, denetlenecek tutarlı bir veri kümesi sunmak için iç veritabanı anlık görüntüsünün kullanılmasıdır.
Bu makalede, tarafından DBCC CHECKDB
bildirilen her bir hatanın nasıl giderildiği anlatılmamaktadır, bunun yerine hatalar bildirilirse genel yaklaşım ele alınmaktadır. Bu makaledeki tüm başvurularCHECKDB
, belirtilmedikçe ve DBCC CHECKFILEGROUP için DBCC CHECKTABLE
de geçerlidir.
Neden
komut veritabanı DBCC CHECKDB
sayfalarının, satırların, ayırma sayfalarının, dizin ilişkilerinin, sistem tablosu bilgi tutarlılığının ve diğer yapı denetimlerinin fiziksel ve mantıksal tutarlılığını denetler. Bu denetimlerden herhangi biri başarısız olursa (seçtiğiniz seçeneklere bağlı olarak) hatalar bildirilir.
Bu sorunların nedeni dosya sistemi bozulması, temel donanım sistemi sorunları, sürücü sorunları, bellek veya depolama önbelleğindeki bozuk sayfalar veya SQL Server ile ilgili sorunlar olabilir. Bildirilen hataların kök nedenini belirleme hakkında bilgi için bkz . Kök nedeni araştırma.
Çözüm
Yedeklemeyi geri yüklemeye veya veritabanını başka bir şekilde onarmaya devam etmeden önce sistemdeki donanımla ilgili temel sorunları çözün. G/Ç yolu ile ilgili tüm cihaz sürücüsü, üretici yazılımı, BIOS ve işletim sistemi güncelleştirmelerini uygulayın. Sorunları yalıtmak ve çözmek için tam G/Ç yolunun (yerel makine, cihaz sürücüleri, depolama NIC'leri, SAN, arka uç depolama ve önbellek) yöneticisiyle birlikte çalışın. Örnek olarak cihaz sürücülerini güncelleştirme ve G/Ç yolunun tamamının yapılandırmasını denetleme verilebilir. Kök nedeni denetleme hakkında daha fazla bilgi için bkz . Kök nedeni araştırma.
Kalıcı tutarlılık hataları bildirirse
DBCC CHECKDB
, en iyi çözüm verileri bilinen iyi bir yedeklemeden geri yüklemek olacaktır. Daha fazla bilgi için bkz . Geri Yükleme ve Kurtarma.Bilinen sorunlarla karşılaşmayın emin olmak için en son SQL Server Toplu Güncelleştirme veya Hizmet Paketi'ni uygulayın. Veritabanı bozulması (tutarlılık hataları) ile ilgili olarak düzeltilen bilinen sorunlar için Toplu Güncelleştirme veya Hizmet Paketi belgelerini gözden geçirin ve ilgili düzeltmeleri uygulayın. Ayrıntılı düzeltme SQL Server 2022, 2019, 2017 için listelenmişse belirli bir sürüm için tüm düzeltmeleri arayabileceğiniz merkezi bir konum.
DBCC CHECKDB
Hatalar aralıklıysa, yani bir çalıştırmada görünürse ve bir sonraki çalıştırmada kaybolursa, disk önbelleği sorunlarıyla (cihaz sürücüsü veya diğer G/Ç yolu sorunu) karşılaşıyor olabilirsiniz. Sorunları yalıtmak ve çözmek için G/Ç yolunun bakımcılarıyla birlikte çalışın. Örnek olarak cihaz sürücülerini güncelleştirme, G/Ç yolunun tamamının yapılandırmasını denetleme ve G/Ç yolu cihazlarında ve sisteminde üretici yazılımı ve BIOS'u güncelleştirme verilebilir.Bir yedekten geri yükleme mümkün değilse,
CHECKDB
kullanabileceğiniz hataları onarma özelliği vardır. İki onarım düzeyi vardır:REPAIR_REBUILD
- veri kaybı olasılığı olmayan onarımlar yapar.REPAIR_ALLOW_DATA_LOSS
- veri kaybı olasılığı olan onarımlar yapar.
Daha fazla bilgi için DBCC CHECKDB belgelerine bakın.
Veritabanınızı mantıksal olarak tutarsız bir durumda bırakabileceğinden, veri kaybına izin vererek onarım seçimi yaparken dikkatli olmanız gerekir. Çıkış,
DBCC CHECKDB
kullanılacak en düşük onarım düzeyinde bir öneride bulunur. Daha fazla hata raporlanana kadar birden çok kez çalıştırmakCHECKDB
REPAIR_ALLOW_DATA_LOSS
yaygın bir uygulamadır. Bunun nedeni, onarım bir hata kümesini düzelttiğinde diğer bozuk bağlantıların ortaya çıkarılabilmesidir. Ancak, temel neden çözümlenmediyse yeni hatalar gösterilebilir. Bu nedenle, donanım veya dosya sistemi gibi sistem düzeyindeki sorunlar veri bozulmasına neden oluyorsa, yedekleme veya onarım geri yüklemeden önce bu sorunların çözülmesi gerekir. Onarım tutarlılık hatalarını düzeltmezse veya veritabanı yedeklemesi bozuksa Microsoft destek mühendisleri bozuk verilerin fiziksel olarak kurtarılmasına yardımcı olamaz.komutunu çalıştırdığınızda
DBCC CHECKDB
, tüm hataları onarmak için gereken en düşük onarım seçeneğini belirtmek için bir öneri sağlanır. Bu iletiler aşağıdaki çıkışa benzer:CHECKDB, 'mydb' veritabanında 0 ayırma hatası ve 15 tutarlılık hatası buldu.
REPAIR_ALLOW_DATA_LOSS
, (mydb) tarafındanDBCC CHECKDB
bulunan hataların en düşük onarım düzeyidir.Onarım önerisi, 'den
CHECKDB
gelen tüm hataları düzeltmeye çalışmak için en düşük onarım düzeyidir. En düşük onarım düzeyi, bu onarım seçeneğinin tüm hataları düzeltdiği anlamına gelmez. Bazı hatalar düzeltilemiyor. Ayrıca onarım işlemini birden çok kez çalıştırmanız gerekebilir. Bildirilen tüm hataların çözülmesi için bu onarım düzeyinin kullanılması gerekmez. Bu, tarafından yapılan tüm onarımlarınCHECKDB
veri kaybınaREPAIR_ALLOW_DATA_LOSS
neden olmadığı anlamına gelir. Bir hatanın çözümünün veri kaybına neden olup olmadığını belirlemek için onarım çalıştırılmalıdır. Her tablo için onarım düzeyinin ne olduğunu daraltmaya yardımcı olan bir teknik, hata bildiren herhangi bir tablo için kullanmaktırDBCC CHECKTABLE
. Bu, belirli bir tablo için en düşük onarım düzeyini gösterir.Uyarı
Onarım veya veri dışarı aktarma veya içeri aktarma tamamlandıktan sonra
CHECKDB
el ile veri doğrulama gerçekleştirmeniz gerekir. Daha fazla bilgi için bkz. DBCC CHECKDB bağımsız değişkenleri. Onarımdan sonra veriler mantıksal olarak tutarlı olmayabilir. Örneğin, onarım (özellikleREPAIR_ALLOW_DATA_LOSS
seçenek) tutarsız veriler içeren veri sayfalarının tamamını kaldırabilir. Bu gibi durumlarda, başka bir tabloyla yabancı anahtar ilişkisi olan bir tablo, üst tabloda karşılık gelen birincil anahtar satırları olmayan satırlarla sonuçlanabilir.Veritabanı şemasını betik olarak oluşturmayı deneyin. Betiği kullanarak yeni bir veritabanı oluşturun ve sonra bozuk veritabanından yeni veritabanına mümkün olduğunca çok veri aktarmak için BCP veya SSIS Dışarı/İçeri Aktarma Sihirbazı gibi bir araç kullanın. Bozuk bir tablodan veri dışarı aktarma işlemi başarısız olabilir. Bu gibi durumlarda, bu tabloyu atlayın, sonrakine geçin ve yapabileceklerini kaydedin.
tarafından
DBCC CHECKDB
oluşturulan belirli hatalar için aşağıdaki makaleleri gözden geçirin ve sağlanan adımları izleyin (varsa). İşte birkaç örnek:- Hata 605 (MSSQLSERVER_605)
- Hata 823 (MSSQLSERVER_823)
- Hata 824 (MSSQLSERVER_824)
- Hata 825 (MSSQLSERVER_825)
- Hata 2508 (MSSQLSERVER_2508)
- Hata 2511 (MSSQLSERVER_2511)
- Hata 2512 (MSSQLSERVER_2512)
- Hata 7987 (MSSQLSERVER_7987)
- Hata 7988 (MSSQLSERVER_7988)
- Hata 7995 (MSSQLSERVER_7995)
- Hata 8993 (MSSQLSERVER_8993)
- Hata 8994 (MSSQLSERVER_8994)
- Hata 8996 (MSSQLSERVER_8996)
Veritabanı tutarlılığı hatalarının kök nedenini araştırma
Veritabanı tutarlılığı hatalarının kök nedenini belirlemek için şu yöntemleri göz önünde bulundurun:
- Sistem düzeyi, sürücü veya diskle ilgili hatalar için Windows Sistem Olay Günlüğü'nü denetleyin ve bunları çözmek için donanım üreticinizle birlikte çalışın.
- Bilgisayar ve/veya disk sistemi için donanım üreticileriniz tarafından sağlanan tanılamaları çalıştırın.
- Şunlardan emin olmak için donanım satıcınızla veya cihaz üreticinizle birlikte çalışın:
- Donanım cihazları ve yapılandırma, Microsoft SQL Server Veritabanı Altyapısı Giriş/Çıkış gereksinimlerini onaylar.
- G/Ç yolundaki tüm cihazların cihaz sürücüleri ve diğer destekleyici yazılım bileşenleri güncelleştirilir.
- Tutarlılık hatalarını bildiren veritabanlarının bulunduğu sürücüde SQLIOSim gibi bir yardımcı program kullanmayı göz önünde bulundurun. SQLIOSim, disk sistemi için G/Ç bütünlüğünü test etmek için SQL Server Altyapısından bağımsız bir araçtır. SQLIOSim, SQL Server ile birlikte teslim edilir ve ayrı bir indirme gerektirmez. \MSSQL\Binn klasöründe bulunabilir.
- Veritabanı bozulması (tutarlılık hataları) ile ilgili olarak düzeltilen bilinen sorunlar için Toplu Güncelleştirme veya Hizmet Paketi belgelerini gözden geçirin ve ilgili düzeltmeleri uygulayın. Ayrıntılı düzeltme SQL Server 2022, 2019, 2017 için listelenmişse belirli bir sürüm için tüm düzeltmeleri arayabileceğiniz merkezi bir konum.
- erişim ihlalleri veya onaylar gibi SQL Server tarafından bildirilen diğer hataları denetleyin. Bozuk veritabanlarına yönelik etkinlik genellikle erişim ihlali özel durumlarıyla veya onay hatalarıyla sonuçlanır.
- Veritabanlarınızın seçeneğini kullandığından
PAGE_VERIFY CHECKSUM
emin olun. Sağlama toplamı hataları bildiriliyorsa bu, SQL Server diske sayfalar yazdıktan sonra tutarlılık hatalarının oluştuğunun göstergesidir. Bu nedenle G/Ç alt sisteminiz kapsamlı bir şekilde denetlenmelidir. Sağlama toplamı hataları hakkında daha fazla bilgi için bkz. SQL Server'de Msg 824 Sorunlarını Giderme. - ERRORLOG'da ileti 832 hatalarını arayın. Bu hatalar diske yazılmadan önce önbellekte bulunan sayfaların zarar görmüş olabileceğini gösterebilir. Daha fazla bilgi için bkz. SQL Server'de Msg 832 Sorunlarını Giderme.
- Başka bir sistemde, "temiz" olduğunu bildiğiniz bir veritabanı yedeklemesini (hata yok
CHECKDB
) ve ardından hatanın oluşturulduğu zamana yayılan işlem günlüğü yedeklemelerini geri yüklemeyi deneyin. "Temiz" veritabanı yedeklemesini ve işlem günlüğü yedeklemesini geri yükleyerek bu sorunu "yeniden oluşturabiliyorsanız" yardım için Microsoft Teknik Destek'e başvurun. - Veri Saflığı hataları, uygulamanın SQL Server tablolarına geçersiz veri eklemesi veya güncelleştirmesiyle ilgili bir sorun olabilir. Veri Saflığı hatalarını giderme hakkında daha fazla bilgi için bkz. SQL Server 2005'te DBCC Hatası 2570 Sorunlarını Giderme.
- chkdsk komutunu kullanarak dosya sisteminin bütünlüğünü denetleyin.
Daha fazla bilgi
Komutunu çalıştırma hakkında söz dizimi DBCC CHECKDB
ve bilgileri veya seçenekleri hakkında ayrıntılı bilgi için bkz. DBCC CHECKDB (Transact-SQL).
kullanılarak CHECKDB
herhangi bir hata bulunursa, hata raporlama amacıyla ERRORLOG'da aşağıdaki iletiye benzer diğer iletiler bildirilir:
**Dump thread - spid = 0, EC = 0x00000000855F5EB0
***Stack Dump being sent toFilePath\FileName
* ******************************************************************************
*
* BEGIN STACK DUMP:
* Date/Timespid 53
*
* DBCC database corruption
*
* Input Buffer 84 bytes -
* dbcc checkdb(mydb)
*
* *******************************************************************************
* -------------------------------------------------------------------------------
* Short Stack Dump
Stack Signature for the dump is 0x00000000000001E8
External dump process return code 0x20002001.
Hata bilgileri Watson hata raporlamasına gönderildi.
Hata raporlama için kullanılan dosyalar sqldump<nnn>.txt dosyası içerir. Bu dosya, xml biçiminde bulunan CHECKDB
hataların listesini içerdiğinden geçmişe dönük amaçlar için yararlı olabilir.
Bir veritabanı için algılanan hatalar olmadan en son ne zaman DBCC CHECKDB
çalıştırıldığını öğrenmek için (bilinen son temizlemeCHECKDB
), kullanıcı veya sistem veritabanında aşağıdakine benzer bir ileti için ERRORLOG SQL Server denetleyin (bu ileti, Windows Uygulama Olay Günlüğü'nde EventID = 17573 ile birlikte bilgi düzeyi iletisi olarak yazılır):
'Ana' veritabanı için Tarih/Saat spid7s CHECKDB, Tarih/Saat22:11:11.417 (yerel saat) tarihinde hata olmadan tamamlandı. Bu yalnızca bilgilendirme amaçlı bir iletidir; kullanıcı eylemi gerekmez
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin