Streaming konversi database Firebird 2.5 menyang format ODS12 (Firebird 3.0)

Saben versi Firebird nduweni versi dhewe saka format struktur disk database, O(n)D(isk)S(struktur). Nganti versi 2.5 inklusif, mesin Firebird bisa nggarap ODS saka versi sadurungé, yaiku, basis data saka versi lawas dibukak dening versi anyar lan bisa digunakake ing mode kompatibilitas, nanging mesin Firebird 3.0 mung bisa digunakake karo database ing versi ODS dhewe. 12.0.

Kanggo pindhah menyang 3.0, database saka 2.5 kudu diowahi menyang format anyar liwat serep / mulihake. Mesthi, kita nganggep yen database sadurunge disiapake kanggo konversi - i.e. metadata lan pitakon wis dicenthang kompatibilitas karo Firebird 3.0.

Yen sampeyan ngetutake pendekatan standar, iki tegese sampeyan kudu nggawe serep ing versi 2.5, banjur nginstal 3.0 lan mulihake. Prosedur kasebut bisa ditampa yen ana wektu sing cukup, nanging nalika migrasi database gedhe, utawa nalika migrasi sawetara belasan database ing wektu sing padha, nalika wektu wis entek, sampeyan bisa nggunakake konversi streaming, yaiku 30-40% luwih cepet. Kepiye carane nindakake iki (ing Windows lan Linux), waca ing ngisor potong.

Ide umum yaiku kita bakal nggunakake pipa kanggo nyepetake:

gbak -b … база25 stdout | gbak -c … stdin база30

Gbak saka 2.5 ngasilake serep ing format linear lan dikirim menyang stdout, sing langsung njupuk gbak saka 3.0 liwat stdin lan nggawe database anyar.

Sampeyan kudu ngatur pipa kasebut kanthi cara akses lokal (file), amarga akses jaringan (sanajan liwat localhost) bakal alon-alon proses kasebut.

Kita nliti rincian kanggo Windows lan Linux ing ngisor iki.

Windows

Ing kasus Windows, cara paling gampang yaiku nggawe Firebird kanthi mandiri. Kanggo iki kita njupuk embed-arsip Firebird 2.5, ganti jeneng fbemded.dll kanggo fbclient.dll, nambah gbak.exe lan (opsional) keperluan isql.exe saka "normal" 2.5 arsip.

Firebird 3.0 nggunakake rakitan tunggal lan ora mbutuhake modifikasi.

Versi paling minimal (sing ora mbutuhake instalasi perpustakaan runtime VS2008/VS2010 ing sistem target) ngemot file ing ngisor iki:

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

Administrator sing berpengalaman bisa uga ngerteni manawa 2.5 ora kalebu file intl/fbintl.dll lan intl/fbintl.conf. Iki bener, amarga gbak ora nggunakake charset sambungan lan ora ngowahi data antarane charsets, nanging ing sisih "nampa" Firebird 3.0, file iki perlu nalika nggawe indeks.

Ing firebird.conf Firebird 3.0 dianjurake kanggo nambah:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Uga, luwih becik nyetel nilai IpcName sing beda kanggo 2.5 lan 3.0.

Nalika milih nilai-nilai paramèter liyane saka firebird.conf, kita nerusake saka pertimbangan sing prasaja: ing tahap transfusi data, gbak mlaku 2.5 ing siji proses, lan 3.0 ing liyane, banjur 2.5 metu, lan 3.0 wiwit mbangun. indeks.

Kanggo nyepetake fase bangunan indeks ing 3.0, dianjurake kanggo nambah ukuran parameter TempCacheLimit nganti ~ 40% RAM (yen iku server darmabakti, mesthi).

Contone, yen server wis 16 GB RAM, sampeyan bisa sijine

TempCacheLimit=6G

Mesthi, nilai iki mung bisa disetel kanggo Firebird 64 3-bit, amarga proses 32-bit ora bisa nyedhiyakake memori luwih saka 2 gigabyte.

Ing 2.5, parameter iki ora perlu diganti - ora bisa luwih saka 2 gigabyte, lan ora mengaruhi kacepetan nalika serep.

Sadurunge nindakake operasi, sampeyan kudu mriksa manawa cache kaca ing header database disetel dadi 0 (command gstat -h databasename, ndeleng garis buffer Page).

Yen cache disetel sacara eksplisit ing header database, banjur nimpa nilai saka firebird.conf (lan databases.conf ing 3.0), lan yen ana nilai sing ora cukup gedhe, bisa nyebabake konsumsi memori lan pertukaran sing gedhe banget.

Sabanjure, nyalin file menyang sistem target.

Konversi ditindakake sawise mungkasi layanan "sistem" Firebird 2.5, ing baris printah kanthi hak sing luwih dhuwur kanggo administrator lokal (umpamane):

set ISC_USER=владелец
"25/gbak" -z -b -g -v -st t -y 25.log база25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin база30

Conto iki nggunakake "slash" ing kuotasi (valid "unix-gaya"), lan "topi" (karakter "^") lolos saka karakter baris anyar, kang migunani nalika ngetik printah dawa. Pilihan -st (atus) muncul ing Firebird 2.5.8 lan ngidini sampeyan nulis data babagan wektu proses gbak menyang log (kanggo rincian, ndeleng dokumentasi).

