Birkaç gün önce suspect olmuş bir SQL Server veritabanını kurtarmak için epey uğraştım. Kurtarmaya çalıştığım veritabanı replikasyon için oluşturulan Distribution veritabanı idi. Ne veritabanına erieşbiliyordum ne de üzerinde birazdan bahsettiğim komutları çalıştırabiliyordum. Benzer durumlar ile karşılaşacak arkadaşlar aşağıdaki komutları denemeden veritabanınızı gözden çıkarmayın.
Bir database'in suspect moda düşmesi demek database dosyalarından (mdf,ldf,ndf) en az birini okurken bir sorunla karşılaşmış olması anlamına gelir.
Genel olarak bu sorunlar, Database dosyaları bozulmuş olabilir. Sistemde yeterli disk alanı kalmamış olabilir. Yeterli memory kalmamış olabilir. Database dosyaları silinmiş ya da işletim sistemi dosyaların kullanılmasına izin vermiyor olabilir. Server düzgün kapatılmadığı için ya da bir takım donanımsal sorunlar yüzünden dosyalar okunamıyor olabilir. Bu moda düşen bir database'i normale çevirmek için aşağıdaki komutları kullanırız.
--Database'in statüsünü resetleme komutu. Bu Sayede Manuel İşlem Yapabileceğiz
EXEC sp_resetstatus 'dbName';
--Database'i emergency (Kurtarma) moda çekiyoruz.
ALTER DATABASE dbName SET EMERGENCY ;
--Database tablolarında ya da dosyalarında bir bozukluk var mı onu kontrol eden komut.
DBCC checkdb('dbNAme');
--Database'i single moda çekiyoruz.
ALTER DATABASE SET dbName SINGLE_USER WITH ROLLBACK IMMEDIATE ;
--Database'de bir bozukluk var ise veri kaybına izin verecek şekilde düzenleme yapıyoruz. Log dosyası silinir ve yeni bir yeni boş bir log dosyası oluşturulur. Bu sırada log dosyasındaki kaydedilmeyen veriler silinir.
DBCC CheckDB ('dbName', REPAIR_ALLOW_DATA_LOSS);
--Database'i kullanıma açıyoruz.
ALTER DATABASE dbName SET MULTI_USER;
Database'imizi artık gönül rahatlığıyla Kullanabiliriz. Select .. Vs Komut Çalıştırarak Denemelerimizi Yapabiliriz.