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:
saat 03:00 büyük bi dert olmuştu teşekkür ederim :)
paylaşım için tşk.ler.
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
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.
Yorum Gönder