Suspect Mode Database

10 Nisan 2022 Pazar

Sql Server ile ugrasan herkesin basina gelmesi kuvvetle muhtemel bir durumdur bir veritabaninin "Suspect" duruma gelmesi
Bu durumun telafisi için birden çok çözüm mevcut bunlari sirasiyla yazacagim. Ancak her seyden önce bilmeniz gereken bazi detaylar var

REPAIR_FAST : Geriye dönük veri onarim islevini gerçeklestirir. Veri kaybi olmaz fakat hata alma olasiligi digerlerine göre daha fazladir.
REPAIR_REBUILD : Bir önceki islevden bir sonuç alinamadigi zaman kullanilabilir, veri kaybi olmaz fakat hata alma olasiligi vardir. 
REPAIR_ALLOW_DATA_LOSS : Rebuild yaptiginiz halde hata almissaniz bu islemi deneyebilirsiniz fakat veri kaybi olasiligi vardir. Bu nedenle öncesinde yedekleme yapilmalidir.
Önemli bir hatirlatma : Suspect modundaki veritabanini sakin "Detach" etmeyin yoksa bir daha "Attach" edemezsiniz. Bu yüzden mutlaka ilk is olarak .mdf ve .log dosyalarini yedekleyip asagidaki yöntemlerle sansinizi deneyin. Her denemeden sonra SQL server’ i yeniden baslatmayi unutmayin.
 

1.       DbName yazan yerleri suspect olmus veritabaninizin adiyla degistirin ve komutu çalistirin.

             EXEC SP_RESETSTATUS ’DbName’;

             ALTER DATABASE DbName SET EMERGENCY

             DBCC CHECKDB(’DbName’)

             ALTER DATABASE DbName SET SINGLE_USER WITH ROLLBACK IMMEDIATE

             DBCC CHECKDB (’DbName’, REPAIR_ALLOW_DATA_LOSS)

             ALTER DATABASE DbName SET MULTI_USER

 

            2.       Yukaridaki kodlardan sonuç alamadiysaniz bunlari deneyin :

DBCC CHECKDB (‘DbName’, REPAIR_ALLOW_DATA_LOSS)
DBCC CHECKDB (‘DbName’)
DBCC CHECKDB (‘DbName’, REPAIR_REBUILD) 

 

3.       Ve üçüncü olarak iki seçenek de fayda etmediyse :

USE master;
GO
EXEC sp_resetstatus’DbName’;
USE DbName;
DBCC CHECKDB WITH NO_INFOMSGS;

 

4.       Son olarak seçenegimiz kalmadiginda asagidakileri kullanabiliriz

USE master;
GO

ALTER DATABASE DbName SET EMERGENCY
ALTER DATABASE DbName SET SINGLE_USER
DBCC CHECKDB(DbName, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;
USE DbName;
DBCC CHECKDB WITH NO_INFOMSGS;

 

Bunları da beğenebilirsiniz.