SQL Server – DBCC CHECKDB ile Veritabanı Kontrolü

DBCC CHECKDB
Parametre olarak verilen veritabanının bütünlük kontrolleri yapılır. Veritabanında oluşturulan her index içeriği doğrulanır, FILESTREAM kullanılıyorsa metadata ve dosya sistemi arasındaki uyumluluk kontrol edilir.

dbcc_checkdb

Eğer tabloda veya index’lerde bulunan verilerde herhangi bir sorun varsa bunu mesaj penceresinde görüyor olacaktık. Mesajların sonuna indiğimizde ;

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

CHECKDB sonucunda bize herhangi bir hata olmadığı bilgisini iletiyor. Sırası ile CHECKDB komutunun alabileceği parametreleri görelim.

DATABASE_Name – DATABASE_ID
CHECKDB komutu veritabanı adı veya veritabanı id bilgisi verilerek çalıştırılır. Parametre verilmeden çalıştırılırsa o anda aktif olan veritabanı için CHECKDB komutu çalışır.

[sql]

DBCC CHECKDB (‘AdventureWorks’)

[/sql]

NOINDEX
CHECKDB işlemine tâbi tutulacak veritabanda bulunan Non-Clustered index’lerin kontrol işlemine tâbi tutulmaması için NOINDEX parametresini kullanabiliriz. Index’ler kontrol edilmeyeceği için CHECKDB işlemi daha hızlı sonlanacaktır.

 

[sql]

DBCC CHECKDB (‘AdventureWorks’,NOINDEX)

[/sql]

REPAIR_ALLOW_DATA_LOSS – REPAIR_FAST – REPAIR_REBUILD
CHECKDB işlemi sonrasında tablo veya index’lerde kayıt sorunu varsa bu kayıtlarda oluşan hataları düzeltmek için kullanılan komutlardır. Bu komutlar kullanılmadan önce veritabanı Single User Mode alınmış olmalıdır.
REPAIR_ALLOW_DATA_LOSS
DBCC CHECKDB işleminde raporlanan hataları düzeltmek için kullanılır. Düzeltme işleminde veri kaybı meydana gelebilir. Bu komut çalıştırılmadan önce yedek alınması yararınıza olacaktır.

[sql]

ALTER DATABASE AdventureWorks SET SINGLE_USER
GO
DBCC CHECKDB(‘AdventureWorks’,REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE AdventureWorks SET MULTI_USER

[/sql]

REPAIR_FAST
Geriye dönük uyumluluğu sağlamak için kullanılır, herhangi bir onarım gerçekleştirmez.

[sql]

ALTER DATABASE AdventureWorks SET SINGLE_USER
GO
DBCC CHECKDB(‘AdventureWorks’,REPAIR_FAST)
GO
ALTER DATABASE AdventureWorks SET MULTI_USER

 [/sql]

REPAIR_REBUILD
Veri kaybı olmadan hataları düzelmek için kullanılır. Bu işlemde index rebuild yapılması veya index’te eksik kayıtların index’e dahil edilmesi işlemi vb.

[sql]

ALTER DATABASE AdventureWorks SET SINGLE_USER
GO
DBCC CHECKDB(‘AdventureWorks’,REPAIR_REBUILD)
GO
ALTER DATABASE AdventureWorks SET MULTI_USER

[/sql]

ESTIMATEONLTY
DBCC CHECKDB işlemi için TempDB‘de kullanılacak olan alanın tahmini değerini verir.

[sql]

DBCC CHECKDB(‘AdventureWorks’) WITH ESTIMATEONLY

[/sql]

PHYSICAL_ONLY
DBCC CHECKDB işleminin kısıtlı halidir. Daha kısa sürdüğü için Production ortamlarında kullanılabilir.

 

[sql]

DBCC CHECKDB(‘AdventureWorks’) WITH PHYSICAL_ONLY

[/sql]

TABLOCK
CHECKDB işleminde TABLOCK parametresi işlemin daha kısa sürmesini sağlar ancak veritabanına erişimi bir süreliğine durdurur.

[sql]

DBCC CHECKDB(‘AdventureWorks’) WITH TABLOCK

[/sql]

NO_INFOMSGS
CHECKDB işleminde bilgi mesajlarının gösterilmemesi için kullanabilirsiniz.

[sql]
DBCC CHECKDB (‘AdventureWorks’) WITH NO_INFOMSGS
[/sql]

ALL_ERRORMSGS

Tüm mesajların listelenmesi için kullanılır.

[sql]

DBCC CHECKDB (‘AdventureWorks’) WITH ALL_ERRORMSGS

[/sql]

Sadece hata mesajlarının listelenmesini isterseniz;

[sql]
DBCC CHECKDB (‘AdventureWorks’) WITH NO_INFOMSGS,ALL_ERRORMSGS
[/sql]

NOT: Veritabanlarının sağlıklı çalışabilmesi için belli aralıklarla CHECKDB kontrollerinin yapılması önerilir. Maintenance Plan ‘ınıza eklemenizi tavsiye ederim.

 

autocad lt satın al

Mesut Güneş

Selçuk Üniversitesi Bilgisayar programcılığı bölümünden mezun olduktan sonra birçok firmada Yazılım, İş zekası ve Veritabanı Uzmanı olarak çalıştım. Şuan Türkiye’nin en büyük şirketlerinden biri olan Doğan Online’da Veritabanı Yöneticisi olarak çalışıyorum.

You may also like...

4 Responses

  1. yunus dedi ki:

    merhaba kullandığım programın sql datasını bilgisayara format atarken yanlışlıkla sildim. Windows u yeniden kurduğumda datayı sildiğimi fark ettim. Veri kurtarma yazılımı ile dataları kurtardım. hem mdf hemde ldf dosyaları var fakaz veri tabanı açılmıyor. Bunu tekrar kullanılabilir hale getirebilirmiyiz. Verdiği hata SQL server detected a logical consistency-based i/o error: unable to dectrypt page due to missing DEK. It occurred during a read of page (0:0) is database ID 0 at offset 000000000000000 in file ‘c:\xxx\ns2019.mdf’. Additional massages in the SQL server error log or system event log may provide more detail. This is severe error condition that threatens database integrity and must be corrected immediately. Complate a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online. budur.

  2. Selcuk dedi ki:

    REPAIR_FAST için yazdığınız bilgi hatalı.

    “Maintains syntax for backward compatibility only. No repair actions are performed.”

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.