Firebird 2.5 veritabanlarının Firebird 3.0'a hızlı dönüştürülmesi
Basil Sidorov, 02-APR-2019, (c) IBSurgeon
Her Firebird sürümünün kendi veritabanı formatı vardır - O(n)D(isk)S(tructure). 2.5 sürümüne kadar veritabanı motoru önceki sürümün ODS’si ile çalışabilir, ancak Firebird 3 motoru yalnızca kendi ODS’si (sürüm 12.0) ile çalışır.
Bir veritabanını Firebird 2.5’ten 3.0’a yükseltmek için, veritabanı dosyasını 2.5’te gbak aracıyla yedeklemek ve ardından 3.0’da geri yüklemek gerekir.
Elbette, bir veritabanının dönüşüme hazırlanması gerekir - meta veriler ve sorgular Firebird 3.0 ile uyumluluk açısından kontrol edilmeli ve Firebird 3’te geri yükleme sonrasında BLR içeren tüm nesneler (tetikleyiciler, saklı prosedürler vb.) yeniden derlenmelidir.
Standart yaklaşımı kullanırsak, 2.5’te veritabanı yedeği almamız ve ardından Firebird 3’ü kurup yedek dosyayı geri yüklememiz gerekir.
Yeterli zamanınız varsa bu sorun değildir. Ancak veritabanınız büyükse veya taşımanız gereken düzinelerce veritabanınız varsa ve zamanınız kısıtlıysa, %25-30 daha hızlı olan akış dönüşümünü kullanabilirsiniz.
Fikir, konveyör kullanmaktır:
gbak -b … db25 stdout | gbak -c … stdin db30
2.5’ten gbak -b yedeği sıralı olarak yazar ve stdout akışına yönlendirir; bu akış, 3.0’ın gbak’ı tarafından stdin’den hemen okunur ve yeni bir veritabanı oluşturur.
Bu konveyörün yerel veritabanı erişimi (gömülü) kullanması gerekir çünkü ağ üzerinden veri aktarımı (localhost olsa bile) süreci önemli ölçüde yavaşlatacaktır.
Aşağıda Windows ve Linux’ta akış yedeklemesinin nasıl yapılacağını ele alıyoruz.
Windows
Windows için özel bir Firebird dosya seti oluşturmak daha iyidir. Firebird 2.5 gömülü arşivini alıp fbembed.dll dosyasını fbclient.dll olarak yeniden adlandırmamız ve gbak.exe ile isteğe bağlı olarak isql.exe eklememiz gerekir.
Firebird 3.0 için standart arşivi kullanacağız.
(VS2008/VS2010 çalışma zamanı gerektirmeyen) minimum set şu dosyaları içerir:
25/gbak.exe
25/fbclient.dll
25/firebird.conf
25/firebird.log
25/firebird.msg
25/ib_util.dll
25/icudt30.dll
25/icuin30.dll
25/icuuc30.dll
25/Microsoft.VC80.CRT.manifest
25/msvcp80.dll
25/msvcr80.dll
30/fbclient.dll
30/firebird.conf
30/firebird.msg
30/gbak.exe
30/ib_util.dll
30/icudt52.dll
30/icudt52l.dat
30/icuin52.dll
30/icuuc52.dll
30/msvcp100.dll
30/msvcr100.dll
30/intl/fbintl.conf
30/intl/fbintl.dll
30/plugins/engine12.dll
Deneyimli bir yönetici/geliştirici, 25/intl/fbintl.dll ve 25/intl/fbintl.conf dosyalarının dahil edilmediğini fark edebilir. Bu doğrudur, çünkü gbak bağlantı için karakter setini kullanmaz ve verileri karakter setleri arasında dönüştürmez. Ancak alıcı tarafta, Firebird 3.0’da, icu* dosyaları gereklidir çünkü karakter setleri dizin oluşturma sırasında (yedekleme/geri yüklemenin son adımı) kullanılır.
Firebird 3 firebird.conf dosyasına iki satır eklenmesi önerilir:
MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1
Ayrıca, Firebird 2.5 ve Firebird 3.0 için IpcName parametresi için farklı adlar belirlemek iyidir.
İsterseniz, veritabanı dönüşümü sırasında Firebird 2.5’in veri okuduğunu ve Firebird 3’ün veri yazıp dizinler oluşturduğunu göz önünde bulundurarak diğer parametreleri değiştirebilirsiniz.
Dizin oluşturmayı hızlandırmak için TempCacheLimit parametresini mevcut RAM’in ~%40’ına yükseltmenizi öneririz (bu özel bir bilgisayar veya sunucuysa).
Örneğin, 16 GB RAM’iniz varsa şunları ayarlayabilirsiniz:
TempCacheLimit=6G
Elbette bu değer yalnızca 64 bit Firebird 3 kullanıyorsanız ayarlanabilir, çünkü herhangi bir 32 bit işlem 2 gigabayttan fazla RAM ayıramaz.
Bu parametreyi 2.5 için değiştirmenize gerek yoktur, çünkü yedekleme hızını etkilemez ve Firebird 2.5’in kendisi bu parametre için 64 bit sürümde bile 2 gigabayttan fazla RAM kullanamaz.
Ayrıca, başlamadan önce veritabanı başlık sayfasında “page buffers” değerinin 0 olduğunu kontrol edin (gstat -h veritabanıadı).
Veritabanı başlığında “page buffers” parametresi ayarlanmışsa, firebird.conf ayarlarını geçersiz kılar ve büyük bir değer durumunda aşırı bellek tüketimine ve dönüşüm sürecinin performansının düşmesine neden olabilir.
Ardından, hazırlanan dosya setini hedef sisteme kopyalayın.
Dönüşümden önce Firebird 2.5’in normal hizmetini durdurmanız gerektiğini lütfen unutmayın.
Ardından, hak yükseltmeli komut istemini başlatın (Yönetici Olarak Çalıştır):
set ISC_USER=<veritabanınızın_sahibini_veya_sysdba_belirtin>
set ISC_PASSWORD=parola
"25/gbak" -z -b -g -v -st t -y 25.log db25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin db30
Burada tam komut satırı çift tırnak içine alınmıştır, | sembolü birleştirme için kullanılır ve ^ sembolü satır sonunu kaçış karakteri olarak kullanılır (uzun komut satırları durumunda kullanışlıdır).
-st(atus) seçeneği Firebird 2.5.8’de tanıtılmıştır ve yedekleme süreci hakkında daha fazla bilginin günlük dosyasına yazılmasını sağlar.
Linux
Firebird 3, Linux’ta tommath kitaplığına bağımlıdır. CentOS’ta (RHEL) bu kitaplık epel deposunda, Ubuntu’da (Debian) sistem deposunda bulunur.
CentOS’ta önce EPEL deposunu etkinleştirmeniz ve ardından « yum install libtommath» çalıştırmanız gerekir.
Ubuntu’da ek depo eklemenize gerek yoktur, ancak Ubuntu 16 ve Ubuntu 18 farklı paket sürümlerine sahiptir - sırasıyla libtommath0 ve libtommath1.
Firebird 3, tommath.so.0 dosyasını arar ve Ubuntu 18 için tommath.so.0’dan tommath.so.1’e sembolik bağlantı oluşturmanız gerekir. Bunu yapmak için önce tommath.so.1 dosyasını bulmanız gerekir. Ubuntu’daki olağan yol - /usr/lib/x86.64- linux -gnu/ şeklindedir, ancak diğer Debian tabanlı dağıtımlarda farklı olabilir.
Diğer bir sorun, Firebird 3.0.1’e kadar (dahil) 2 farklı sunucu sürümünü kurmanın basit bir yolunun olmamasıdır. “Bir önekle kaynaklardan derleme” seçeneği burada ele alınmamaktadır.
Firebird 3.0.2, CORE‑5204 düzeltmesine sahiptir: -enable-binreloc ile derleme (http://tracker.firebirdsql.org/browse/CORE-5204) ve ayrı kurulum seçeneği -path.
Bu nedenle, tommath kitaplığı ve gerekirse tommath.so.0 sembolik bağlantısı kurulduysa, en yeni Firebird 3.0.4 dağıtımını /opt/fb3 konumuna şu komutla kurabilirsiniz: ./install.sh -path /opt/fb3
Bundan sonra mevcut Firebird 2.5’i durdurabilir ve akış dönüşümünü çalıştırabilirsiniz.
Firebird 2.5 Classic kullanıyorsanız, Classic’in genellikle xinetd tarafından çalıştırıldığını unutmayın - bu nedenle, xinetd için firebird hizmetini devre dışı bırakmanız veya xinetd’yi tamamen durdurmanız gerekir.
Firebird 3’ün firebird.conf dosyasında MaxUnflushed* parametrelerini ayarlamanıza gerek yoktur (çünkü bunlar yalnızca Windows’ta çalışır) veya Firebird 2.5’te herhangi bir şeyi değiştirmenize gerek yoktur.
Linux’ta Firebird 2.5’te gömülü erişim Windows’taki gibi değildir - Firebird 2.5 gbak işlemi içinde çalışacaktır (ağ bölümü olmadan), ancak erişim hakları kullanıcı veritabanıyla kontrol edilecektir, bu nedenle yalnızca veritabanı sahibi kullanıcı adını değil aynı zamanda parolayı da belirtmek gerekir:
export ISC_USER=kullanıcıadı ISC_PASSWORD=parola
/opt/firebird/bin/gbak -b … db25 stdout\
|/opt/fb3/bin/gbak -c … stdin db30
Başarılı dönüşümden sonra, Firebird 3’ün “geçici örneğini” kaldırmanız, ardından orijinal 2.5’i kaldırmanız ve yalnızca bundan sonra Firebird 3’ün temiz kurulumunu gerçekleştirebilirsiniz.
Firebird 3’ü depolardan değil tar.gz’den kurmak daha iyidir, çünkü tar.gz her şeyi uygun konuma /opt/ firebird _ kurar ve ayrıca depolardaki Firebird sürümü genellikle tar.gz’dekinden daha eskidir._
Dönüşüm tamamlanıp Firebird 3 kurulduktan sonra, “firebird” kullanıcısının veritabanı dosyasının sahibi olduğunu kontrol etmeniz gerekir.
Değilse, düzeltmeniz gerekir:
chown firebird.firebird veritabanıadı
Özet
Akış dönüşümü standart yaklaşımdan (gbak -b, ardından gbak -c) daha hızlıdır, çünkü ortadaki “yedeklemeye yazma” işlemlerini atlar - sonuç olarak, akış dönüşüm süresi yaklaşık “yedekleme süresi artı %10-15” artı “dizin oluşturma süresi"dir.
Uygulamamızda, akış dönüşümü geleneksel “sıralı” yedekleme ve geri yüklemeden en az %25-30 daha hızlıdır.
Zaman tasarrufu ve boş disk alanı ihtiyacının azalmasının yanı sıra, akış dönüşümünün bir avantajı daha vardır - mevcut Firebird 2.5’in kaldırılmasını gerektirmez, bu da dönüşüm sırasında bir hata oluşması durumunda hızla 2.5’e geri dönmenizi sağlar.
İletişim
Geri bildirim ve sorularınızı IBSurgeon destek ekibine gönderin.