Veri Kurtarma da İzlenicek Yöntemler
Yöntem 1 (Log Dosyası Bozulan) :
SQL veri tabanlarını detach etmeden taşımaya çalışmak veya elektrik kesintisi gibi sebeplerden dolayı hasar görmekte ve daha sonra attach işlemi esnasında hata vererek dosya kullanılamamaktadır. Aşağıdaki adımlar izlenerek bu dosyalar kurtarılabilmektedir. Bu kurtarma işlemi her zaman olumlu sonuç vermeyebileceğinden yedek alma alışkanlığı müşterilere kazandırılmalıdır.
1. Bu durumdaki datayı, başka bir klasöre kopyalayınız.
2. Yeni bir database oluşturun. (SQL Enterprise manager veya DBConnect içerisinden oluşturabilirsiniz). Eski database dosyalarının ismi ile aynı olsun.
3. SQL server'ı durdurun.
4. Eski (bozuk) dosyaları, yeni oluşturduklarımızın üzerine kopyalayın.
5. SQL server'ı çalıştırın.
6. SQL Enterprise Manager'a girin, database alanında ilgili veritabanının yanında "Suspect" yazdığını göreceksiniz.
7. SQL Enterprise Manager'dan, SQL sunucumuzun adı üzerinde sağ click yapıp "Properties" menüsüne tıklayın. Gelen pencerede "Server settings" sekmesini seçip, "Allow modifications to be made directly to the system catalogs" parametresini işaretleyip OK tuşuna basın.
8. SQL Enterprise Manager'dan, Databases / Master / Tables / sysdatabases tablosunu açıp (Open table, Return all rows), ilgili (bozuk – yanında “suspect yazan) veritabanının "Status" alanına 32768 yazın.
9. SQL server'ı durdurup yeniden başlatın. SQL Enterprise Manager'da Databases kısmında yenile seçerseniz, ilgili (bozuk) veritabanının "Emergency mode" olarak gözüktüğünü göreceksiniz.
10. SQL Enterprise Manager veya DBConnect içerisinden yeni bir database oluşturun. (Oluşturulan database in Collation Name değerlerinin Turkish_CS_AS olması gerekmektedir) . Database tablolarını create etmeyiniz.
11. SQL Enterprise Manager içerisinde Database alanında sağ click yapıp Tüm Görevler/Export Data seçeneği ile data transfer işlemini yapacağız.
12. Kaynak olarak (ilk gelen menüde) Emergency Mode olan (eski bozuk database) veri tabanını, hedef olarak (ikinci gelen menüde) da son açtığımız yeni veri tabanını seçin.
13. Diğer gelen menüleri onaylayarak data transfer işlemini gerçekleştirin. Ekrana gelen menüde tüm tablolar seçilmelidir. Aynı ekranda Excellent veritabanı için POSX,CKARTX,TAKSITX gibi tablo olmayan (isimlerin yanında türleri yazmaktadır bu dosyalara view türündedir) dosyalar seçilmemelidir. Bu dosyalar programa girişte otomatik olarak oluşturulacaktır.
14. Son olarak DBConnet içerisinde yeni oluşturulan database tanımlanmalı ve bu database için create index işlemi uygulanmalıdır
Örnek ;
Bozuk dosyamız , DBConnect içerisinde Sentez2006 bağlantısının (Database Connections) Database alanında yazılı olan Sentez2006 database dosyası olsun. Bu dosya C:\Sentez2006 klasöründe bulunan Sentez2006_data.mdf ve Sentez2006_log.ldf dosyaları olsun.
- Bu dosyaları yeni oluşturacağımız C:\Sentez2006\Emergency klasörüne taşıyalım. (kes – yapıştır)
- C:\Sentez2006 klasörü içerisine Sentez2006_data.mdf ve Sentez2006_log.ldf dosyalarını oluşturmak için SQL Enterprise Manager veya DBConnect yardımıyla yeni bir database oluşturalım. (Klasör ve dosya ismine dikkat edelim , bozuk dosya ile aynı olsun)
- C:\Sentez2006\Emergency klasörüne taşıdığımız dosyaları SQL Server’ ı stop ettikten sonra yeni oluşturulan dosyaların üzerine kopyalayalım (C:\Sentez2006 klasörü)
- SQL server start edildikten sonra yukarıda anlatıldığı gibi (6. 7. ve 8. maddeler) düzenlemeleri yaparak. Database isminin yanında Emergency Mode yazısını görelim.
- SQL Enterprise Manager veya DBConnect yardımıyla yeni bir database oluşturalım. (C:\Sentez2006 klasörüne Sen2006_data.mdf , Sen2006_log.ldf gibi). Collation Name değerlerinin Turkish_CS_AS olması gerekmektedir ve database tablolarını create etmeyiniz.
- SQL Enterprise Manager içerisinde bulunan Database/Export Data seçeneği kullanılarak eski database (Sentez2006_data.mdf) dosyasındaki verileri yeni oluşturulan (Sen2006_data.mdf) dosyasına aktaralım. Burada sadece tablolar seçilmelidir.
- Son olarak DBConnect içerisine girilerek Sentez2006 bağlantısının (Database Connections) Database alanında yazılı olan Sentez2006 yerine Sen2006 yazıp kayıt edelim. Sentez2006 bağlantısı üzerinde DataManager seçeneği seçilerek yeni oluşturulan database için Index Create işlemi yapılarak işlemi sonlandıralım.
Yöntem 2 :
1. Database options menüsünden ‘single user’ moduna alınır.
2. Enterprise Manager kapatılıp osql yada QueryAnalyser açılır.
3. “DBCC CHECKDB(‘database adı’,REPAIR_FAST)” komutu uygulanır.
Örneğin Sentez2006 database için uygulanması ;
DBCC CHECKDB (‘Sentez2006’ , REPAIR_FAST)
4. Eğer 3. madde sonunda işlem sonuçlarında düzeltilemeyen hatalar olduğu bildirilirse “DBCC CHECKDB(‘database adı’, REPAIR_ALLOW_DATA_LOSS)” komutu uygulanır. (Bu işlem sonucunda ulaşılabilen sayfalar kurtarılacaktır)
Örneğin Sentez2006 database için uygulanması ;
DBCC CHECKDB (‘Sentez2006’,REPAIR_ALLOW_DATA_LOSS)
5. Database options menüzünden ‘single user’ modu kapatılır.
6. Fiş ve detay bilgilerinde kayıp olup olmadığı kontrol edilip, DBCONNECT üzerinden CheckNullValues işlemi yapılır ve database indeksleri yeniden
oluşturulur.
Not: “DBCC CHECKDB” işleminin başarılı olması için database ayarlarında recovery model full olarak seçili olmalıdır.