Konversi streaming tina database Firebird 2.5 kana format ODS12 (Firebird 3.0)

Unggal versi Firebird gaduh versi sorangan tina format struktur disk database - O(n)D(isk)S(struktur). Nepi ka vérsi 2.5 inklusif, mesin Firebird tiasa dianggo sareng ODS tina vérsi saméméhna, nyaéta, basis data tina vérsi anu lami dibuka ku vérsi énggal sareng damel dina modeu kasaluyuan, tapi mesin Firebird 3.0 ngan ukur tiasa dianggo sareng database dina versi ODS sorangan. 12.0.

Pikeun migrasi ka 3.0, pangkalan data ti 2.5 kedah dirobih kana format énggal ngalangkungan cadangan / pamulihan. Tangtu, urang nganggap yén database ieu saméméhna disiapkeun pikeun konvérsi - i.e. metadata sareng patarosan parantos dipariksa pikeun kasaluyuan sareng Firebird 3.0.

Upami anjeun nuturkeun pendekatan standar, ieu hartosna anjeun kedah ngadamel cadangan dina versi 2.5, teras pasang 3.0 sareng ngadamel restorasi. Prosedur ieu tiasa ditampi upami anjeun gaduh waktos cekap, tapi nalika migrasi database ageung, atanapi nalika migrasi sababaraha belasan database sakaligus, nalika waktosna kaluar, anjeun tiasa nganggo konversi stream, nyaéta 30-40% langkung gancang. Kumaha kahayang ngalakukeun ieu (dina Windows jeung Linux Ubuntu), baca handapeun cut.

Gagasan umum nyaéta urang bakal nganggo pipa pikeun ngagancangkeun:

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

Gbak ti 2.5 dibangkitkeun cadangan dina format linier sarta ngirimkeun ka stdout, nu langsung nyokot gbak ti 3.0 via stdin sarta nyieun database anyar.

Penting pikeun ngatur pipa sapertos kitu nganggo metode aksés lokal (file), sabab aksés jaringan (sanaos ngalangkungan localhost) bakal ngalambatkeun prosésna sacara signifikan.

Kami ngaliwat detil pikeun Windows sareng Linux di handap ieu.

Windows

Dina kasus Windows, cara panggampangna nyaéta ngadamel ngawangun Firebird sacara mandiri. Pikeun ieu kami nyandak Firebird 2.5 embed arsip, Ganti ngaran fbemded.dll ka fbclient.dll, tambahkeun gbak.exe sareng (opsional) isql.exe utiliti tina arsip "biasa" 2.5.

Pamakéan Firebird 3.0 assembly tunggal sarta teu merlukeun modifikasi nanaon.

Versi anu paling minimal (anu henteu meryogikeun pamasangan perpustakaan runtime VS2008/VS2010 dina sistem target) ngandung file ieu:

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

Pangurus anu berpengalaman tiasa perhatikeun yén 2.5 henteu kalebet file intl/fbintl.dll sareng intl/fbintl.conf. Ieu leres, saprak gbak henteu nganggo charset sambungan sareng henteu ngarobih data antara charsets, tapi dina sisi "nampi" Firebird 3.0, file ieu diperyogikeun nalika nyiptakeun indéks.

Dina firebird.conf Firebird 3.0 disarankeun pikeun nambahkeun:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Ogé, disarankeun pikeun nyetél nilai IpcName anu béda pikeun 2.5 sareng 3.0.

Lamun milih nilai parameter séjén firebird.conf, urang neruskeun ti tinimbangan basajan: dina tahap transfusi data, gbak ngajalankeun 2.5 dina hiji prosés, jeung 3.0 dina séjén, lajeng 2.5 kaluar, sarta 3.0 dimimitian ngawangun. indéks.

Pikeun nyepetkeun fase wangunan indéks dina 3.0, eta disarankeun pikeun ngaronjatkeun ukuran parameter TempCacheLimit ka ~ 40% RAM (lamun éta dedicated server, tangtosna).

Contona, upami server boga 16 GB RAM, teras anjeun tiasa nempatkeun

TempCacheLimit=6G

Tangtu, nilai ieu bisa diatur ngan pikeun 64-bit Firebird 3, sabab sagala prosés 32-bit teu bisa allocate leuwih ti 2 gigabytes memori.

Dina 2.5, parameter ieu henteu kedah dirobih - éta henteu tiasa langkung ti 2 gigabyte waé, sareng éta henteu mangaruhan kacepetan nalika cadangan.

Sateuacan ngalakukeun operasi, anjeun kedah pariksa yén halaman cache dina header database disetel ka 0 (command gstat -h databasename, tingali garis Page buffers).

Upami cache disetél sacara eksplisit dina header database, maka éta nimpa nilai tina firebird.conf (sareng databases.conf dina 3.0), sareng upami nilai anu teu cekap ageung, éta tiasa nyababkeun konsumsi mémori anu kaleuleuwihan sareng swap.

Salajengna, nyalin file kana sistem target.

Konvérsi dilumangsungkeun saatos ngeureunkeun "sistem" jasa Firebird 2.5, dina garis paréntah kalayan hak-hak pangurus lokal (conto):

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 ieu ngagunakeun "slash" dina tanda petik (valid "unix-gaya"), sarta "topi" (nu "^" karakter) escapes karakter newline, nu mangpaat nalika ngetikkeun paréntah panjang. Pilihan -st (atus) mucunghul dina Firebird 2.5.8 sarta ngidinan Anjeun pikeun nulis data ngeunaan waktu prosés gbak kana log (pikeun detil, tingali dokuméntasi).

Linux

