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.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Aşağıdaki işlemleri gerçekleştirerek belirtilen veritabanındaki tüm nesnelerin mantıksal ve fiziksel bütünlüğünü denetler:
Veritabanındaki her tabloda ve görünümde DBCC CHECKTABLE çalıştırır.
Veritabanındaki dizine alınan her görünümün içeriğini doğrular.
FILESTREAM kullanarak dosya sisteminde varbinary(max) verileri depolarken tablo meta verileriyle dosya sistemi dizinleri ve dosyaları arasındaki bağlantı düzeyinde tutarlılığı doğrular.
Veritabanındaki Hizmet Aracısı verilerini doğrular.
Bu, DBCC CHECKALLOC
, DBCC CHECKTABLE
veya DBCC CHECKCATALOG
komutlarının DBCC CHECKDB
'dan ayrı olarak çalıştırılması gerekmeyecek anlamına gelir. Bu komutların gerçekleştirdiği denetimler hakkında daha ayrıntılı bilgi için bu komutların açıklamalarına bakın.
DBCC CHECKDB
bellek için iyileştirilmiş tablolar içeren veritabanlarında desteklenir, ancak doğrulama yalnızca disk tabanlı tablolarda gerçekleşir. Ancak, veritabanı yedekleme ve kurtarmanın bir parçası olarak, bellek için iyileştirilmiş dosya gruplarındaki dosyalar için CHECKSUM
doğrulama yapılır.
DbCC onarım seçenekleri bellek için iyileştirilmiş tablolar için kullanılamadığından veritabanlarınızı düzenli olarak yedeklemeli ve yedeklemeleri test etmelisiniz. Bellek için iyileştirilmiş bir tabloda veri bütünlüğü sorunları oluşursa, bilinen son iyi yedeklemeden geri yüklemeniz gerekir.
Transact-SQL söz dizimi kuralları
Sözdizimi
DBCC CHECKDB
[ [ ( database_name | database_id | 0
[ , NOINDEX
| , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
) ]
[ WITH
{
[ ALL_ERRORMSGS ]
[ , EXTENDED_LOGICAL_CHECKS ]
[ , NO_INFOMSGS ]
[ , TABLOCK ]
[ , ESTIMATEONLY ]
[ , { PHYSICAL_ONLY | DATA_PURITY } ]
[ , MAXDOP = number_of_processors ]
}
]
]
Bağımsız değişken
database_name | database_id | 0
Bütünlük denetimlerinin çalıştırıldığı veritabanının adı veya kimliği. Belirtilmezse veya 0 belirtilirse geçerli veritabanı kullanılır. Veritabanı adları tanımlayıcılarının kurallarına uymalıdır.
NOINDEX
Kullanıcı tabloları için kümelenmemiş dizinlerin yoğun denetimlerinin gerçekleştirilemdiğini belirtir. Bu seçim, genel yürütme süresini azaltır.
NOINDEX
sistem tablolarını etkilemez çünkü bütünlük denetimleri her zaman sistem tablosu dizinlerinde gerçekleştirilir.
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
DBCC CHECKDB
bulunan hataları onardığını belirtir.
REPAIR_*
seçeneklerini yalnızca son çare olarak kullanın. Aşağıdaki onarım seçeneklerinden birini kullanabilmek için belirtilen veritabanının tek kullanıcılı modda olması gerekir.
REPAIR_ALLOW_DATA_LOSS
Bildirilen tüm hataları onarmaya çalışır. Bu onarımlar veri kaybına neden olabilir.
Uyarı
REPAIR_ALLOW_DATA_LOSS
seçeneği, bilinen son iyi yedeklemeden geri yükleme işlemine kıyasla daha fazla veri kaybına neden olabilir. bkz. REPAIR_ALLOW_DATA_LOSS ile Veri kaybı uyarısıMicrosoft,
DBCC CHECKDB
tarafından bildirilen hatalardan kurtarmak için her zaman bilinen son iyi yedeklemeden birincil yöntem olarak bir kullanıcı geri yüklemesini önerir.REPAIR_ALLOW_DATA_LOSS
seçeneği, bilinen iyi bir yedeklemeden geri yükleme için alternatif değildir. Yalnızca yedekten geri yükleme mümkün değilse kullanılması önerilen acil durum son çare seçeneğidir.Yalnızca
REPAIR_ALLOW_DATA_LOSS
seçeneği kullanılarak onarılabilen bazı hatalar, hataları temizlemek için bir satır, sayfa veya sayfa dizisinin serbest bırakılmasını içerebilir. Serbest bırakılan veriler artık kullanıcı için erişilebilir veya kurtarılamaz ve serbest bırakılan verilerin tam içeriği belirlenemez. Bu nedenle, yabancı anahtar kısıtlamaları bu onarım işleminin bir parçası olarak denetlenmediğinden veya korunmadığından, herhangi bir satır veya sayfa serbest bırakıldıktan sonra bilgi tutarlılığı doğru olmayabilir. Kullanıcı,REPAIR_ALLOW_DATA_LOSS
seçeneğini kullandıktan sonra veritabanının bilgi tutarlılığını (DBCC CHECKCONSTRAINTS
kullanarak) incelemelidir.Onarımı gerçekleştirmeden önce, bu veritabanına ait dosyaların fiziksel kopyalarını oluşturmanız gerekir. Bu, birincil veri dosyasını (
.mdf
), tüm ikincil veri dosyalarını (.ndf
), tüm işlem günlüğü dosyalarını (.ldf
) ve tam metin katalogları, dosya akışı klasörleri, bellek için iyileştirilmiş veriler vb. dahil olmak üzere veritabanını oluşturan diğer kapsayıcıları içerir.Onarımı gerçekleştirmeden önce veritabanının durumunu
EMERGENCY
moduna değiştirmeyi ve kritik tablolardan mümkün olduğunca fazla bilgi ayıklamayı ve bu verileri kaydetmeyi deneyin.REPAIR_FAST
Yalnızca geriye dönük uyumluluk için söz dizimlerini korur. Hiçbir onarım eylemi gerçekleştirilmez.
REPAIR_REBUILD
Veri kaybı olasılığı olmayan onarımlar gerçekleştirir. Bu seçenek, kümelenmemiş dizinlerdeki eksik satırları onarma gibi hızlı onarımları ve dizini yeniden derleme gibi daha fazla zaman alan onarımı içerebilir.
Bu bağımsız değişken FILESTREAM verileriyle ilgili hataları onarmaz.
Önemli
REPAIR_*
seçeneklerinden herhangi biriyle DBCC CHECKDB
tamamen günlüğe kaydedildiğinden ve kurtarılabilir olduğundan, Microsoft her zaman kullanıcının işlemin sonuçlarını kabul etmek istediğini onay edebilmesi için bir işlem içindeki REPAIR_*
seçenekleriyle (komutu çalıştırmadan önce BEGIN TRANSACTION
yürüt) DBCC CHECKDB
kullanmasını önerir. Daha sonra kullanıcı, onarım işlemi tarafından yapılan tüm işleri işlemek için COMMIT TRANSACTION
yürütebilir. Kullanıcı işlemin sonuçlarını kabul etmek istemezse, onarım işlemlerinin etkilerini geri almak için bir ROLLBACK TRANSACTION
yürütebilir.
Hataları onarmak için yedekten geri yüklemenizi öneririz. Onarım işlemleri, tablolarda veya tablolar arasında mevcut olabilecek kısıtlamaları dikkate almaz. Belirtilen tablo bir veya daha fazla kısıtlamaya dahilse, bir onarım işleminden sonra DBCC CHECKCONSTRAINTS
çalıştırmanızı öneririz.
REPAIR_*
kullanmanız gerekiyorsa, kullanılacak onarım düzeyini bulmak için DBCC CHECKDB
bir onarım seçeneği olmadan çalıştırın.
REPAIR_ALLOW_DATA_LOSS
düzeyini kullanıyorsanız, bu seçenekle DBCC CHECKDB
çalıştırmadan önce veritabanını yedeklemenizi öneririz.
ALL_ERRORMSGS
Nesne başına bildirilen tüm hataları görüntüler. Tüm hata iletileri varsayılan olarak görüntülenir. Bu seçeneği belirtmenin veya atlamanın hiçbir etkisi yoktur. Hata iletileri, tempdb veritabanıoluşturulan iletiler dışında nesne kimliğine göre sıralanır.
EXTENDED_LOGICAL_CHECKS
Uyumluluk düzeyi SQL Server 2008'de (10.0.x) sunulan 100 ise, bu seçenek dizinlenmiş görünümde, XML dizinlerinde ve uzamsal dizinlerde mantıksal tutarlılık denetimleri gerçekleştirir.
Daha fazla bilgi için bu makalenin devamında dizinlerde mantıksal tutarlılık denetimleri gerçekleştirme bakın.
NO_INFOMSGS
Tüm bilgilendirme iletilerini gizler.
TABLOCK
DBCC CHECKDB
iç veritabanı anlık görüntüsü kullanmak yerine kilitleri almasına neden olur. Bu, veritabanında kısa vadeli özel (X) kilidi içerir.
TABLOCK
, DBCC CHECKDB
yoğun yük altındaki bir veritabanında daha hızlı çalışmasına neden olur, ancak DBCC CHECKDB
çalışırken veritabanında kullanılabilen eşzamanlılığı azaltır.
Önemli
TABLOCK
gerçekleştirilen denetimleri sınırlar; DBCC CHECKCATALOG
veritabanında çalıştırılmıyor ve Hizmet Aracısı verileri doğrulanmıyor.
TAHMINE GÖRE
Belirtilen diğer tüm seçeneklerle DBCC CHECKDB
çalıştırmak için gereken tahmini tempdb
alanı miktarını görüntüler. Gerçek veritabanı denetimi gerçekleştirilmiyor.
PHYSICAL_ONLY
Denetimi, sayfanın ve kayıt üst bilgilerinin fiziksel yapısının bütünlüğüyle ve veritabanının ayırma tutarlılığıyla sınırlar. Bu denetim, veritabanının fiziksel tutarlılığı için küçük bir ek yük denetimi sağlamak üzere tasarlanmıştır, ancak kullanıcının verilerini tehlikeye atabilecek bozuk sayfaları, sağlama toplamı hatalarını ve yaygın donanım hatalarını da algılayabilir.
DBCC CHECKDB
tam çalıştırmasının tamamlanması önceki sürümlerden çok daha uzun sürebilir. Bu davranış şu nedenlerle oluşur:
- Mantıksal denetimler daha kapsamlıdır.
- Denetlenecek temel yapılardan bazıları daha karmaşıktır.
- Yeni özellikleri içeren birçok yeni denetim kullanıma sunulmuştur.
Bu nedenle, PHYSICAL_ONLY
seçeneğinin kullanılması büyük veritabanlarında DBCC CHECKDB
için çok daha kısa bir çalışma süresine neden olabilir ve üretim sistemlerinde sık kullanım için önerilir. Yine de DBCC CHECKDB
tam çalıştırmasının düzenli aralıklarla gerçekleştirilmesi önerilir. Bu çalıştırmaların sıklığı, tek tek işletmelere ve üretim ortamlarına özgü faktörlere bağlıdır.
Bu bağımsız değişken her zaman NO_INFOMSGS
anlamına gelir ve onarım seçeneklerinden herhangi biriyle birlikte kullanılamaz.
Uyarı
PHYSICAL_ONLY
belirtilmesi, DBCC CHECKDB
FILESTREAM verilerinin tüm denetimlerini atlamasına neden olur.
DATA_PURITY
DBCC CHECKDB
geçerli olmayan veya aralık dışında olan sütun değerlerinin veritabanını denetlemesine neden olur. Örneğin, DBCC CHECKDB
datetime veri türü için kabul edilebilir aralıktan büyük veya daha küçük tarih ve saat değerlerine sahip sütunları algılar; veya geçerli olmayan ölçek veya duyarlık değerlerine sahip ondalık veya yaklaşık sayısal veri türü sütunlarını.
Sütun-değer bütünlüğü denetimleri varsayılan olarak etkindir ve DATA_PURITY
seçeneğini gerektirmez. SQL Server'ın önceki sürümlerinden yükseltilen veritabanları için, DBCC CHECKDB WITH DATA_PURITY
veritabanında hatasız çalıştırılana kadar sütun-değer denetimleri varsayılan olarak etkinleştirilmez. Bundan sonra, DBCC CHECKDB
varsayılan olarak sütun-değer bütünlüğünü denetler.
CHECKDB
sql server'ın önceki sürümlerinden veritabanı yükseltmesinden nasıl etkilenebileceği hakkında daha fazla bilgi için, bu makalenin devamında yer alan Açıklamalar bölümüne bakın.
Uyarı
PHYSICAL_ONLY
belirtilirse, sütun bütünlüğü denetimleri gerçekleştirilmez.
Bu seçenek tarafından bildirilen doğrulama hataları DBCC onarım seçenekleri kullanılarak düzeltilemiyor. Bu hataları el ile düzeltme hakkında bilgi için bkz. MSSQLSERVER_2570.
MAXDOP
için geçerlidir: SQL Server 2014 (12.x) Service Pack 2 ve sonraki sürümleri
deyimi için sp_configure
max degree of parallelism
yapılandırma seçeneğini geçersiz kılar.
MAXDOP
, sp_configure
ile yapılandırılan değeri aşabilir.
MAXDOP
Resource Governor ile yapılandırılan değeri aşarsa, SQL Server Veritabanı Altyapısı ALTER WORKLOAD GROUPbölümünde açıklanan Resource Governor MAXDOP
değerini kullanır.
max degree of parallelism
yapılandırma seçeneğiyle kullanılan tüm anlam kuralları, MAXDOP
sorgu ipucunu kullandığınızda geçerlidir. Daha fazla bilgi için bkz. Sunucu yapılandırması: en yüksek paralellik derecesi.
Uyarı
MAXDOP
sıfır olarak ayarlanırsa SQL Server kullanılacak max degree of parallelism
seçer.
Açıklamalar
DBCC CHECKDB
devre dışı bırakılmış dizinleri incelemez. Devre dışı bırakılan dizinler hakkında daha fazla bilgi için bkz. dizinleri ve kısıtlamaları devre dışı bırakma.
Kullanıcı tanımlı bir tür bayt sıralı olarak işaretlenmişse, kullanıcı tanımlı türün yalnızca bir serileştirmesi olmalıdır. Bayt sıralı kullanıcı tanımlı türlerin tutarlı seri hale getirilmemesi, DBCC CHECKDB
çalıştırıldığında hata 2537'ye neden olur. Daha fazla bilgi için bkz. Oluşturma User-Defined Türleri - Gereksinimler.
Kaynak veritabanı yalnızca tek kullanıcı modunda değiştirilebilir olduğundan, DBCC CHECKDB
komutu doğrudan üzerinde çalıştırılamaz. Ancak, DBCC CHECKDB
ana veritabanıyürütürse, kaynak veritabanında ikinci bir CHECKDB
de dahili olarak çalıştırılır. Bu, DBCC CHECKDB
ek sonuçlar döndürebileceği anlamına gelir. Hiçbir seçenek ayarlı olmadığında veya PHYSICAL_ONLY
veya ESTIMATEONLY
seçeneği ayarlandığında komut ek sonuç kümeleri döndürür.
SQL Server 2005 (9.x) Service Pack 2 ve sonraki sürümlerinde, DBCC CHECKDB
yürütülmesi artık SQL Server örneğinin plan önbelleğini temizlemez. SQL Server 2005 (9.x) Service Pack 2'nin öncesinde, DBCC CHECKDB
yürütülmesi plan önbelleğini temizler. Plan önbelleğinin temizlenmesi, sonraki tüm yürütme planlarının yeniden derlenmesine neden olur ve sorgu performansında ani, geçici bir düşüşe neden olabilir.
Dizinlerde mantıksal tutarlılık denetimleri gerçekleştirme
Dizinlerde mantıksal tutarlılık denetimi, veritabanının uyumluluk düzeyine göre aşağıdaki gibi değişir:
Uyumluluk düzeyi en az 100 ise (SQL Server 2008'de (10.0.x) kullanıma sunulmuştur):
NOINDEX
belirtilmediği sürece,DBCC CHECKDB
tek bir tabloda ve tüm kümelenmemiş dizinlerinde hem fiziksel hem de mantıksal tutarlılık denetimleri gerçekleştirir. Ancak XML dizinlerinde uzamsal dizinler ve dizinlenmiş görünümlerde varsayılan olarak yalnızca fiziksel tutarlılık denetimleri gerçekleştirilir.WITH EXTENDED_LOGICAL_CHECKS
belirtilirse, mantıksal denetimler dizinli görünümde, XML dizinlerinde ve uzamsal dizinlerde gerçekleştirilir ve burada bulunur. Varsayılan olarak, fiziksel tutarlılık denetimleri mantıksal tutarlılık denetimleri öncesinde gerçekleştirilir.NOINDEX
de belirtilirse, yalnızca mantıksal denetimler gerçekleştirilir.
Bu mantıksal tutarlılık denetimleri, dizin nesnesinin iç dizin tablosunu başvurduğunu kullanıcı tablosuyla çapraz denetler. Satırları bulmak için iç ve kullanıcı tablolarının tam kesişimini gerçekleştirmek üzere bir iç sorgu oluşturulur. Bu sorguyu çalıştırmanın performans üzerinde önemli bir etkisi olabilir ve ilerleme durumu izlenemez. Bu nedenle, WITH EXTENDED_LOGICAL_CHECKS
yalnızca fiziksel bozulmayla ilgili olmayan dizin sorunlarından şüpheleniyorsanız veya sayfa düzeyi sağlama toplamları kapatılmışsa ve sütun düzeyinde donanım bozulmasından şüpheleniyorsanız belirtmeniz önerilir.
Dizin filtrelenmiş bir dizinse,
DBCC CHECKDB
dizin girdilerinin filtre koşulunu karşılayıp karşılamadığını doğrulamak için tutarlılık denetimleri gerçekleştirir.NOINDEX
belirtilmediği sürece uyumluluk düzeyi 90 veya daha azsa,DBCC CHECKDB
tek bir tabloda veya dizinlenmiş görünümde ve tüm onun kümelenmemiş ve XML dizinlerinde hem fiziksel hem de mantıksal tutarlılık denetimleri gerçekleştirir. Uzamsal dizinler desteklenmez.SQL Server 2016 (13.x) ve sonraki sürümlerinde, pahalı ifade değerlendirmelerinden kaçınmak için kalıcı hesaplanan sütunlar, UDT sütunları ve filtrelenmiş dizinler üzerinde ek denetimler varsayılan olarak çalışmaz. Bu değişiklik, bu nesneleri içeren veritabanlarında
CHECKDB
süresini büyük ölçüde azaltır. Ancak, bu nesnelerin fiziksel tutarlılık denetimi her zaman tamamlanır. YalnızcaEXTENDED_LOGICAL_CHECKS
seçenek belirtildiğinde,EXTENDED_LOGICAL_CHECKS
seçeneğinin (dizinli görünüm, XML dizinleri ve uzamsal dizinler) parçası olarak zaten mevcut olan mantıksal denetimlere ek olarak ifade değerlendirmeleri gerçekleştirilir.
Veritabanının uyumluluk düzeyini öğrenme
- Veritabanı uyumluluk düzeyini görüntüleme veya değiştirme
İç veritabanı anlık görüntüsü
DBCC CHECKDB
bu denetimleri gerçekleştirmek için gereken işlem tutarlılığı için bir iç veritabanı anlık görüntüsü kullanır. Bu, bu komutlar yürütülürken engelleme ve eşzamanlılık sorunlarını önler. Daha fazla bilgi için dbcc veritabanı anlık görüntü Seyrek Dosyasının Boyutunu Görüntüleme ve DBCC iç veritabanı anlık görüntü kullanımı bölümüne bakın. Anlık görüntü oluşturulamazsa veya TABLOCK
belirtilirse, DBCC CHECKDB
gerekli tutarlılığı elde etmek için kilitleri alır. Bu durumda, ayırma denetimlerini gerçekleştirmek için özel veritabanı kilidi ve tablo denetimlerini gerçekleştirmek için paylaşılan tablo kilitleri gerekir.
DBCC CHECKDB
bir iç veritabanı anlık görüntüsü oluşturulamıyorsa master
veritabanında çalıştırıldığında başarısız olur.
tempdb
üzerinde DBCC CHECKDB
çalıştırmak herhangi bir ayırma veya katalog denetimi gerçekleştirmez ve tablo denetimleri gerçekleştirmek için paylaşılan tablo kilitleri almalıdır. Bunun nedeni, performans nedenleriyle veritabanı anlık görüntülerinin tempdb
üzerinde kullanılamamasidir. Bu, gerekli işlem tutarlılığının alınamıyacağı anlamına gelir.
DBCC CHECKDB, SQL Server 2014'den başlayarak iç anlık görüntü veritabanı oluşturma
DBCC CHECKDB
bir iç anlık görüntü veritabanı oluşturur.İç anlık görüntü veritabanı fiziksel dosyalar kullanılarak oluşturulur. Örneğin ,
E:\Data\my_DB.ndf
veE:\Data\my_DB.ldf
E:\Data\my_DB.mdf
üç dosyası olandatabase_id = 10
olan bir veritabanı için, iç anlık görüntü veritabanıE:\Data\my_DB.mdf_MSSQL_DBCC11
veE:\Data\my_DB.ndf_MSSQL_DBCC11
dosyaları kullanılarak oluşturulur. Anlık görüntünündatabase_id
database_id + 1
. Ayrıca, yeni dosyaların<filename.extension>_MSSQL_DBCC<database_id_of_snapshot>
adlandırma kuralı kullanılarak aynı klasörde oluşturulduğunu unutmayın. İşlem günlüğü için seyrek dosya oluşturulmaz.Yeni dosyalar, dosya sistemi düzeyinde seyrek dosyalar olarak işaretlenir. Yeni dosyalar tarafından kullanılan Disk Boyutu,
DBCC CHECKDB
komutu sırasında kaynak veritabanında ne kadar verinin güncelleştirildiği temelinde artar. Yeni dosyaların Boyutu,.mdf
veya.ndf
dosyasıyla aynıdır.Yeni dosyalar,
DBCC CHECKDB
işlemenin sonunda silinir.DBCC CHECKDB
tarafından oluşturulan bu seyrek dosyaların "Kapatıldığında Sil" öznitelikleri ayarlanmıştır.
Uyarı
DBCC CHECKDB
komutu devam ederken işletim sistemi beklenmeyen bir kapatmayla karşılaşırsa, bu dosyalar temizlenmez. Bunlar yer kaplar ve gelecekteki DBCC CHECKDB
yürütmelerinde hatalara neden olabilir. Bu durumda, şu anda yürütülmekte olan bir DBCC CHECKDB
komutu olmadığını onayladıktan sonra bu yeni dosyaları silebilirsiniz.
Yeni dosyalar, Windows Gezgini gibi sıradan dosya yardımcı programları kullanılarak görülebilir.
Not
SQL Server 2014'den (12.x) önce, iç anlık görüntü dosyalarını oluşturmak için dosya akışları olarak adlandırılmıştı. Adlandırılmış dosya akışları, :MSSQL_DBCC<database_id_of_snapshot>>filename.extension <biçimini kullandı. Adlandırılmış dosya akışları, Windows Gezgini gibi sıradan dosya yardımcı programları kullanılarak görünmez. Bu nedenle, SQL Server 2012 (11.x) ve önceki sürümlerinde, ReFSbiçimlendirilmiş bir birimde bulunan veritabanı dosyaları için DBCC CHECKDB
komutunu çalıştırdığınızda 7926 ve 5030 hata iletileriyle karşılaşabilirsiniz. Bunun nedeni, dosya akışlarının Dayanıklı Dosya Sistemi (RefS)oluşturulamamadır.
FILESTREAM verilerini denetleme ve onarma
Bir veritabanı ve tablo için FILESTREAM etkinleştirildiğinde, isteğe bağlı olarak dosya sisteminde varbinary(max) ikili büyük nesneleri (BLOB' lar) depolayabilirsiniz. DBCC, dosya sisteminde BLOB'ları depolayan bir veritabanında DBCC CHECKDB
kullanırken, dosya sistemi ile veritabanı arasındaki bağlantı düzeyinde tutarlılığı denetler.
Örneğin, bir tabloda FILESTREAM özniteliğini kullanan varbinary(max) sütunu varsa, DBCC CHECKDB
dosya sistemi dizinleri ile dosyalar ile tablo satırları, sütunları ve sütun değerleri arasında bire bir eşleme olup olmadığını denetler.
REPAIR_ALLOW_DATA_LOSS
seçeneğini belirtirseniz DBCC CHECKDB
bozulmayı onarabilir. FILESTREAM bozulmasını onarmak için DBCC, dosya sistemi verileri eksik olan tüm tablo satırlarını siler.
En iyi yöntemler
Üretim sistemlerinde sık kullanım için PHYSICAL_ONLY
seçeneğini kullanmanızı öneririz.
PHYSICAL_ONLY
kullanmak, büyük veritabanlarında DBCC CHECKDB
için çalışma süresini büyük ölçüde kısaltabilir. Ayrıca DBCC CHECKDB
düzenli aralıklarla hiçbir seçenek olmadan çalıştırmanızı öneririz. Bu çalıştırmaları ne sıklıkta gerçekleştirmeniz gerektiği, tek tek işletmelere ve üretim ortamlarına bağlıdır.
Azure SQL Yönetilen Örneği'nin kullanılabilir depolama alanı, verilerin gerçekte ne kadarının kullanıldığına bakılmaksızın DBCC CHECKDB
tarafından oluşturulan iç veritabanı anlık görüntü dosyasının tamamını barındırmalıdır. Bu durum, sql yönetilen örneğinizde yer olmaması nedeniyle çok büyük ama seyrek bir veritabanında (verilerin boyutu veritabanı dosya boyutundan çok daha küçük) DBCC CHECKDB
yürütmenin başarısız olmasına neden olabilir.
DBCC CHECKDB
yürütme sırasında tüm kullanılabilir depolama alanını kullanırsa aşağıdaki hata iletisini alırsınız:
Msg 1133, Level 16, State 3, Line 1
The managed instance has reached its storage limit. To storage usage for the managed instance cannot exceed (...) MBs.
You might need to temporarily scale up your SQL managed instance storage capacity before running `DBCC CHECKDB` again.
Nesneleri paralel olarak denetleme
Varsayılan olarak, DBCC CHECKDB
nesneleri paralel olarak denetler. Paralellik derecesi sorgu işlemcisi tarafından otomatik olarak belirlenir. En yüksek paralellik derecesi aynı paralel sorgular gibi yapılandırılır. DBCC denetimi için kullanılabilen en fazla işlemci sayısını kısıtlamak için sp_configurekullanın. Daha fazla bilgi için bkz. Sunucu yapılandırması: en yüksek paralellik derecesi. Paralel denetim, İzleme Bayrağı 2528 kullanılarak devre dışı bırakılabilir. Daha fazla bilgi için bkz. İzleme Bayrakları.
Not
Bu özellik SQL Server'ın her sürümünde kullanılamaz. Daha fazla bilgi için Sürümleri ve SQL Server 2022desteklenen özelliklerinin RDBMS yönetilebilirliği bölümünde paralel tutarlılık denetimi bölümüne bakın.
DBCC hata iletilerini anlama
DBCC CHECKDB
komutu tamamlandıktan sonra SQL Server hata günlüğüne bir ileti yazılır. DBCC komutu başarıyla yürütülürse, ileti başarılı olduğunu ve komutun çalıştırıldığını gösterir. DBCC komutu bir hata nedeniyle denetimi tamamlamadan önce durursa, ileti komutun sonlandırıldığını, durum değerini ve komutun çalıştırıldığı süreyi gösterir. Aşağıdaki tabloda iletiye dahil edilebilecek durum değerleri listelenmiştir ve açıklanmaktadır.
Devlet | Açıklama |
---|---|
0 |
Hata numarası 8930 oluşturuldu. Bu, DBCC komutunu sonlandıran meta verilerde bozulma olduğunu gösterir. |
1 |
Hata numarası 8967 oluşturuldu. bir iç DBCC hatası oluştu. |
2 |
Acil durum modu veritabanı onarımı sırasında bir hata oluştu. |
3 |
Bu, DBCC komutunu sonlandıran meta verilerde bozulma olduğunu gösterir. |
4 |
Onay veya erişim ihlali algılandı. |
5 |
DBCC komutunu sonlandıran bilinmeyen bir hata oluştu. |
SQL Server, bir veritabanı için tutarlılık denetiminin çalıştırıldığı tarihi ve saati hatasız (veya "temiz" tutarlılık denetimi) kaydeder. Bu, last known clean check
olarak bilinir. Bir veritabanı ilk kez başlatıldığında, bu tarih EventLog'a (EventID-17573) yazılır ve hata günlüğü aşağıdaki biçimde olur:
CHECKDB for database '<database>' finished without errors on 2022-05-05 18:08:22.803 (local time). This is an informational message only; no user action is required.
Hata raporlama
SQL Server LOG
dizininde, DBCC CHECKDB
bir bozulma hatası algılandığında bir yığın dökümü (SQLDump<nnnn>.txt
, SQLDump<nnnn>.log
, SQLDump<nnnn>.mdmp
) oluşturulur. sql server örneği için Özellik Kullanımı veri toplama ve Hata Raporlama özellikleri etkinleştirildiğinde, dosya otomatik olarak Microsoft'a iletilir. Toplanan veriler SQL Server işlevselliğini geliştirmek için kullanılır.
Döküm dosyası, DBCC CHECKDB
komutunun sonuçlarını ve ek tanılama çıkışını içerir. Erişim, SQL Server hizmet hesabı ve sysadmin rolünün üyeleriyle sınırlıdır. Varsayılan olarak sysadmin rolü, Windows BUILTIN\Administrators
grubunun ve yerel yönetici grubunun tüm üyelerini içerir. Veri toplama işlemi başarısız olursa DBCC komutu başarısız olmaz.
Hataları düzeltme
DBCC CHECKDB
tarafından herhangi bir hata bildirilirse, REPAIR_*
seçeneklerden biriyle DBCC CHECKDB
çalıştırmak yerine veritabanını veritabanı yedeğinden geri yüklemenizi öneririz. Yedekleme yoksa, onarım çalıştırılırken bildirilen hatalar düzeltilir. Kullanılacak onarım seçeneği, bildirilen hatalar listesinin sonunda belirtilir. Ancak, REPAIR_ALLOW_DATA_LOSS
seçeneğini kullanarak hataları düzeltmek için bazı sayfaların ve dolayısıyla bazı verilerin silinmesi gerekebilir.
Bazı durumlarda, veritabanına sütunun veri türüne göre geçerli olmayan veya aralık dışında değerler girilebilir.
DBCC CHECKDB
tüm sütun veri türleri için geçerli olmayan sütun değerlerini algılayabilir. Bu nedenle, SQL Server'ın önceki sürümlerinden yükseltilen veritabanlarında DATA_PURITY
seçeneğiyle DBCC CHECKDB
çalıştırmak, önceden var olan sütun-değer hataları ortaya çıkabilir. SQL Server bu hataları otomatik olarak onaramadığından sütun değeri el ile güncelleştirilmelidir.
CHECKDB
böyle bir hata algılarsa, CHECKDB
bir uyarı, hata numarası 2570 ve etkilenen satırı tanımlamak ve hatayı el ile düzeltmek için bilgiler döndürür.
Onarım, kullanıcının yapılan değişiklikleri geri almasına izin vermek için bir kullanıcı işlemi altında gerçekleştirilebilir. Onarımlar geri alınırsa, veritabanı hala hatalar içerir ve bir yedekten geri yüklenmesi gerekir. Onarımlar tamamlandıktan sonra veritabanını yedekleyin.
Veritabanı acil durum modundaki hataları düzeltme
veritabanı ALTER DATABASE deyimi kullanılarak acil durum moduna ayarlandığında, DBCC CHECKDB
REPAIR_ALLOW_DATA_LOSS
seçeneği belirtilirse veritabanında bazı özel onarımlar gerçekleştirebilir. Bu onarımlar normalde kurtarılamayan veritabanlarının fiziksel olarak tutarlı bir durumda yeniden çevrimiçi olmasına olanak tanıyabilir. Bu onarımlar son çare olarak ve yalnızca veritabanını yedekten geri yükleyemediğinizde kullanılmalıdır. Veritabanı acil durum moduna ayarlandığında, veritabanı READ_ONLY olarak işaretlenir, günlük devre dışı bırakılır ve erişim sysadmin sabit sunucu rolünün üyeleriyle sınırlıdır.
Not
DBCC CHECKDB
komutunu bir kullanıcı işleminin içinde acil durum modunda çalıştıramaz ve yürütmeden sonra işlemi geri alamazsınız.
Veritabanı acil durum modunda olduğunda ve REPAIR_ALLOW_DATA_LOSS
yan tümcesiyle DBCC CHECKDB
çalıştırıldığında aşağıdaki eylemler yapılır:
DBCC CHECKDB
, G/Ç veya sağlama toplamı hataları nedeniyle erişilemez olarak işaretlenmiş sayfaları sanki hatalar oluşmamış gibi kullanır. Bunu yapmak, veritabanından veri kurtarma olasılığını artırır.DBCC CHECKDB
, normal günlük tabanlı kurtarma tekniklerini kullanarak veritabanını kurtarmayı dener.veritabanı kurtarma işlemi işlem günlüğü bozulması nedeniyle başarısız olursa, işlem günlüğü yeniden oluşturulur. İşlem günlüğünün yeniden oluşturulması işlem tutarlılığının kaybolmasına neden olabilir.
Uyarı
REPAIR_ALLOW_DATA_LOSS
seçeneği, bilinen son iyi yedeklemeden geri yükleme işlemine kıyasla daha fazla veri kaybına neden olabilir. bkz. REPAIR_ALLOW_DATA_LOSS ile Veri kaybı uyarısı
DBCC CHECKDB
komutu başarılı olursa, veritabanı fiziksel olarak tutarlı bir durumdadır ve veritabanı durumu ÇEVRİmİÇİ olarak ayarlanır. Ancak, veritabanı bir veya daha fazla işlem tutarsızlığı içerebilir. tüm iş mantığı açıklarını belirlemek ve veritabanını hemen yedeklemek için DBCC CHECKCONSTRAINTS çalıştırmanızı öneririz.
DBCC CHECKDB
komutu başarısız olursa veritabanı onarılamaz.
REPAIR_ALLOW_DATA_LOSS ile veri kaybı uyarısı
REPAIR_ALLOW_DATA_LOSS
seçeneği SQL Server'ın desteklenen bir özelliğidir. Ancak, veritabanını fiziksel olarak tutarlı bir duruma getirmek için her zaman en iyi seçenek olmayabilir. Başarılı olursa, REPAIR_ALLOW_DATA_LOSS
seçeneği veri kaybına neden olabilir.
Aslında, bir kullanıcının veritabanını bilinen son iyi yedeklemeden geri yüklemesinden daha fazla veri kaybına neden olabilir. Microsoft, DBCC CHECKDB
tarafından bildirilen hatalardan kurtarmak için her zaman bilinen son iyi yedeklemeden birincil yöntem olarak bir kullanıcı geri yüklemesini önerir.
REPAIR_ALLOW_DATA_LOSS
seçeneği, bilinen iyi bir yedeklemeden geri yükleme için alternatif . Yalnızca yedeklemeden geri yükleme mümkün değilse kullanılması önerilen acil durum son çare seçeneğidir.
Günlüğü yeniden derledikten sonra tam ACID garantisi yoktur.
Günlüğü yeniden derledikten sonra DBCC CHECKDB
otomatik olarak gerçekleştirilir ve hem raporlar hem de fiziksel tutarlılık sorunlarını giderir.
Mantıksal veri tutarlılığı ve iş mantığı tarafından zorlanan kısıtlamalar el ile doğrulanmalıdır.
İşlem günlüğü boyutu varsayılan boyutuna bırakılır ve el ile son boyutuna geri ayarlanmalıdır.
Çoğaltılan veritabanlarında DBCC CHECKDB'REPAIR_ALLOW_DATA_LOSS çalıştırma
DBCC CHECKDB
komutunun REPAIR_ALLOW_DATA_LOSS
seçeneğiyle çalıştırılması, kullanıcı veritabanlarını (yayın ve abonelik veritabanları) ve çoğaltma tarafından kullanılan dağıtım veritabanını etkileyebilir. Yayın ve abonelik veritabanları, yayımlanan tabloları ve çoğaltma meta verileri tablolarını içerir. Bu veritabanlarında aşağıdaki olası sorunlara dikkat edin:
Yayımlanan tablolar. bozuk kullanıcı verilerini onarmak için
CHECKDB
işlemi tarafından gerçekleştirilen eylemler çoğaltılamayabilir:Birleştirme çoğaltması, yayımlanan tablolardaki değişiklikleri izlemek için tetikleyicileri kullanır. satırlar
CHECKDB
işlemi tarafından eklenir, güncelleştirilir veya silinirse tetikleyiciler tetiklenmez; bu nedenle, değişiklik çoğaltılamaz.İşlem çoğaltması, yayımlanan tablolardaki değişiklikleri izlemek için işlem günlüğünü kullanır. Ardından Günlük Okuyucu Aracısı bu değişiklikleri dağıtım veritabanına taşır. Bazı DBCC onarımları günlüğe kaydedilmiş olsa da Günlük Okuyucu Aracısı tarafından çoğaltılamaz. Örneğin, bir veri sayfası
CHECKDB
işlemi tarafından serbest bırakılırsa, Günlük Okuyucu Aracısı bu ayırmayı delete deyimine çevirmez; bu nedenle, değişiklik çoğaltılamaz.Çoğaltma meta veri tabloları. bozuk çoğaltma meta verileri tablolarını onarmak için
CHECKDB
işlemi tarafından gerçekleştirilen eylemler, çoğaltmanın kaldırılmasını ve yeniden yapılandırılmasını gerektirir.
DBCC CHECKDB
komutunu bir kullanıcı veritabanında veya dağıtım veritabanında REPAIR_ALLOW_DATA_LOSS
seçeneğiyle çalıştırmanız gerekiyorsa:
Sistemi sessize al: Çoğaltma topolojisindeki veritabanında ve diğer tüm veritabanlarında etkinliği durdurun ve ardından tüm düğümleri eşitlemeyi deneyin. Daha fazla bilgi için bkz. Bir Çoğaltma Topolojisini Sessize Alma (Çoğaltma Transact-SQL Programlama) .
DBCC CHECKDB
yürüt.DBCC CHECKDB
raporu dağıtım veritabanındaki tabloların onarımlarını veya kullanıcı veritabanındaki çoğaltma meta verileri tablolarını içeriyorsa, çoğaltmayı kaldırın ve yeniden yapılandırın. Daha fazla bilgi için bkz. Yayımlama ve Dağıtım devre dışı bırakma.DBCC CHECKDB
raporu çoğaltılan tablolar için onarımlar içeriyorsa, yayındaki verilerle abonelik veritabanları arasındaki farkların olup olmadığını belirlemek için veri doğrulama gerçekleştirin.
Sonuç kümesi
DBCC CHECKDB
aşağıdaki sonuç kümesini döndürür. değerler, ESTIMATEONLY
, PHYSICAL_ONLY
veya NO_INFOMSGS
seçeneklerinin belirtilmemiş olduğu durumlar dışında değişebilir:
DBCC results for 'model'.
Service Broker Msg 9675, Level 10, State 1: Message Types analyzed: 13.
Service Broker Msg 9676, Level 10, State 1: Service Contracts analyzed: 5.
Service Broker Msg 9667, Level 10, State 1: Services analyzed: 3.
Service Broker Msg 9668, Level 10, State 1: Service Queues analyzed: 3.
Service Broker Msg 9669, Level 10, State 1: Conversation Endpoints analyzed: 0.
Service Broker Msg 9674, Level 10, State 1: Conversation Groups analyzed: 0.
Service Broker Msg 9670, Level 10, State 1: Remote Service Bindings analyzed: 0.
DBCC results for 'sys.sysrowsetcolumns'.
There are 630 rows in 7 pages for object 'sys.sysrowsetcolumns'.
DBCC results for 'sys.sysrowsets'.
There are 97 rows in 1 pages for object 'sys.sysrowsets'.
DBCC results for 'sysallocunits'.
There are 195 rows in 3 pages for object 'sysallocunits'.
There are 0 rows in 0 pages for object "sys.sysasymkeys".
DBCC results for 'sys.syssqlguides'.
There are 0 rows in 0 pages for object "sys.syssqlguides".
DBCC results for 'sys.queue_messages_1977058079'.
There are 0 rows in 0 pages for object "sys.queue_messages_1977058079".
DBCC results for 'sys.queue_messages_2009058193'.
There are 0 rows in 0 pages for object "sys.queue_messages_2009058193".
DBCC results for 'sys.queue_messages_2041058307'.
There are 0 rows in 0 pages for object "sys.queue_messages_2041058307".
CHECKDB found 0 allocation errors and 0 consistency errors in database 'model'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC CHECKDB
, NO_INFOMSGS
belirtildiğinde aşağıdaki sonuç kümesini (ileti) döndürür:
The command(s) completed successfully.
DBCC CHECKDB
, PHYSICAL_ONLY
belirtildiğinde aşağıdaki sonuç kümesini döndürür:
DBCC results for 'model'.
CHECKDB found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC CHECKDB
, ESTIMATEONLY
belirtildiğinde aşağıdaki sonuç kümesini döndürür.
Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
13
(1 row(s) affected)
Estimated TEMPDB space needed for CHECKTABLES (KB)
--------------------------------------------------
57
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
İzinler
sysadmin sabit sunucu rolüne veya db_owner sabit veritabanı rolüne üyelik gerektirir.
Örnekler
A. Hem geçerli hem de başka bir veritabanını denetleme
Aşağıdaki örnek, geçerli veritabanı ve AdventureWorks2022
veritabanı için DBCC CHECKDB
yürütür.
-- Check the current database.
DBCC CHECKDB;
GO
-- Check the AdventureWorks2022 database without nonclustered indexes.
DBCC CHECKDB (AdventureWorks2022, NOINDEX);
GO
B. Geçerli veritabanını denetle, bilgilendiren iletileri gizle
Aşağıdaki örnek geçerli veritabanını denetler ve tüm bilgilendirme iletilerini gizler.
DBCC CHECKDB WITH NO_INFOMSGS;
GO