SQL Server’da Veritabanını Suspect Moddan Kurtarmak
Herkese merhaba,
Bu yazıda SQL Server’da veritabanını Suspect moddan kurtarmak ile ilgili bilgi vermeye çalışacağım.
SQL Server’da bazı durumlarda veritabanınız Suspect modda olabilir.
SQL Server sunucusu, dosyaları zarar gördüğünde ve veritabanı hasarlı dosyayı onaramadığından dolayı veritabanı suspect moda geçer. Böyle bir durumda veritabanına bağlanmak, veritabanından veri okumak ve yazmak için bağlanamazsınız.
SQL Server veritabanı Suspect moda başka hangi durumlarda düşer?
- Corrupt olmuş MDF, NDF veya LDF dosyaları.
- Veritabanının erişilemeyen veri dosyaları.
- Sistemin aniden kapanması veya yanlış bir şekilde kapatılması.
- Rollback ve roll forward işlemlerinin tamamlanamaması.
- Storage’daki disk alanının çok düşük kalması.
- Sistem sorunları.
- Ani elektrik kesintileri.
- Donanım arızası.
Bu Durumda Ne Yapmalıyız?
1. Suspect modu sıfırlamak için.
EXEC SP_RESETSTATUS 'VeritabanıAdi';
2. Veritabanı bakımının güvenli bir şekilde gerçekleştirmek veya sorun gidermek amacıyla veritabanını EMERGENCY moda alırız.
ALTER DATABASE VeritabanıAdi SET EMERGENCY
3.Veritabanında oluşan mantıksal ve fiziksel hataların tespit edilmesi ve gerekirse onarılması için DBCC CHECKDB yapılmalıdır. Burada yapılacak kontrolün daha hızlı yapılabilmesi için kontrolün sadece fiziksel yapılması seçeneğiyle ilerleyebiliriz. Büyük veritabanları için PHYSICAL_ONLY seçeneği tercih edilebilir.
DBCC CHECKDB ('VeritabanıAdi')
--ya da
DBCC CHECKDB ('VeritabanıAdi') WITH PHYSICAL_ONLY;
4.Veritabanını SINGLE_USER modunda ROLLBACK TRANSACTION’a getiriyoruz. Bu komutla tek bir kullanıcının erişiminde veritabanı üzerindeki sorguların işlemlerinin bitmesini beklemeden direkt olarak ROLLBACK yaparak sessionlarını sonlandırmasını sağlarız.
ALTER DATABASE VeritabanıAdi SET SINGLE_USER WITH ROLLBACK IMMEDIATE
5.Suspect moda düşmüş veritabanının Full Backup’ını alın. Bir sonraki işlem olası veri kaybı sorunlarını göze alan bir işlem olduğu için bu Backup’a ihtiyacımız olabilir.
BACKUP DATABASE [VeritabanıAdi]
TO DISK = N'D:\BackupPath\VeritabanıAdiYedek.bak'
WITH COPY_ONLY,
NOFORMAT,
NOINIT,
NAME = N'VeritabanıAdiYedek-Full Database BACKUP',
SKIP,
NOREWIND,
NOUNLOAD,
STATS = 10;
GO
6.Veri kaybına izin veren aşağıdaki komutla bütün hataları düzeltmesini hedeflemekteyiz.
DBCC CHECKDB ('VeritabanıAdi', REPAIR_ALLOW_DATA_LOSS)
7.Yukarıdaki komut başarılı bir şekilde yürütüldüğünde veritabanını MULTI_USER moduna getirin.
ALTER DATABASE VeritabanıAdi SET MULTI_USER
Yukarıdaki işlemleri gerçekleştirebilmeniz için sysadmin yetkisine sahip olmanız gerekmektedir.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.