16 Şubat 2011 Çarşamba

Microsoft SQL Veritabanını EMERGENCY Mode ile Kurtarma (Recovery) Yöntemi.

Microsoft SQL Veritabanını EMERGENCY Mode ile Kurtarma (Recovery) Yöntemi.
Bir Sql veritabanı genelde 2 dosyadan oluşur ve tüm tablo, prosedür, view,indeks gibi  nesnelerin hepsini bu dosyalarda tutar. Eğer bir sebepten dolayı dosyada bi bozukluk tutarsızlık meydana gelirse dosyayı  mdf ve ldf dosyalarımızı atach ederken aşağıdaki gibi korkutucu bir mesajla karşılaşabiliriz.
 
Bizim bu mesajı aldığımız veritabanı  sql 2005 express edition’da yaşandı. Ve çözüm için tavsiye edilen yöntemleri önce sql2008 R2, sql2008 express gibi sunucularda denedim ancak bunlarda belli bir aşamadan sonra veri dosyasının upgrade etmemizi söyleyen bir mesajla karşılaştım. Bu sebeple dosya hangi versiyonda bir veritabanında iken sıkıntı oluştu ise o versiyonda bir db sunucusunda çözüme çalışmak lazım.



İlk yapacağımız iş kendi dosyalarımızı atach edemediğimizden sql’i kandırarak attach edilmiş gibi göstermek.  Bunun için bozuk veritabanı ile aynı isimde bir veritabanı oluşturalım. Bizim yaptığımız uygulamda dosyalarımızın konumları aşağıdaki resimdeki gibidir.



Yukarıdaki gibi yeni veritabanını oluşturduktan sonra dosyalarının nerede olduğunu Path sütunundan görebiliriz.  Sonra veritabanımızı offline yapalım ya da sunucuyu durduralım.

Daha sonra bozuk olan veritabanımıza ait dosyaları yeni oluşturduğumuz veritabanına ait dosyaların üzerine kopyalayalım.



















 Yukarıdaki  ..\bd klasöründe bozuk data dosyaları  aşağıdaki  ....\dd klasöründe de  yeni oluşturduğum aynı isimdeki veritabanı dosyaları mevcut. Bozukları yenilerin üzerine kopyalıyoruz.

Sonra sunucuyu durdurdu ise başlatıyoruz. Veritabanını offline yapmış ise online duruma getiriyoruz.  

Evet yukarıda görüldüğü gibi veritabanımız “SUSPECT” moda geldi. Şimdi veritabanımızı  “EMERGENCY” moda getirerek  erişip kurtarma işlemine başlayacağız. 




















select name,database_id,state,state_desc from sys.databases
bu sorguyu çalıştırdığımızda SQL sunucumuzdaki  veritabanlarının durumlarını görebiliriz. Eğer veritabanımız SUSPECT moduna düştü ise  state sütununda 4, state_desc sütununda SUSPECT görülecektir.

Sonra veritabanımızı EMERGENCY moduna çekmek için aşağıdaki t-sql sorgusunu çalıştıralım.
ALTER DATABASE DATA SET EMERGENCY

Sonrada veritabanında  DCCC komutunu ( tutarlılık kontrolü) uygulamak için SINGLE_USER (tek kişinin kullanabileceği) moda çekmemiz gerekli. Bunun için aşağıdaki t-sql sorgusunu çalıştıralım. Sonrada DBCC komutumuzu REPAIR_ALLOW_DATA_LOSS parametresi ile çalıştıralım, böylece kurtaramadığı veri olsa bile işlemine devam edecek. (kalan sağlar bizimdir)

ALTER DATABASE DATA SET SINGLE_USER




Bu aşamada veritabanımıza arayüzden baktığımızda bu şekilde görünecektir.

DBCC CHECKDB (DATA, REPAIR_ALLOW_DATA_LOSS)



DBCC komutunun çıktısı resimde görüldüğü gibidir. Hatalar listelenmekte ve düzeltme işlemi raporlanmaktadır.


En son olarakda veritabanımızı tekrar MULTI_USER moduna alabiliriz.

ALTER DATABASE DATA SET MULTI_USER

Daha sonra veritabanımızı artık ONLINE hale getirebiliriz.

 ALTER DATABASE DATA SET ONLINE




Eğer EMERGENCY moddan ONLINE moda geri dünülemez ise, boş bir database oluşturalım  ve EMERGENCY modunda olan veritabanımızdaki istediğimiz nesneleri yeni oluşturduğumuz veritabanına import/export işlemi ile taşıyalım.

Geçmiş olsun.


4 yorum:

Unknown dedi ki...

saat 03:00 büyük bi dert olmuştu teşekkür ederim :)

Unknown dedi ki...

paylaşım için tşk.ler.

Unknown dedi ki...

acil acil hocam kolay gelsin sol orka muhasebe programı kullanıyoruz bilgisayarımız dondu ve açıldı açıldığında orka 2015 yılı ekim Kasım Aralık kayıtlarımız silindi mydiske verdik bize dediği verileriniz bozuldu ama düzeltilmesi lazim dedi bizde harddiski aldık bunun düzelme imkanı varmidir

Fatih ÜNAL dedi ki...

Orka'yı bilmiyorum. Benim bu post'ta yaptığım işlem bir arkadaşın .net ürününe ait SQL veri tabanı idi. orka veritabanı sql ile ve direk db'ye erişim imkanı varsa uğraşılabilir.

bazı bedava araçlar var bunlar kurmatmak için para istiyor ama ekrana verileri okuyup görüntülüyor. veriyi okuduğunu görürsen ümit var demektir. örnek http://www.sqlrecoverytool.com/ bunu denemedim. google searchte buldum. Bir dene görüntülerse db'n kurtulur.

Yardımcı olabilirim eğer hala çözülmedi ise.

Kolay gelsin.