Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ğıdakine benzer 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ç hatanın 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
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 belirli hatanın nasıl giderildiği anlatılmıyor, hata bildirilirse genel yaklaşım ele alınmıyor. Bu makaledeki tüm başvurularCHECKDB
, belirtilmediği sürece ve DBCC CHECKFILEGROUP için DBCC CHECKTABLE
de geçerlidir.
Neden
komutu DBCC CHECKDB
veritabanı sayfalarının, satırların, ayırma sayfalarının, dizin ilişkilerinin, sistem tablosunun 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 ya da 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) ve belleğin (RAM) 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 araştırma hakkında ayrıntılı bilgi için bkz . Kök nedeni araştırma.
Kalıcı tutarlılık hataları bildirirse
DBCC CHECKDB
, en iyi çözüm bilinen iyi bir yedeklemeden verileri geri yüklemek olacaktır. Daha fazla bilgi için bkz . Geri Yükleme ve Kurtarma.Bilinen sorunlarla karşılaşmıyor olduğunuzdan emin olmak için en son SQL Server Toplu Güncelleştirmesi veya Hizmet Paketi'ni uygulayın. Veritabanı bozulması (tutarlılık hataları) ile ilgili düzeltilen bilinen sorunlar için Toplu Güncelleştirme veya Hizmet Paketi belgelerini gözden geçirin ve ilgili düzeltmeleri uygulayın. Sql Server 2022, 2019, 2017 için Ayrıntılı düzeltme listeleri varsa belirli bir sürüm için tüm düzeltmeleri arayabileceğiniz merkezi bir konum.
DBCC CHECKDB
Hatalar aralıklı olarak oluşuyorsa, yani bir çalıştırmada görüntüleniyorsa ve bir sonraki çalıştırmada kayboluyorsa, 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ını ve BIOS'u güncelleştirme verilebilir.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 gerçekleştirir. -
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 onarmayı tercih ederken dikkatli olmanız gerekir. Çıkış,
DBCC CHECKDB
kullanılacak en düşük onarım düzeyinde bir öneride bulunur. Daha fazla hata bildirinceye 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üklenmeden önce bu sorunların giderilmesi gerekir. Onarım tutarlılık hatalarını düzeltmezse veya veritabanı yedeklemesi bozuksa Microsoft destek mühendisleri bozuk verilerin fiziksel olarak kurtarılmasında 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 belirten 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, içindeki tüm hataları
CHECKDB
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. Hata bildiren tüm tablolarda onarım düzeyinin ne olduğunu daraltmaya yardımcı olanDBCC CHECKTABLE
bir teknik. 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 işlemi 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 veri içeren veri sayfalarının tamamını kaldırabilir. Böyle 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ın betiğini 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 dışarı 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. Böyle 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ı (varsa) izleyin. Burada bazı örnekler verilmiştir:- 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. Sistemlerin çoğu depolama (sabit sürücüler), bellek, CPU'lar, sistem panoları, RAID dizileri ve diğer birden çok bileşen için BIOS/UEFI yerleşik tanılamaları sağlar.
- Ş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 için cihaz sürücüleri ile diğer destekleyici yazılım bileşenleri güncelleştirildi.
- 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 gönderilir ve ayrı bir indirme gerektirmez. \MSSQL\Binn klasöründe bulunabilir.
- Veritabanı bozulması (tutarlılık hataları) ile ilgili düzeltilen bilinen sorunlar için Toplu Güncelleştirme veya Hizmet Paketi belgelerini gözden geçirin ve ilgili düzeltmeleri uygulayın. Sql Server 2022, 2019, 2017 için Ayrıntılı düzeltme listeleri varsa belirli bir sürüm için tüm düzeltmeleri arayabileceğiniz merkezi bir konum.
- SQL Server tarafından bildirilen erişim ihlalleri veya onaylar gibi diğer hataları denetleyin. Bozuk veritabanlarına yönelik etkinlik genellikle erişim ihlali özel durumlarına veya onay hatalarına neden olur.
- 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 bir 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'da 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'da Msg 832 Sorunlarını Giderme.
- Başka bir sistemde, "temiz" (hatasız
CHECKDB
) olduğunu bildiğiniz bir veritabanı yedeğini 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 Desteği'ne başvurun. - Veri Saflığı hataları, uygulamanın SQL Server tablolarına geçersiz verileri 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.
SQL Server çalışırken çalıştırmayın
chkdsk
. SQL Server denetlenen dosyalara yazıyorsa geçici dosya hataları bildirebilir. Ayrıca, veya/f
gibi/r
anahtarlar dosya baytlarını diskte farklı bir konuma taşıyabilir ve SQL Server da bu dosyalara yazıyor veya bu dosyalardan okuyorsa bu tür bir hareket bozulmaya neden olabilir. Bu nedenle, komutu çalıştırmadan önce SQL Server'ı durdurmayıchkdsk
unutmayın. Ayrıca ve/f
gibi/r
onarım seçeneklerinde dikkatli olun. Bir onarım çalıştırmadan önce veritabanlarınızın yedeğine sahip olduğunuzdan emin olun. Bu seçenekler tarafındanchkdsk
disk hataları bulunursa dosyaları bozabilir.
Daha Fazla Bilgi
komutu ç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 bir 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ında hata algılanmadan en son çalıştırmanın DBCC CHECKDB
(bilinen son temizleme CHECKDB
) olduğunu öğrenmek için SQL Server ERRORLOG'u denetleyin. Kullanıcı veya sistem veritabanı için aşağıdakine benzer bir ileti arayın. Bu ileti, Windows Uygulama Olay Günlüğü'nde EventID = 17573 ile bilgi düzeyi iletisi olarak da yazılır:
'ana' veritabanı için Tarih/Saat spid7s CHECKDB, Tarih/Saat22:11:11.417 (yerel saat) tarihinde hatasız tamamlandı. Bu yalnızca bilgilendirme amaçlı bir iletidir; kullanıcı eylemi gerekmez