Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
IBExpert ile Firebird Veri Kurtarma
#1
Merhaba Arkadaşlar,

Bu konuda Firebird veritabanı için kolay fakat etkili bir veri kurtarma yönteminden bahsedeceğim. Firebird kullanıp da veritabanı bozulmaları ile karşılaşmayan pek yoktur sanıyorum.
Bazı basit problemlerde backup/restore yapmak işi kurtarabilse de, kompleks bozulma durumlarında, daha veritabanına bile bağlanamıyorken backup/restore yapabilmek bile imkansız hale gelebiliyor.

Mesela veritabanı ile ilgili bir işlem yaparken aşağıdaki gibi "Bad Checksum" hatası aldığımız durumlar olabilir :

VQmPT5WLF2.gif

Ya da, veritabanına bağlantı kurma sırasında "Unavalible Database" veya "Not a Valid Database" gibi hatalar verebilir :

C2azKn.jpg

Şimdi, bu hata mesajları veritabanımıza Firebird Server üzerinden bağlanırken çıkan hata mesajları. Yani, biz .FDB uzantılı veritabanımıza Firebird Server ile bağlanmaya çalıştığımızda Firebird önce bunun geçerli bir veritabanı dosyası olup olmadığını kontrol ediyor, sağlamsa bağlanıp işlemlerimizi yapabiliyoruz. Ama sağlam değilse bize yukarıdaki gibi hata mesajları veriyor. Veritabanımızı tamir edebilmek için önce Firebird'ün bu dosyayı tanıması lazım ki veritabanına bağlanıp işlem yapabilelim. Bu da çoğu zaman sıkıntılı bir süreç olabiliyor.

Kısaca, aslında veritabanımızın içindeki tüm kayıtlarımız sağlam olsa bile, veritabanımızın fiziki dosya yapısındaki sorunlar dolayısıyla Firebird Server dosyayı açmamıza izin vermiyor. Dosyanın başlık (header) bilgisi bozulduğu için çoğu zaman Firebird bunun bir veritabanı dosyası olduğunu algılayamayabiliyor. Ama aslında dosyanın geri kalan kısmında kayıtlarımızda bir sorun olmayabiliyor.

IBExpert'in DATABASE INSIDE dediğimiz ve IBExpert kullanan çoğu kişinin de pek bilmediği bir özellik ile veritabanımıza sorunsuz bağlanıp içindeki verileri dışarı aktarabilmek mümkün olabiliyor. Çünkü Database Inside, veritabanı dosyamızı açarken Firebird'ü kullanmıyor, doğrudan dosya olarak açıyor. Yani veritabanı dosyamızı açabilmek için Firebird'e ihtiyaç duymuyor, sanki klasik bir text dosyasını not defteri ile açar gibi , dosya olarak açtırıp bize işlem yaptırabiliyor. Firebird Server bilgisayarınızda kurulu olmasa bile dosyayı açıp işlem yapabilirsiniz. Bu da, bize %99'a varan bir data kurtarma oranı sağlıyor.

Database Inside, IBExpert'te Tools menüsü içinde en allta bulunabilir :

8TPBc.png

Database Inside'ı seçtiğimiz zaman bize aşağıdaki gibi bir dosya açma penceresi geliyor :

Zyr0vX.png

Gördüğünüz gibi, bize sadece dosya adını sordu. Firebird kullanıcı adı veya şifre gibi bilgileri sormadı. Bozuk olan veritabanı dosyamızı seçtikten sonra veritabanımıza ait teknik bilgileri gösteren aşağıdaki gibi bir ekran geliyor :

NwWIaL.png

Buradaki bilgilerin çoğunu değiştirmeye izin vermiyor, sadece bilgi amaçlı olarak gösteriyor ki zaten  bizim için önemli olan kısım üstteki tablarda sağdan üçüncü sırada bulunan "Extract Data / Metadata" bölümü.
Orayı seçtiğimiz zaman bize veritabanımızdaki tabloları gösteren aşağıdaki gibi ekran geliyor. Burada hangi tablolardaki verileri kurtarmak istiyorsak onun yanındaki checkbox (onay kutuları) nı işaretliyoruz :

EIByCkKA5X.png

İster tek tek onay kutularını işaretleyebilir, veya sağ tıklatıp "Select All Tables" diyebiirsiniz. Tablolarımızı seçtikten sonra, sağ tarafta bulunan seçenekleri ayarlıyoruz. İlk seçeneğimiz "Extract Into" seçeneği :

VgFl6.png

