MSSQL Database Suspect İşlemleri

Veritabanı sunucunuzda herhangi bir tutarsızlık veya kontrolsüz bir şekilde sürekli yeniden başlamalar gibi sorunlar neticesinde veritabanınız Suspect’e düşebilir. Suspect’e düşmüş veritabanlarında genelde veri kayıpları veya veritabanı bütünlüğünde hatalar oluşma ihtimali kuvvetle muhtemeldir. Yine transaction loglarınızda kalan işlemlerin database’e insertlenmeside aksayacağı için bu durumdanda ileri gelen bir veri kaybınız olabilir.

Fakat yinede mevcut veritabanınızı tüm hatalara rağmen kurtarmanız gerekebilir. Eğer ki veritabanınızda çok fazla bir hasar söz konusu değilsede bu veri kaybını en az ile atlatabilmenizde mümkün. Şimdi dilerseniz Suspect’ten çıkma işlemlerine değinelim.

Suspect’e düşmüş veritabanında yapılacak işlemler listesi sırasıyla şöyledir.

Database durumunu resetliyoruz.
[php]EXEC SP_RESETSTATUS ‘DATABASEADI'[/php]

Database ile ilgili işlemleri gerçekleştirebilmek için Single moda çekiyoruz.
[php]ALTER DATABASE DATABASEADI SET SINGLE_USER[/php]

Database’i Emergency Moda alıyoruz.
[php]ALTER DATABASE DATABASEADI SET EMERGENCY[/php]

Aşağıdaki sorguyla öncelikle Database durumunu kontrol edebilirsiniz. Eğer database boyutunuz çok yüksekse ve pek fazla vaktiniz yoksa atlamanızı öneririm. Bu sorgu herhangi bir işlem yapmayıp bilgi veren bir sorgudur.

[php]DBCC CHECKDB (‘DATABASEADI’)[/php]

Daha hızlı bir şekilde kontrol içinse Index bütünlüğünü bypass edebilirsiniz. Bunun için ise

[php]DBCC CHECKDB(‘DATABASEADI’, NOINDEX)[/php]

kullanılabilir.

Database için gerekli olan Repair işlemlerini başlatmak için aşağıdaki sorguları kullanacağız.

[php]DBCC CheckDB (‘DATABASEADI’,REPAIR_REBUILD)[/php] veya DBCC CheckDB (‘DATABASEADI’,REPAIR_ALLOW_DATA_LOSS)

[php]DBCC CheckDB (‘DATABASEADI’,REPAIR_ALLOW_DATA_LOSS)[/php] komutuyla yapılacak işlem verikayıplarına sebebiyet verecektir daha doğrusu bu şekilde bir Repair işlemi verikayıplarının önemsenmediği bir Repair işlemidir. Fakat yinede mecburen yapmanız gerekbilir.

Database’i tekrardan Multi User a çekiyoruz. Sorgu başarısız olur ise SQL Management Studio üzerindende bu işlemi yapabilirsiniz.

[php]ALTER DATABASE DATABASEADI SET MULTI_USER[/php]

Tüm işlemleri ise tek bir seferde şu şekilde gerçekleştirebilirsiniz.

[php]EXEC SP_RESETSTATUS ‘DATABASEADI’
GO
ALTER DATABASE DATABASEADI SET SINGLE_USER
GO
ALTER DATABASE DATABASEADI SET EMERGENCY
GO
DBCC CheckDB (‘DATABASEADI’,REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE DATABASEADI SET MULTI_USER[/php]

Uyarılar ve Öneriler

1) Başlatılan bir Repair işlemini gerekmediği sürece yarıda kesmeyiniz.
2) Suspect olmuş bir Database’i kesinlikle Deattach etmeyiniz.
3) Database’i Sıngle Mod a çekseniz bile Database’i kullanacak tüm sistemleri durdurunuz.

Sohbete katılın

4 yorum

  1. slm mumkun se sızın ıcın benım bır paket programım var ve hata alıyorum yardımcı olabılır mısınız…?

  2. selam sql 2000 de de suspetc islemi aynımıdır bu komutları kullanarak denedim ama hata verdi

Yorum Gönderin

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.