Dina Linux Firebird 3 gumantung kana perpustakaan tommath. Dina CentOS (RHEL) perpustakaan ieu lokasina di Repository epel, on Ubuntu (Debian) dina Repository sistem.

Pikeun CentOS anjeun kedah nyambungkeun heula Repository epel sareng teras lakukeun

yum install libtommath

Ubuntu henteu kedah ngalebetkeun repositori tambahan, tapi Ubuntu 16 sareng Ubuntu 18 masang versi anu béda tina bungkusan - libtommath0 sareng libtommath1, masing-masing.

Firebird 3.0 milarian tommath.so.0 sareng Ubuntu 18 ogé diperyogikeun pikeun nyiptakeun tautan (symlink) ti tommath.so.0 ka tommath.so.1. Jang ngalampahkeun ieu, Anjeun mimitina kudu manggihan tommath.so.1.

Jalur anu anjeun milarian dina Ubuntu nyaéta - /usr/lib/x86_64-linux-gnu/, tapi bisa jadi béda dina sebaran basis Debian séjén.

Masalah kadua aya hubunganana sareng kanyataan yén dugi ka sareng kalebet Firebird 3.0.1, teu aya cara anu gampang pikeun masang dua versi server anu béda. Kami henteu nganggap pilihan "kompilasi tina sumber kalayan awalan anu diperyogikeun" kusabab pajeulitna relatif.

Pikeun Firebird 3.0.2 jeung luhur dilaksanakeun ngawangun kalawan --enable-binreloc sarta pilihan installer misah (-jalur jalur).

Anggap yén perpustakaan tommath na, upami diperlukeun, symlink pikeun tommath.so.0 geus ditambahkeun kana sistem, anjeun tiasa install ayeuna (dina waktu nulis artikel ieu) Firebird 3.0.4 distribution dina, contona, / milih/fb3:

./install.sh -path /opt/fb3

Saatos éta, anjeun tiasa ngeureunkeun jasa sistem Firebird sareng ngamimitian ngalirkeun konvérsi.

Nalika ngeureunkeun Firebird, émut yén prosés Firebid 2.5 dina modeu Klasik biasana dimimitian ku xinetd - janten anjeun kedah nganonaktipkeun jasa firebird pikeun xinetd atanapi ngeureunkeun xinetd lengkep.

Dina firebird.conf pikeun 3.0 dina Linux, anjeun henteu kedah nyetél parameter MaxUnflushed (aranjeunna ngan ukur tiasa dianggo dina Windows) sareng ngarobih setélan Firebird 2.5.

Dina Linux, aksés lokal (file) Firebird 2.5 henteu sarimbag sareng versi anu dipasang dina Windows - server 2.5 bakal tiasa dianggo dina prosés gbak (tanpa bagian jaringan), tapi hak aksés bakal dipariksa ngalawan pangkalan pangguna, anu hartosna. Éta henteu ngan ukur login, tapi ogé kecap konci anu diperyogikeun:

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

Saatos konversi suksés, Anjeun mimitina kudu uninstall "tambahan" Firebird 3.0, lajeng "utama" Firebird 2.5, sarta sanggeus éta ngalakukeun pamasangan bersih tina Firebird 2.5 - sarta éta pangalusna ti installer tar.gz biasa, sarta teu ngaliwatan repositories, sabab. versi dina repositories bisa katinggaleun.

Ogé, saatos malikkeun pangkalan data dina Linux sareng dipasang deui, anjeun kedah pariksa yén pangkalan data énggal dipiboga ku pangguna firebird.

Upami ieu sanés masalahna, maka éta kedah dilereskeun.

chown firebird.firebird database

hasil

Salian ngahemat waktos sareng rohangan disk, konvérsi streaming gaduh kaunggulan penting sanés - konvérsi database dilakukeun tanpa ngahapus Firebird 2.5 anu tos aya, anu nyederhanakeun rollback upami aya konvérsi anu gagal (paling sering kusabab kurangna rohangan atanapi reboot anu teu kaduga nalika migrasi. prosés).

Ngahemat waktos kusabab kanyataan yén konvérsi "klasik" nyaéta "waktu cadangan" ditambah "waktu malikkeun". Pamulihan diwangun ku dua bagian: maca data tina file cadangan sareng ngawangun indéks.

Kalayan konvérsi streaming, total waktos dicandak salaku "waktu cadangan ditambah lima dugi ka sapuluh persén" sareng "waktos ngawangun indéks".

Hasil khusus gumantung kana struktur pangkalan data, tapi rata-rata, waktos pamulihan sakitar dua kali waktos cadangan. Ku alatan éta, lamun urang nyokot waktos cadangan salaku hiji unit, lajeng "konversi klasik" tilu unit waktu, ngalirkeun dua unit waktu. Ngaronjatkeun TempCacheLimit ngabantosan ngirangan waktos.

Sacara umum, konvérsi streaming dina prakték ngamungkinkeun anjeun ngahémat 30-40% tina waktos cadangan sareng malikkeun alternatip.

Patarosan?

Punten nyerat sadaya patarosan dina koméntar, atanapi kirimkeun ka panulis metodologi sareng panulis tulisan ieu - Vasily Sidorov, Insinyur Sistem Anjog iBase, di bs at ibase ru.

Ngan pamaké nu kadaptar bisa ilubiung dina survey. Daptar, Punten.

Naon versi Firebird anu anjeun anggo?

  • Manuk seuneu 3.x

  • Manuk seuneu 2.5

  • Manuk seuneu 2.1

  • Firebird 2.0, 1.5 atanapi 1.0

16 pamaké milih. 1 pamaké abstained.

sumber: www.habr.com

Tambahkeun komentar