"Set of Script Files" seçeneği ile veritabanımızın tüm içeriği INSERT sorgularını içeren SQL text dosyaları olarak dışarı aktarılıyor. "New Database" seçeneği ise, tüm kayıtları yeni bir veritabanı üzerine aktarmak istediğimizde kullanılıyor. Kişisel tecrübelerime göre, new database seçeneği çok verimli değil çünkü veritabanı yapısını (Metadata) tam olarak aktaramayabiliyor. Özellikle dosyanın "RDB$" ile başlayan tabloları ve header bilgilerinin bozuk olduğu durumlarda eski metadata verilerini tam olarak okuyamıyor ve o yüzden yeni veritabanını orijinali gibi yapamıyor. Yeni sorunlarla uğraşmak istemiyorsanız "Set of script files" seçeneğini kullanmanızı tavsiye ederim. 

Aynı ekranda yine Hangi Firebird versiyonuna göre aktarmak istediğinizi de seçtikten sonra , dosyalarımızın dışarı aktarılacağı yeri de belirleyip "Extract Metadata" düğmesine bastığımızda, veritabanımızın içindeki kayıtlar aşağıdaki gibi dışarı aktarılacaktır :

qaCKv7VAZD.png

Her veritabanı tablosu için ayrı ayrı .SQL uzantılı bir text dosyası oluşturmanın yanında, yeni veritabanımıza verileri daha kolay aktarabilelim diye "Runmeall.sql" diye bütün dosyaları içeri import edebilen tek bir dosya da oluşturuyor. İçeriği şöyle :

vMRlcWAT.png

Her bir SQL uzantılı dosyanın içeriği ise aşağıdaki gibi INSERT INTO sorguları ile dolu :

U8fEX.png

Boş ve sağlam bir veritabanına bağlanıp "Runmeall" dosyasını seçip import edersek, dışarı aktarılan .SQL dosyalarındaki tüm kayıtlarımız yeni veritabanımıza sorunsuz şekilde aktarılmış olacaktır. Şimdiye kadar defalarca bu yöntemle veri kurtarma işlemi yaptım ve daha bir kez olsun sorunla karşılaşmadım. DBWorkbench, EMS SQL Manager, Firebird Maestro vb. programların daha veritabanına bağlanmama bile izin vermediği çoğu durumda bu yöntemle verileri dışarı aktarıp boş bir veritabanı dosyasına bilgilerimi alabildim.

Şimdiye kadar defalarca işime yaramış bu özelliği sizlerle de paylaşmak istedim,
Faydalı olması dileğiyle...

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#2
bir defasında başka bir yazılımda bu checksum hatası ile karşılaştım veritabanına bağlanabiliyorumdum ama cariler tablosunda tıklamamla bu checksum hatasını veriyordu çareyi cariler tablosunu drop edip yeniden create ederek çözmüştüm bir gün önceki yedekten carileri export importla almıştım Allahtan yeni cari açılmamıştı. ama sizin bu yönteminizi hiç bilmiyorudum.

“Do. Or do not. There is no try.”
Cevapla
#3
çok teşekkürler.
Cevapla
#4
(13-03-2017, Saat: 14:40)masteryoda Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olbir defasında başka bir yazılımda bu checksum hatası ile karşılaştım veritabanına bağlanabiliyorumdum ama cariler tablosunda tıklamamla bu checksum hatasını veriyordu çareyi cariler tablosunu drop edip yeniden create ederek çözmüştüm bir gün önceki yedekten carileri export importla almıştım Allahtan yeni cari açılmamıştı. ama sizin bu yönteminizi hiç bilmiyorudum.

Faydalı olduysa ne mutlu.

(13-03-2017, Saat: 16:11)klavye Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olçok teşekkürler.

Rica ederim.

Konuyu okuyup puan vermeden geçenlere de faydalı olmuştur umarım :s

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#5
İyilik yap, denize at. Balık bilmezse Halik bilir!
There's no place like 127.0.0.1
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Firebird de Enter karakter sorunu çözümü mcuyan 2 108 01-07-2018, Saat: 14:31
Son Yorum: klavye
  Firebird'de bellek Kullanımı rmzgenius 1 93 25-06-2018, Saat: 15:34
Son Yorum: klavye
  firebird 3 hakkında sorular masteryoda 9 870 06-06-2018, Saat: 18:51
Son Yorum: canbir
  Firebird Trigger'a parametre gönderme esistem 0 193 23-05-2018, Saat: 10:55
Son Yorum: esistem
  Firebird 3 embedded versiyon autoinc alan problemi canbir 4 224 16-05-2018, Saat: 23:24
Son Yorum: canbir



Konuyu Okuyanlar: 1 Ziyaretçi