Aracılığıyla paylaş


DBCC CHECKTABLE (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

Tabloyu veya dizine alınan görünümü oluşturan tüm sayfaların ve yapıların bütünlüğünü denetler.

Transact-SQL söz dizimi kuralları

Sözdizimi

DBCC CHECKTABLE
(
    table_name | view_name
    [ , { NOINDEX | index_id }
     | , { 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

| table_nameview_name

Bütünlük denetimlerinin çalıştırıldığı tablo veya dizinli görünüm. Tablo veya görünüm adları tanımlayıcıları için kurallarla uyumlu olmalıdır.

NOINDEX

Kullanıcı tabloları için kümelenmemiş dizinlerin yoğun denetimlerinin gerçekleştirilmemesi gerektiğini belirtir. Bu, genel yürütme süresini azaltır. NOINDEX sistem tablolarını etkilemez çünkü bütünlük denetimleri her zaman tüm sistem tablosu dizinlerinde gerçekleştirilir.

index_id

Bütünlük denetimlerinin çalıştırıldığı dizin tanımlama (KIMLIK) numarası. index_id belirtilirse, DBCC CHECKTABLE yığın veya kümelenmiş dizinle birlikte yalnızca bu dizinde bütünlük denetimleri çalıştırır.

REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD

DBCC CHECKTABLE bulunan hataları onardığını belirtir. Onarım seçeneğini kullanmak için veritabanının tek kullanıcılı modda olması gerekir.

  • ONAR_VERİ_KAYBINA_İZİN_VER

    Bildirilen tüm hataları onarmaya çalışır. Bu onarımlar veri kaybına neden olabilir.

  • Hızlı Onarım

    Söz dizimi yalnızca geriye dönük uyumluluk için korunur. Hiçbir onarım eylemi gerçekleştirilmez.

  • Tamir_Yeniden İnşa

    Veri kaybı olasılığı olmayan onarımlar gerçekleştirir. Bu, 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

ONARIM seçeneklerini yalnızca son çare olarak kullanın. 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 CHECKTABLE bir onarım seçeneği olmadan çalıştırın. REPAIR_ALLOW_DATA_LOSS düzeyini kullanıyorsanız, bu seçenekle DBCC CHECKTABLE çalıştırmadan önce veritabanını yedeklemenizi öneririz.

ALL_ERRORMSGS

Sınırsız sayıda hata 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.

EXTENDED_LOGICAL_CHECKS

Uyumluluk düzeyi SQL Server 2008'de (10.0.x) sunulan 100 ise, dizinli 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 yer alan Açıklamalar bölümündeki Dizinler Mantıksal Tutarlılık Denetimleri Gerçekleştirme bölümüne bakın.

NO_INFOMSGS

Tüm bilgilendirme iletilerini gizler.

TABLOCK

DBCC CHECKTABLE iç veritabanı anlık görüntüsü kullanmak yerine paylaşılan tablo kilidi almasına neden olur. TABLOCK, DBCC CHECKTABLE yoğun yük altındaki bir tabloda daha hızlı çalışmasına neden olur, ancak DBCC CHECKTABLE çalışırken tabloda kullanılabilen eşzamanlılığı azaltır.

TAHMINE GÖRE

tempdb diğer tüm belirtilen seçeneklerle çalıştırmak için gereken tahmini DBCC CHECKTABLE alanını görüntüler.

PHYSICAL_ONLY

Denetimi sayfanın fiziksel yapısının, kayıt üst bilgilerinin ve B ağaçlarının fiziksel yapısının bütünlüğüyle sınırlar. Tablonun fiziksel tutarlılığı için küçük bir ek yük denetimi sağlamak üzere tasarlanan bu denetim, bozuk sayfaları ve verilerin güvenliğini tehlikeye atabilecek yaygın donanım hatalarını da algılayabilir. DBCC CHECKTABLE tam çalıştırması önceki sürümlerden çok daha uzun sürebilir. Bu davranış aşağıdaki nedenlerden dolayı 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.

Not

Belgelerde genellikle dizinlere başvuruda B ağacı terimi kullanılır. Rowstore dizinlerinde Veritabanı Altyapısı bir B+ ağacı uygular. Bu, bellek için iyileştirilmiş tablolardaki columnstore dizinleri veya dizinleri için geçerli değildir. Daha fazla bilgi için SQL Server ve Azure SQL dizin mimarisi ve tasarım kılavuzuna bakın.

Bu nedenle, PHYSICAL_ONLY seçeneğinin kullanılması büyük tablolarda DBCC CHECKTABLE için çok daha kısa bir çalışma süresine neden olabilir ve bu nedenle üretim sistemlerinde sık kullanım için önerilir. Yine de DBCC CHECKTABLE 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. PHYSICAL_ONLY her zaman NO_INFOMSGS anlamına gelir ve onarım seçeneklerinden herhangi biriyle birlikte kullanılamaz.

Not

PHYSICAL_ONLY belirtilmesi, DBCC CHECKTABLE FILESTREAM verilerinin tüm denetimlerini atlamasına neden olur.

DATA_PURITY

DBCC CHECKTABLE geçerli olmayan veya aralık dışında olan sütun değerlerinin tablosunu denetlemesine neden olur. Örneğin, DBCC CHECKTABLEdatetime 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, belirli bir tablodaki hataları bulmak ve düzeltmek için DBCC CHECKTABLE WITH DATA_PURITY kullanabilirsiniz; ancak, DBCC CHECKDB WITH DATA_PURITY veritabanında hatasız çalıştırılana kadar tablodaki sütun-değer denetimleri varsayılan olarak etkinleştirilmez. Bundan sonra DBCC CHECKDB ve DBCC CHECKTABLE varsayılan olarak sütun-değer bütünlüğünü denetleyin.

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. DBCC CHECKDB tarafından bildirilen veritabanı tutarlılığı hatalarını giderme.

PHYSICAL_ONLY belirtilirse, sütun bütünlüğü denetimleri gerçekleştirilmez.

MAXDOP

için geçerlidir: SQL Server 2014 (12.x) Service Pack 2 ve sonraki sürümleri.

deyimi için sp_configure yapılandırma seçeneğini geçersiz kılar. MAXDOP, sp_configureile yapılandırılan değeri aşabilir. MAXDOP, Resource Governor ile yapılandırılan değeri aşarsa, Veritabanı Altyapısı ALTER WORKLOAD GROUP (Transact-SQL) bölümünde açıklanan Resource Governor MAXDOP değerini kullanır. MAXDOP sorgu ipucunu kullandığınızda, en yüksek paralellik derecesi yapılandırma seçeneğiyle kullanılan tüm semantik kurallar uygulanabilir. Daha fazla bilgi için bkz. En yüksek paralellik derecesini yapılandırma Sunucu Yapılandırma Seçeneği.

Not

MAXDOP sıfır olarak ayarlanırsa, sunucu en yüksek paralellik derecesini seçer.

Açıklamalar

Not

Veritabanındaki her tabloda DBCC CHECKTABLE gerçekleştirmek için DBCC CHECKDBkullanın.

Belirtilen tablo için DBCC CHECKTABLE aşağıdakileri denetler:

  • Dizin, satır içi, LOB ve satır taşması veri sayfaları doğru şekilde bağlanır.
  • Dizinler doğru sıralama düzenlerindedir.
  • İşaretçiler tutarlıdır.
  • Her sayfadaki veriler makuldür ve hesaplanmış sütunlar içerir.
  • Sayfa uzaklıkları makul.
  • Temel tablodaki her satır, her bir kümelenmemiş dizinde eşleşen bir satıra sahiptir ve tam tersi de geçerlidir.
  • Bölümlenmiş tablo veya dizindeki her satır doğru bölümdedir.
  • FILESTREAM kullanarak dosya sisteminde varbinary(max) verileri depolarken dosya sistemi ile tablo arasında bağlantı düzeyinde tutarlılık.

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 100 (SQL Server 2008 (10.0.x)) veya üzeriyse:

    • NOINDEX belirtilmediği sürece, DBCC CHECKTABLE 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 çok yüksek 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 CHECKTABLE dizin girdilerinin filtre koşulunu karşılayıp karşılamadığını doğrulamak için tutarlılık denetimleri gerçekleştirir.

  • SQL Server 2016'dan (13.x) başlayarak, 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 CHECKTABLE süresini büyük ölçüde azaltır. Ancak, bu nesnelerin fiziksel tutarlılık denetimleri her zaman tamamlanır. Yalnızca EXTENDED_LOGICAL_CHECKS seçenek belirtildiğinde, EXTENDED_LOGICAL_CHECKS seçeneğinin bir parçası olarak mantıksal denetimlerin (dizinli görünüm, XML dizinleri ve uzamsal dizinler) yanı sıra gerçekleştirilen ifade değerlendirmeleri de vardır.

  • Uyumluluk düzeyi 90 (SQL Server 2005 (9.x)) veya daha azsa, NOINDEX belirtilmediği sürece DBCC CHECKTABLE tek bir tabloda veya dizine alınan görünümde ve tüm kümelenmemiş ve XML dizinlerinde hem fiziksel hem de mantıksal tutarlılık denetimleri gerçekleştirir. Uzamsal dizinler desteklenmez.

Veritabanının uyumluluk düzeyini öğrenmek için

  • Veritabanı Uyumluluk Düzeyini Görüntüleme veya Değiştirme

İç veritabanı anlık görüntüsü

DBCC CHECKTABLE, bu denetimleri gerçekleştirmek için gerekli işlem tutarlılığını sağlamak için bir iç veritabanı anlık görüntüsü kullanır. Daha fazla bilgi için veritabanı anlık görüntüsünün seyrek boyutunu görüntüleme (Transact-SQL) ve DBCC (Transact-SQL)DBCC iç veritabanı anlık görüntü kullanımı bölümüne bakın.

Anlık görüntü oluşturulamıyorsa veya TABLOCK belirtilirse, DBCC CHECKTABLE gerekli tutarlılığı elde etmek için paylaşılan bir tablo kilidi alır.

Not

DBCC CHECKTABLE tempdbkarşı çalıştırılırsa, paylaşılan bir tablo kilidi almalıdır. Bunun nedeni, performans nedenleriyle veritabanı anlık görüntülerinin tempdbüzerinde kullanılamamasıdır. Bu, gerekli işlem tutarlılığının alınamadığı anlamına gelir.

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 tabloda DBCC CHECKTABLE 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 CHECKTABLE 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. DBCC CHECKTABLE seçeneğini belirtirseniz REPAIR_ALLOW_DATA_LOSS bozulmayı onarabilir. FILESTREAM bozulmasını onarmak için DBCC, dosya sistemi verileri eksik olan tüm tablo satırlarını siler ve tablo satırı, sütun veya sütun değeriyle eşleşmeyen dizinleri ve dosyaları siler.

Nesneleri paralel olarak denetleme

Varsayılan olarak, DBCC CHECKTABLE nesneleri paralel olarak denetler. Paralellik derecesi sorgu işlemcisi tarafından otomatik olarak belirlenir. En yüksek paralellik derecesi, paralel sorgular ile aynı şekilde 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. En yüksek paralellik derecesini yapılandırma Sunucu Yapılandırma Seçeneği.

Paralel denetim, İzleme Bayrağı 2528 kullanılarak devre dışı bırakılabilir. Daha fazla bilgi için bkz. İzleme Bayrakları (Transact-SQL).

Not

DBCC CHECKTABLE işlemi sırasında, bayt sıralı kullanıcı tanımlı tür sütununda depolanan baytlar, kullanıcı tanımlı tür değerinin hesaplanan serileştirmesine eşit olmalıdır. Bu doğru değilse, DBCC CHECKTABLE yordamı bir tutarlılık hatası bildirecektir.

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 CHECKTABLE 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ıyla tamamlandığını 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 komutunun sonlandırmasına neden olan bir meta veri bozulmasını 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 komutunun sonlandırmasına neden olan bir meta veri bozulmasını gösterir.
4 Onay veya erişim ihlali algılandı.
5 DBCC komutunu sonlandıran bilinmeyen bir hata oluştu.

Hata raporlama

SQL Server SQLDUMP<nnnn>.txt dizininde, LOG bir bozulma hatası algılandığında bir mini döküm dosyası (DBCC CHECKTABLE) 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 CHECKTABLE komutunun sonuçlarını ve ek tanılama çıkışını içerir. Dosya isteğe bağlı erişim denetimi listelerini (DACL' ler) kısıtlamıştır. 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 CHECKTABLE herhangi bir hata bildirirse, REPAIR seçeneklerinden biriyle REPAIR çalıştırmak yerine veritabanını veritabanı yedeğinden geri yüklemenizi öneririz. Yedekleme yoksa, REPAIR komutunu çalıştırmak bildirilen hataları düzeltebilir. Kullanılacak REPAIR seçeneği, bildirilen hatalar listesinin sonunda belirtilir. Ancak, REPAIR_ALLOW_DATA_LOSS seçeneğini kullanarak hataların düzeltilmesi için bazı sayfaların ve dolayısıyla verilerin silinmesi gerekebilir.

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ı yine hatalar içerir ve bir yedekten geri yüklenmelidir. Tüm onarımları tamamladıktan sonra veritabanını yedekleyin.

Sonuç kümeleri

DBCC CHECKTABLE aşağıdaki sonuç kümesini döndürür. Yalnızca tablo adını veya seçeneklerden herhangi birini belirtirseniz aynı sonuç kümesi döndürülür.

DBCC results for 'HumanResources.Employee'.
There are 288 rows in 13 pages for object 'Employee'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

DBCC CHECKTABLE, ESTIMATEONLY seçeneği belirtilirse aşağıdaki sonuç kümesini döndürür:

Estimated TEMPDB space needed for CHECKTABLES (KB)
--------------------------------------------------
21
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

İzinler

Kullanıcının tabloya sahip olması veya sysadmin sabit sunucu rolünün, db_owner sabit veritabanı rolünün veya db_ddladmin sabit veritabanı rolünün üyesi olması gerekir.

Örnekler

A. Belirli bir tabloyu denetleme

Aşağıdaki örnek, AdventureWorks2022 veritabanındaki HumanResources.Employee tablosunun veri sayfası bütünlüğünü denetler.

DBCC CHECKTABLE ('HumanResources.Employee');
GO

B. Tabloda düşük ek yük denetimi gerçekleştirme

Aşağıdaki örnek, AdventureWorks2022 veritabanındaki Employee tablosunda düşük ek yük denetimi gerçekleştirir.

DBCC CHECKTABLE ('HumanResources.Employee') WITH PHYSICAL_ONLY;
GO

C. Belirli bir dizini denetleme

Aşağıdaki örnek, sys.indexeserişilerek elde edilen belirli bir dizini denetler.

DECLARE @indid int;
SET @indid = (SELECT index_id
              FROM sys.indexes
              WHERE object_id = OBJECT_ID('Production.Product')
                    AND name = 'AK_Product_Name');
DBCC CHECKTABLE ('Production.Product',@indid);

Ayrıca bkz.