Linux

Ing Linux Firebird 3 gumantung ing perpustakaan tommath. Ing CentOS (RHEL) perpustakaan iki dumunung ing repositori epel, ing Ubuntu (Debian) ing repositori sistem.

Kanggo CentOS, sampeyan kudu nyambungake repositori epel dhisik banjur tindakake

yum install libtommath

Ubuntu ora perlu kalebu repositori tambahan, nanging Ubuntu 16 lan Ubuntu 18 nginstal versi paket sing beda - libtommath0 lan libtommath1, masing-masing.

Firebird 3.0 nggoleki tommath.so.0 lan Ubuntu 18 tambahan dibutuhake kanggo nggawe link (symlink) saka tommath.so.0 kanggo tommath.so.1. Kanggo nindakake iki, sampeyan kudu golek tommath.so.1.

Path sing digoleki ing Ubuntu - /usr/lib/x86_64-linux-gnu/, nanging distribusi basis Debian liyane bisa uga beda.

Masalah kapindho ana hubungane karo kasunyatan sing nganti Firebird 3.0.1, ora ana cara sing gampang kanggo nginstal rong versi server sing beda. Kita ora nganggep opsi "kompilasi saka sumber kanthi awalan sing dibutuhake" amarga kerumitan relatif.

Kanggo Firebird 3.0.2 lan luwih dileksanakake mbangun karo --enable-binreloc lan pilihan installer kapisah (-path path).

Assuming sing perpustakaan tommath lan, yen perlu, symlink kanggo tommath.so.0 wis ditambahake menyang sistem, sampeyan bisa nginstal saiki (ing wektu iki nulis) Firebird 3.0.4 distribusi ing, contone, / opt /fb3:

./install.sh -path /opt/fb3

Sawise iku, sampeyan bisa mungkasi layanan sistem Firebird lan miwiti konversi streaming.

Nalika mungkasi Firebird, elinga yen proses Firebid 2.5 ing mode Klasik biasane diwiwiti dening xinetd - dadi sampeyan kudu mateni layanan firebird kanggo xinetd utawa mungkasi xinetd rampung.

Ing firebird.conf kanggo 3.0 ing Linux, sampeyan ora perlu nyetel paramèter MaxUnflushed (mung bisa digunakake ing Windows) lan ngganti setelan Firebird 2.5.

Ing Linux, akses lokal (file) Firebird 2.5 ora padha karo versi sing dipasang ing Windows - server 2.5 bakal bisa digunakake ing proses gbak (tanpa bagean jaringan), nanging hak akses bakal dicenthang ing basis pangguna, tegese. sing ora mung login, nanging uga sandhi sing dibutuhake:

export ISC_USER=username ISC_PASSWORD=password
/opt/firebird/bin/gbak -b … база25 stdout
|/opt/fb3/bin/gbak -c … stdin база30

Sawise konversi sukses, sampeyan kudu mbusak "tambahan" Firebird 3.0, banjur "utama" Firebird 2.5, lan sawise iku nindakake instalasi resik saka Firebird 2.5 - lan paling apik saka installer tar.gz biasa, lan ora liwat repositori, amarga. versi ing repositori bisa uga ketinggalan.

Uga, sawise mulihake basis data ing Linux lan nginstal maneh, sampeyan kudu mriksa manawa database anyar diduweni dening pangguna firebird.

Yen iki ora kedadeyan, mula kudu didandani.

chown firebird.firebird database

Asile

Saliyane ngirit wektu lan ruang disk, konversi streaming nduweni kaluwihan penting liyane - konversi database rampung tanpa mbusak Firebird 2.5 sing wis ana, sing bisa nyederhanakake rollback yen ana konversi sing ora kasil (paling asring amarga kekurangan ruang utawa reboot sing ora dikarepake nalika migrasi. proses).

Ngirit wektu amarga kasunyatan yen konversi "klasik" yaiku "wektu serep" ditambah "wektu mulihake". Recovery kasusun saka rong bagéan: maca data saka file serep lan mbangun indeks.

Kanthi konversi streaming, total wektu dijupuk minangka "wektu serep ditambah lima nganti sepuluh persen" lan "wektu bangunan indeks".

Asil tartamtu gumantung marang struktur database, nanging rata-rata, wektu pemulihan kira-kira kaping pindho wektu serep. Mulane, yen kita njupuk wektu serep minangka unit, banjur "konversi klasik" telung unit wektu, streaming rong unit wektu. Nambah TempCacheLimit mbantu nyuda wektu.

Umumé, konversi streaming ing praktik ngidini sampeyan ngirit 30-40% wektu serep lan mulihake alternatif.

Pitakon?

Tulis kabeh pitakonan ing komentar, utawa ngirim menyang penulis metodologi lan co-penulis artikel iki - Vasily Sidorov, iBase Leading System Engineer, ing bs at ibase ru.

Mung pangguna pangguna sing bisa melu survey. mlebunggih.

Apa versi Firebird sing sampeyan gunakake?

  • Manuk geni 3.x

  • Manuk geni 2.5

  • Manuk geni 2.1

  • Firebird 2.0, 1.5 utawa 1.0

16 pangguna milih. 1 pangguna abstain.

Source: www.habr.com

Add a comment