Veritabanı Hatalarını Düzeltme DBCC CHECKDB

Tuncay ÖZER Tuncay ÖZER


Ağustos 2019 SQL Server (6) 0


Veritabanı Hatalarını Düzeltme DBCC CHECKDB

Merhaba aktif durumda kullandığınız veritabanında çeşitli olarak hatalara maruz kalarak çalışamaz durumu gelebilir bu durumda 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. Örnek veritabanımızın adı= MIRSAD olsun. Kullanacağımız SQL komutları;
DBCC CHECKDB MIRSAD
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 ‘MIRSAD’. DBCC execution completed. If DBCC printed error messages, contact your system administrator." olacaktır.
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.
DBCC CHECKDB ('MIRSAD',NOINDEX)
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.
ALTER DATABASE MIRSAD SET SINGLE_USER
GO
DBCC CHECKDB('MIRSAD',REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE MIRSAD SET MULTI_USER

REPAIR_FAST : Veri kaybı olmadan hızlıca hataları düzeltmek için kullanılır.

ALTER DATABASE MIRSAD SET SINGLE_USER
GO
DBCC CHECKDB('MIRSAD',REPAIR_FAST)
GO
ALTER DATABASE MIRSAD SET MULTI_USER
 
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.
ALTER DATABASE MIRSAD SET SINGLE_USER
GO
DBCC CHECKDB('MIRSAD',REPAIR_REBUILD)
GO
ALTER DATABASE MIRSAD SET MULTI_USER

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

DBCC CHECKDB('MIRSAD') WITH ESTIMATEONLY

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

DBCC CHECKDB('MIRSAD') WITH PHYSICAL_ONLY

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.

DBCC CHECKDB('MIRSAD') WITH TABLOCK

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

DBCC CHECKDB ('MIRSAD') WITH NO_INFOMSGS

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

DBCC CHECKDB ('MIRSAD') WITH ALL_ERRORMSGS

Sadece hata mesajlarının listelenmesini isterseniz;

DBCC CHECKDB ('MIRSAD') WITH NO_INFOMSGS,ALL_ERRORMSGS

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.