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