Delphi Can

Orjinalini görmek için tıklayınız: IBExpert ile Firebird Veri Kurtarma
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
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...
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.
çok teşekkürler.
(13-03-2017, Saat: 14:40)masteryoda Adlı Kullanıcıdan Alıntı: [ -> ]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.

Faydalı olduysa ne mutlu.

(13-03-2017, Saat: 16:11)klavye Adlı Kullanıcıdan Alıntı: [ -> ]çok teşekkürler.

Rica ederim.

Konuyu okuyup puan vermeden geçenlere de faydalı olmuştur umarım :s
İyilik yap, denize at. Balık bilmezse Halik bilir!
Herkese merhaba, Öncelikle bu bilgilendirici yazı için teşekkür ederim. Maalesef sql ve firebird konusunda yeterli bilgim yok ancak veritabanında sorun çıkınca ve yazılım firması ile danıştığım yazılımcıların tamamı veriler kurtarılamaz artık dediklerinden kendi imkanlarımla araştırıp bu yazıyı buldum. Ben data inside ile söylenenleri uyguladım ve tüm dataları dışarı aktardım. Ancak geri nasıl yükleyeceğimi bulamadım. Yardımcı olabilirseniz çok sevinirim.
Fevkalde bir makale olmuş. Elinize sağlık. Resimler görünmüyor. Bir de benim kullandığım versiyonlarda (2007 ve 2012 li) database inside menüsü yok. Hangi versiyonda ? paylaşma imkanı var mı?