Dr. Volkan Tunalı'nın Kişisel Blogu

Bilgisayar, Bilim, Teknoloji, Sanat

Bozuk SQL Server Veritabanı Kurtarma

7 comments

Zaman zaman müşterilerimizin MS SQL Server 2000 veritabanı dosyalarında bozulmalar oluyor. Çoğunlukla bu bozulmaları DBCC CHECKDB komutuyla tamir etmek mümkün oluyor. Ancak bazen öyle bozulmalarla karşılaşıyoruz ki CHECKDB bile yapılamıyor. Böyle durumlar için kullandığımız ve her zaman işimize yaramış bir prosedür önereceğim. Gün gelir hayat kurtarıcı olabilir.

0- Bozuk veritabanının detach edilmiş olduğunu varsayıyoruz öncelikle.

1- Aynı isimle boş bir database oluşturun.

2- select status from sysdatabases where name= 'db_name' ile yeni yaratılan database’in durumunu kontrol edin. Dönecek değer “1077936153″ gibi bir değerdir. (db_name:Yeni yaratılan database’in adı)

3- Database’in durumunu Emergency (bypass recovery) moduna geçirmek için sysdatabasestablosunda database’in status bilgisini değiştirmek gerekir.
Bunun için (sysdatabases tablosunda update yapabilmek için) şu satırları çalıştırın:
–> sp_configure 'allow update',1

–> Reconfigure WITH OVERRIDE

4- update sysdatabases set status = -32768 where name='db_name' ile status değerini değiştirin.

5- SQL Server servisini durdurun.

6- Bozuk data dosyasını boş data dosyası uzerine kopyalayın. Yeni database’in log dosyasını silin.

7- SQL Server servisini çalıştırın.

8- DBCC rebuild_log('db_name','c:\data\....._log.ldf') satırını çalıştırın.

9-Warning: The log for database ‘test’ has been
rebuilt. Transactional consistency has been lost. DBCC CHECKDB should
be run to validate physical consistency. Database options will have to
be reset, and extra log files may need to be deleted
.” mesajını alırsınız.

10- Daha sonra dbcc checkdb('db_name') komutunu çalıştırın.

11- Database DBA use only modundadır. Özellikler->Options bölümünden restrict access check’ini kaldırın.

12- Şu satırları çalıştırın:
–> sp_configure 'allow update',0
–> reconfigure WITH OVERRIDE

13- Database’iniz kullanıma hazır olacaktır.

Komutların doğru sırası aşağıdaki gibi izlenmeli :

sp_configure 'allow updates',1
go

reconfigure with override
go

update sysdatabases

set status=-32768 where dbid=DB_ID(‘db_name’)
go

sp_configure ‘allow updates’,0
go

reconfigure with override
go

dbcc rebuild_log(‘db_name’,'c:\data\DB0001_log.ldf’)

go

dbcc checkdb(‘db_name’)
go

Written by vtunali

Ekim 28th, 2007 at 1:59 pm

7 Responses to 'Bozuk SQL Server Veritabanı Kurtarma'

Subscribe to comments with RSS or TrackBack to 'Bozuk SQL Server Veritabanı Kurtarma'.

  1. Geçenlerde bir müşterimizde aniden gücü kesilerek kapanan bir sunucuda tüm veritabanları suspect durumundaydı. DBCC ile durumu hakkında bilgi de alınamıyordu. Detach edip attach etmeyi denediğimizde MDF ve LDF arasında uyumsuzluk olduğuna dair hatalar aldık. Tek başına MDF’yi attach etmeyi denedik anca bu da işe yaramdı. Bu durumda son çare olarak yukarıda açıkladığımız yöntemi uyguladık ve başarılı olduk. Neyse ki MDF’lerde bir sorun yoktu, tek sorun log dosyalarındaydı.

    vtunali

    3 Ara 10 at 11:44

  2. Vallahi emeğinize elinize sağlık kullandım ve başarılı oldu yürekten teşekkür ederim.anlaşılmaz bir sürü kaynakla uğraştım..48 saatlik stress ve uğraşın sonunda yukarıdaki yöntemle.45 dakikada çözüldü.

    Musa Ulaş

    17 May 12 at 12:27

  3. İşe yaradığına sevindim. Bu yöntem bizim de çok işimize yaramıştı.

    Burada bu yorumları okuyanlara bir uyarıda bulunayım. Bu yöntem sadece SQL Server 2000 sürümü için geçerli. 2005 ve üzeri sürümlerde işe yaramayacaktır. Bu yeni sürümlerde kurtarma için başka araçlar/komutlar var, müsait bir zaman bunlardan da bahsetmeyi düşünüyorum.

    vtunali

    17 May 12 at 12:31

  4. Volkan bey merhaba
    Yukarıdaki adımları kullanarak bozuk olan bir sql datasını kurtarmaya çalışırken 8. adımdan sonra şu mesajı aldım “msg -1073741769,level 20, state 0, line 0
    sunucuya istek gönderilirken aktarım düzeyi hatası oluştu.(provider: paylaşılan bellek sağlayıcısı, error:1 – okuma/yazma işleminde G/Ç hatası algılandı”
    yardımcı olursanız sevinirim
    teşekkürler

    feyzullah güneş

    28 Haz 12 at 19:28

  5. 7. adımda belirtildiği gibi SQL Server’ı başlatmamış olabilir misiniz? Hata mesajına göre bağlantı sorunu var; SQL sunucuyu başlatıp bu komutları çalıştırdığınız programla (Query Analyzer veya komut satırında isql gibi birşey muhtemelen) sunucuya tekrar bağlantı kurun.

    vtunali

    28 Haz 12 at 19:30

  6. Yukarıdaki işlemlerle ldf si gitmiş açılmayan db’yi kurtardık. Çok teşekkürler

    serdar

    30 Eki 12 at 17:03

  7. Sayın Tunalı ;
    Çok teşekkür ederim.Yazınız çok işime yaradı.

    Fatih AKDENIZ

    18 Ağu 13 at 01:27

Leave a Reply

DIKKAT! Devam edebilmek icin su basit matematik isleminin cevabini girmelisiniz (otomatik spam botlarini onlemek icin) :-)

14 + 15 ?
Please leave these two fields as-is: