Pretočna pretvorba baz podatkov Firebird 2.5 v format ODS12 (Firebird 3.0)

Vsaka različica Firebirda ima svojo različico formata diskovne strukture baze podatkov, O(n)D(isk)S(tructure). Do vključno različice 2.5 je motor Firebird lahko deloval z ODS prejšnjih različic, to je, da je nova različica odprla baze podatkov iz starih različic in delovala v združljivem načinu, vendar motor Firebird 3.0 deluje samo z bazami podatkov v lastni različici ODS 12.0.

Za prehod na 3.0 je treba zbirko podatkov iz 2.5 pretvoriti v novo obliko prek varnostnega kopiranja/obnovitve. Seveda predpostavljamo, da je bila baza predhodno pripravljena za pretvorbo – t.j. metapodatki in poizvedbe so bile preverjene glede združljivosti s Firebird 3.0.

Če sledite standardnemu pristopu, to pomeni, da morate narediti varnostno kopijo na različici 2.5, nato namestiti 3.0 in narediti obnovitev. Takšen postopek je sprejemljiv, če je dovolj časa, pri selitvi velikih baz ali pri selitvi več deset baz hkrati, ko zmanjkuje časa, pa lahko uporabite pretočno pretvorbo, ki je 30-40% hitrejša. Kako točno to storiti (pod Windows in Linux), preberite pod rezom.

Splošna ideja je, da bomo za pospešitev stvari uporabili cevovod:

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

Gbak iz 2.5 ustvari varnostno kopijo v linearnem formatu in jo pošlje v stdout, ki takoj pobere gbak iz 3.0 prek stdin in ustvari novo bazo podatkov.

Takšen cevovod je treba organizirati z lokalnim (datotečnim) načinom dostopa, saj bo dostop do omrežja (tudi prek lokalnega gostitelja) znatno upočasnil proces.

Spodaj si bomo ogledali podrobnosti za Windows in Linux.

Windows

V primeru sistema Windows je najlažji način narediti popolnoma samostojno gradnjo Firebirda. Za to vzamemo embed-archive Firebird 2.5, preimenujte fbemded.dll v fbclient.dll, dodajte pripomočke gbak.exe in (izbirno) isql.exe iz »navadnega« arhiva 2.5.

Firebird 3.0 uporablja enojni sklop in ne zahteva nobenih sprememb.

Najmanjša različica (ki ne zahteva namestitve izvajalnih knjižnic VS2008/VS2010 v ciljnem sistemu) vsebuje naslednje datoteke:

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

Izkušen skrbnik bo morda opazil, da 2.5 ne vključuje datotek intl/fbintl.dll in intl/fbintl.conf. To je res, saj gbak ne uporablja povezovalnega nabora znakov in ne pretvarja podatkov med nabori znakov, toda na "sprejemni" strani Firebird 3.0 so te datoteke potrebne pri ustvarjanju indeksov.

V firebird.conf Firebird 3.0 je priporočljivo dodati:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Prav tako je zaželeno nastaviti različne vrednosti IpcName za 2.5 in 3.0.

Pri izbiri vrednosti drugih parametrov firebird.conf izhajamo iz preprostega vidika: na stopnji prenosa podatkov gbak zažene 2.5 v enem procesu in 3.0 v drugem, nato 2.5 izstopi in 3.0 začne graditi indeksi.

Za pospešitev faze gradnje indeksa v 3.0 je priporočljivo povečati velikost parametra TempCacheLimit na ~40% RAM-a (če gre seveda za namenski strežnik).

Na primer, če ima strežnik 16 GB RAM-a, lahko postavite

TempCacheLimit=6G

Seveda je to vrednost mogoče nastaviti samo za 64-bitni Firebird 3, saj noben 32-bitni proces ne more dodeliti več kot 2 gigabajta pomnilnika.

V 2.5 tega parametra ni treba spreminjati - tako ali tako ne sme biti večji od 2 gigabajtov in ne vpliva na hitrost med varnostnim kopiranjem.

Preden izvedete operacijo, morate preveriti, ali je predpomnilnik strani v glavi baze podatkov nastavljen na 0 (ukaz gstat -h databasename, glejte vrstico Medpomnilniki strani).

Če je predpomnilnik nastavljen eksplicitno v glavi baze podatkov, potem preglasi vrednosti iz firebird.conf (in databases.conf v 3.0), v primeru neustrezno velikih vrednosti pa lahko povzroči prekomerno porabo pomnilnika in zamenjavo.

Nato kopirajte datoteke v ciljni sistem.

Pretvorba se izvede po zaustavitvi "sistemske" storitve Firebird 2.5, v ukazni vrstici s povišanimi pravicami do lokalnega skrbnika (primer):

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

Ta primer uporablja "poševnico" v narekovajih (veljaven "slog unix"), "klobuk" (znak "^") pa se izogne ​​znaku za novo vrstico, kar je uporabno pri vnašanju dolgih ukazov. Možnost -st(atus) se je pojavila v Firebirdu 2.5.8 in vam omogoča beleženje podatkov o času izvajanja procesa gbak (za podrobnosti glejte dokumentacijo).

Linux

V sistemu Linux Firebird 3 je odvisen od knjižnice tommath. Na CentOS (RHEL) se ta knjižnica nahaja v repozitoriju epel, na Ubuntu (Debian) pa v sistemskem repozitoriju.

Za CentOS morate najprej povezati repozitorij epel in šele nato narediti

yum install libtommath

Ubuntuju ni treba vključiti dodatnih skladišč, vendar Ubuntu 16 in Ubuntu 18 namestita različni različici paketov - libtommath0 oziroma libtommath1.

Firebird 3.0 išče tommath.so.0, za Ubuntu 18 pa je potrebno dodatno ustvariti povezavo (simbol) od tommath.so.0 do tommath.so.1. Če želite to narediti, morate najprej najti tommath.so.1.

Iskana pot v Ubuntuju - /usr/lib/x86_64-linux-gnu/, vendar so lahko druge distribucije, ki temeljijo na Debianu, drugačne.

Druga težava je povezana z dejstvom, da do vključno Firebird 3.0.1 ni bilo preprostega načina za namestitev dveh različnih različic strežnika. Možnosti »prevedi iz vira z zahtevano predpono« ne upoštevamo zaradi njene relativne zapletenosti.

Izvedeno za Firebird 3.0.2 in višje zgradite z --enable-binreloc in ločeno možnost namestitvenega programa (pot -path).

Ob predpostavki, da sta bila sistemu dodana knjižnica tommath in, če je potrebno, simbolna povezava za tommath.so.0, lahko trenutno (v času pisanja tega pisanja) distribucijo Firebird 3.0.4 namestite na primer v /opt /fb3:

./install.sh -path /opt/fb3

Po tem lahko ustavite sistemsko storitev Firebird in začnete pretvorbo pretakanja.

Ko zaustavite Firebird, ne pozabite, da procese Firebid 2.5 v klasičnem načinu običajno zažene xinetd - zato morate onemogočiti storitev firebird za xinetd ali popolnoma ustaviti xinetd.

V firebird.conf za 3.0 v Linuxu vam ni treba nastavljati parametrov MaxUnflushed (delujejo samo v sistemu Windows) in spreminjati nastavitev Firebird 2.5.

V Linuxu lokalni (datotečni) dostop Firebird 2.5 ni enakovreden vdelani različici v sistemu Windows - strežnik 2.5 bo deloval v procesu gbak (brez omrežnega dela), vendar bodo pravice dostopa preverjene glede na bazo uporabnikov, kar pomeni da bo potrebna ne samo prijava, ampak tudi geslo:

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

Po uspešni pretvorbi morate najprej odstraniti "dodatni" Firebird 3.0, nato "glavni" Firebird 2.5 in nato izvesti čisto namestitev Firebirda 2.5 - in to najbolje iz običajnega namestitvenega programa tar.gz in ne prek odlagališča, saj. različica v repozitorijih morda zaostaja.

Poleg tega morate po obnovitvi baze podatkov v Linuxu in ponovni namestitvi preveriti, ali je nova baza podatkov v lasti uporabnika firebird.

Če temu ni tako, ga bo treba popraviti.

chown firebird.firebird database

Skupaj

Poleg prihranka časa in prostora na disku ima pretočna pretvorba še eno pomembno prednost – pretvorba baze podatkov se izvede brez izbrisa obstoječega Firebirda 2.5, kar močno poenostavi povrnitev v prejšnje stanje v primeru neuspešne pretvorbe (najpogosteje zaradi pomanjkanja prostora ali nepričakovanega ponovnega zagona med selitvijo). postopek).

Prihranek časa je posledica dejstva, da je "klasična" pretvorba "varnostni čas" plus "obnovitveni čas". Obnovitev je sestavljena iz dveh delov: branja podatkov iz varnostne kopije in ustvarjanja indeksa.

S pretvorbo pretakanja se skupni čas pridobi kot "varnostni čas plus pet do deset odstotkov" in "čas gradnje indeksa".

Konkretni rezultati so odvisni od strukture baze podatkov, vendar je v povprečju čas obnovitve približno dvakrat daljši od časa varnostnega kopiranja. Če torej za enoto vzamemo čas varnostnega kopiranja, potem je »klasična pretvorba« tri časovne enote, pretakanje pa dve časovni enoti. Povečanje TempCacheLimit pomaga dodatno skrajšati čas.

Na splošno vam pretočna pretvorba v praksi omogoča, da prihranite 30–40 % časa pri izmeničnem varnostnem kopiranju in obnavljanju.

Vprašanja?

Vsa vprašanja napišite v komentarje ali jih pošljite avtorju metodologije in soavtorju tega članka - Vasiliju Sidorovu, vodilnemu sistemskemu inženirju iBase, na bs na ibase ru.

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Katero različico Firebirda uporabljate?

  • Firebird 3.x

  • Ognjena ptica 2.5

  • Ognjena ptica 2.1

  • Firebird 2.0, 1.5 ali 1.0

Glasovalo je 16 uporabnikov. 1 uporabnik se je vzdržal.

Vir: www.habr.com

Dodaj komentar