SQL Server Veritabanını Suspect Moddan Kurtarma
  1. Anasayfa
  2. SQL Server

SQL Server Veritabanını Suspect Moddan Kurtarma

0

SQL Server sunucusu, dosyaları zarar gördüğünde ve veritabanı hasarlı dosyayı onaramadığından suspect moda geçer. Böyle bir durumda ilgili veritabanına bağlanmak, veritabanından veri okumak ve yazmak için bağlanamazsınız.

Örnek bir senaryo olarak bir veritabanının log file ını farklı bir klasöre taşımak üzere modify ederken File Name kısmını yanlış yazılmasından kaynaklanan ve veritabanını Offline moda çektikten sonra log file ını taşınacak klasöre kopyalama işlemi sonrası, veritabanını Online moda çekmeye çalıştığımda log file’ını ilgili klasörde doğru bir şekilde bulamayışından kaynaklı veritabanının modunun Suspect’e düşerken gözlemlemiş bulunmaktayım.

Peki 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 Neler Yapmalıyız?

  1. Suspect modu öncelikle sıfırlamak için:

EXEC SP_RESETSTATUS ‘DatabaseName’;

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 DatabaseName 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 (‘DatabaseName ‘)

ya da

DBCC CHECKDB (‘DatabaseName’) 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 DatabaseName 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 [DEMO] TO DISK = N’D:\BackupPath\DatabaseName.bak’

WITH COPY_ONLY

,NOFORMAT

,NOINIT

,NAME = N’DatabaseName-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 (‘DatabaseName’, 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 DatabaseName SET MULTI_USER

Bu işlemleri gerçekleştirebilmeniz için sysadmin olmanız gerekmektedir.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

https://www.mshowto.org

https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-ver15

TAGs: Online, Offline, Suspect, Emergency, Database States, SQL Server, Database States in SQL Server, DBCC, DBCC CHECKDB, REPAIR_ALLOW_DATA_LOSS, SP_RESETSTATUS, Rollback

Bu İçeriğe Tepkin Ne Oldu?
  • 40
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Trakya Üniversitesi - Bilgisayar Mühendisliği mezunuyum. Öğrenim hayatım boyunca C, C++, C#, VB.NET ve ASP.NET MVC dilleri ile SQL Server veri tabanı altyapılı çeşitli otomasyon projelerinde yer aldım. İş hayatıma ERP Software Support Specialist pozisyonuyla başlayıp kısa bir süre sonra kariyerime BELBİM Elektronik Para ve Ödeme Hizmetleri A.Ş.'de Ms SQL Database Administrator pozisyonu ile yön vermiş bulunmaktayım. SQL Server ile birlikte Data Warehouse, Oracle ve PostgreSQL alanlarına ilgiliyim ve kendimi bu alanlarda geliştirmeye devam ediyorum.

Yazarın Profili
İlginizi Çekebilir

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir