13-03-2017, Saat: 13:39
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 :
Ya da, veritabanına bağlantı kurma sırasında "Unavalible Database" veya "Not a Valid Database" gibi hatalar verebilir :
Ş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 :
Database Inside'ı seçtiğimiz zaman bize aşağıdaki gibi bir dosya açma penceresi geliyor :
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 :
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 :
İ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 :
"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 :
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 :
Her bir SQL uzantılı dosyanın içeriği ise aşağıdaki gibi INSERT INTO sorguları ile dolu :
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...
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 :
Ya da, veritabanına bağlantı kurma sırasında "Unavalible Database" veya "Not a Valid Database" gibi hatalar verebilir :
Ş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 :
Database Inside'ı seçtiğimiz zaman bize aşağıdaki gibi bir dosya açma penceresi geliyor :
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 :
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 :
İ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 :
"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 :
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 :
Her bir SQL uzantılı dosyanın içeriği ise aşağıdaki gibi INSERT INTO sorguları ile dolu :
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...