Konvertimi i rrjedhshëm i bazave Firebird 2.5 në formatin ODS12 (Firebird 3.0)

Çdo version i Firebird ka versionin e vet tĂ« formatit tĂ« strukturave tĂ« disqeve tĂ« bazĂ«s sĂ« tĂ« dhĂ«nave – O(n)D(isk)S(tructure). Deri nĂ« versionin 2.5, motori Firebird mund tĂ« punojĂ« me ODS tĂ« versioneve tĂ« mĂ«parshme, qĂ« do tĂ« thotĂ« se bazat nga versionet e vjetra hapeshin nga versioni i ri dhe punonin nĂ« modalitetin e kompatibilitetit, por motori Firebird 3.0 punon vetĂ«m me bazat e tĂ« dhĂ«nave nĂ« versionin e tij ODS 12.0.

PĂ«r tĂ« kaluar nĂ« 3.0, baza e tĂ« dhĂ«nave nga 2.5 duhet tĂ« konvertohet nĂ« formatin e ri pĂ«rmes backup/restore. Sigurisht, ne supozojmĂ« se baza e tĂ« dhĂ«nave Ă«shtĂ« pĂ«rgatitur paraprakisht pĂ«r konvertim — pra, metadat dhe pyetjet janĂ« kontrolluar pĂ«r kompatibilitet me Firebird 3.0.

Nëse ndjekim qasjen standarde, kjo do të thotë që duhet të bëjmë një backup në versionin 2.5, pastaj të instalojmë 3.0 dhe të bëjmë restore. Kjo procedurë është e pranueshme nëse kemi mjaft kohë, por gjatë migrimit të bazave të dhënave të mëdha ose kur migrimi i dhjetëra bazave ndodh në të njëjtën kohë, kur koha është e çmuar, mund të përdorim konvertimin në rrjedhë, i cili është 30-40% më i shpejtë. Si të veprojmë saktësisht (nën Windows dhe Linux), lexoni më poshtë.

Ideja e përgjithshme është se për të përshpejtuar do të përdorim një pipeline:

gbak -b 
 baza25 stdout | gbak -c 
 stdin baza30

Gbak nga 2.5 gjeneron një backup në format linear dhe e drejton atë në stdout, i cili menjëherë kapet nga gbak nga 3.0 përmes stdin dhe krijon një bazë të re.

Organizimi i një pipeline të tillë është e domosdoshme të kryhet patjetër me metodën lokale (file), pasi qasja në rrjet (edhe përmes localhost) do ta ngadalësonte ndjeshëm procesin.

Më poshtë shqyrtojmë detajet për Windows dhe Linux.

Windows

NĂ« rastin e Windows, mĂ« e thjeshtĂ« Ă«shtĂ« tĂ« bĂ«jmĂ« njĂ« ndĂ«rtim plotĂ«sisht autonom tĂ« Firebird. PĂ«r kĂ«tĂ«, marrim arkivin embed tĂ« Firebird 2.5, e ridĂ«gjojmĂ« fbemded.dll nĂ« fbclient.dll, shtojmĂ« nga arkivi i 'zakonshĂ«m' 2.5 utilitetin gbak.exe dhe (pĂ«rjoqĂ«sisht) – isql.exe.

Firebird 3.0 përdor një ndërtim të vetëm dhe nuk kërkon asnjë përmirësim.

Opsioni më minimal (i cili nuk kërkon instalimin e bibliotekave runtime VS2008/VS2010 në sistemin e synuar) përmban skedarët e mëposhtëm:

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

Një administrator i përvojës mund të vërejë se në 2.5 nuk përfshihen skedarët intl/fbintl.dll dhe intl/fbintl.conf. Kjo është e vërtetë, pasi gbak nuk përdor charset të lidhjes dhe nuk konverton të dhënat midis charset-ve, por në anën e "pranimit" të Firebird 3.0 këta skedarë janë të nevojshëm për krijimin e indekseve.

Në firebird.conf Firebird 3.0 rekomandohet të shtohet:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Gjithashtu, është e preferueshme të vendosni vlera të ndryshme për IpcName për 2.5 dhe 3.0.

Kur zgjedhim vlerat e parametrave tĂ« tjerĂ« nĂ« firebird.conf, jemi tĂ« orientuar nga njĂ« arsyetim i thjeshtĂ«: nĂ« etapĂ«n e transferimit tĂ« tĂ« dhĂ«nave, nĂ« njĂ« proces gbak punon 2.5, dhe nĂ« tjetrin – 3.0, pastaj 2.5 pĂ«rfundon punĂ«n, dhe 3.0 fillon ndĂ«rtimin e indekseve.

Për të përshpejtuar fazën e ndërtimit të indekseve në 3.0, rekomandohet të rritet madhësia e parametrin TempCacheLimit deri në ~40% të RAM (nëse është server i dedikuar, natyrisht).

Për shembull, nëse serveri ka 16 GB RAM, atëherë mund të vendosni

TempCacheLimit=6G

Natyrisht, një vlerë e tillë mund të vendoset vetëm te Firebird 3 64-bit, pasi çdo proces 32-bit nuk do të jetë në gjendje të alokojë më shumë se 2 GB memorie.

Te 2.5 nuk Ă«shtĂ« e nevojshme tĂ« ndryshoni kĂ«tĂ« parametrin – ai nuk mund tĂ« jetĂ« mĂ« i madh se 2 GB, dhe gjithashtu nuk ndikon nĂ« shpejtĂ«sinĂ« gjatĂ« backup-it.

Para se të kryeni operacionin, duhet të kontroloni që cache i faqes në titullin e bazës së të dhënave është vendosur në 0 (komanda gstat -h databasename, shikoni rreshtin 'Page buffers').

Nëse cache është caktuar qartë në header-in e DB, atëherë ai anullon vlerat nga firebird.conf (dhe databases.conf në 3.0), dhe në rastin e vlerave të pakompleksuara të mëdha mund të çojë në konsum të tepruar të memories dhe kalimin në swap.

Më pas, kopjojmë skedarët në sistemin e synuar.

Konvertimi kryhet pas ndalimit të shërbimit "sistemor" Firebird 2.5, në komandën e linjës me të drejtat e ngritura deri te administratori lokal (shembull):

set ISC_USER=pronari
"25/gbak" -z -b -g -v -st t -y 25.log baza25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin baza30

NĂ« kĂ«tĂ« shembull pĂ«rdoret "kosha e drejtpĂ«rdrejtĂ«" nĂ« cita (stili i pranuar "unix-style"), dhe "karotĂ«" (simboli "^") e maskon simbolin e kalimit tĂ« linjĂ«s, e cila Ă«shtĂ« e pĂ«rshtatshme pĂ«r shpĂ«rndarjen e komandave tĂ« gjata. Opsioni -st(atus) u shfaq nĂ« Firebird 2.5.8 dhe lejon regjistrimin e informacionit mbi kohĂ«n e funksionimit tĂ« procesit gbak (detajet – nĂ« dokumentacion).

Linux

NĂ« Linux Firebird 3 varet nga biblioteka tommath. NĂ« CentOS (RHEL) kjo bibliotekĂ« ndodhet nĂ« repositorin epel, nĂ« Ubuntu (Debian) nĂ« – sistemor.

Për CentOS, fillimisht duhet të lidhni repository-n epel dhe pastaj të bëni

yum install libtommath

Ubuntu nuk kĂ«rkon tĂ« lidhĂ« repository tĂ« tjera, por nĂ« Ubuntu 16 dhe nĂ« Ubuntu 18 instalohet version i ndryshĂ«m paketash – libtommath0 dhe libtommath1, pĂ«rkatĂ«sisht.

Firebird 3.0 kërkon tommath.so.0 dhe për Ubuntu 18 është e nevojshme të krijoni një lidhje (symlink) nga tommath.so.0 në tommath.so.1. Për këtë, fillimisht duhet të gjeni tommath.so.1.

Rruga e kërkuar në Ubuntu është /usr/lib/x86_64-linux-gnu/, por në distro të tjera të bazuara në Debian mund të jetë ndryshe.

Problemi i dytë është se deri në Firebird 3.0.1, përfshirë, nuk kishte një mënyrë të thjeshtë për të instaluar dy versione të ndryshme të serverit. Nuk po e shqyrtojmë variantin "kompilohet nga burimi me prefiksin e duhur" për shkak të punës në relative tepër kërkuese.

PĂ«r Firebird 3.0.2 dhe mĂ« sipĂ«r Ă«shtĂ« realizuar ndĂ«rmarrja me –enable-binreloc dhe njĂ« opsion i veçantĂ« pĂ«r instaluesin (-path rruga).

Duke supozuar se biblioteka tommath dhe, nëse nevojitet, lidhja për tommath.so.0 janë shtuar në sistem, mund të instaloni përditësimin aktual (në momentin që po shkruhet ky artikull) të distribucionit të Firebird 3.0.4 në, për shembull, /opt/fb3:

. /install.sh -path /opt/fb3

Pas kësaj, mund të ndaloni shërbimin sistemor Firebird dhe të filloni konvertimin e procesit.

Kur ndaloni Firebird, duhet tĂ« merret parasysh se proceset e Firebird 2.5 nĂ« mĂ«nyrĂ«n Classic zakonisht nisin nga xinetd – kĂ«shtu qĂ« Ă«shtĂ« e nevojshme ose tĂ« ndalohet shĂ«rbimi firebird pĂ«r xinetd ose tĂ« ndalohet plotĂ«sisht xinetd.

Në firebird.conf për 3.0 në Linux nuk është e nevojshme të caktohen parametrat MaxUnflushed (ato funksionojnë vetëm në Windows) dhe të ndryshohen parametrat e Firebird 2.5.

NĂ« Linux, qasja lokale (fajll) e Firebird 2.5 nuk Ă«shtĂ« ekuivalente me variantin embeded nĂ« Windows – serveri 2.5 do tĂ« funksionojĂ« nĂ« procesin gbak (pa pjesĂ«n rrjetĂ«), por tĂ« drejtat pĂ«r akses do tĂ« verifikohen nĂ« bazĂ«n e pĂ«rdoruesve, kĂ«shtu qĂ« do tĂ« nevojiten jo vetĂ«m login, por edhe fjalĂ«kalimi:

export ISC_USER=username ISC_PASSWORD=password
/opt/firebird/bin/gbak -b 
 baza25 stdout
|/opt/fb3/bin/gbak -c 
 stdin baza30

Pas njĂ« konvertimi tĂ« suksesshĂ«m, duhet tĂ« fshihet fillimisht "Firebird 3.0" "shtesĂ«", pastaj "Firebird 2.5" "temel" dhe vetĂ«m pastaj tĂ« bĂ«ni njĂ« instalim tĂ« pastĂ«r tĂ« Firebird 2.5 – dhe Ă«shtĂ« mĂ« mirĂ« tĂ« bĂ«het nga instaluesi standard tar.gz, jo pĂ«rmes repository-ve, pasi versioni nĂ« repository mund tĂ« jetĂ« i vonuar.

Gjithashtu, pas rikthimit të DB në Linux dhe riinstalimit, duhet të kontrolloni që DB e re të ketë pronar përdoruesin firebird.

Nëse nuk është kështu, atëherë duhet ta korrigjoni

chown firebird.firebird database

Përfundimi

PĂ«rveç kursimit tĂ« kohĂ«s dhe hapĂ«sirĂ«s nĂ« disk, konvertimi nĂ« rrjedhĂ« ka njĂ« avantazh tĂ« rĂ«ndĂ«sishĂ«m tjetĂ«r – transformimi i bazĂ«s bĂ«het pa fshirĂ« Firebird 2.5 ekzistues, gjĂ« qĂ« ndihmon nĂ« lehtĂ«simin e rikthimit nĂ« rast tĂ« njĂ« konvertimi tĂ« dĂ«shtuar (shpesh nga mungesa e hapĂ«sirĂ«s ose ri-ngarkimi i papritur gjatĂ« procesit tĂ« migrimit).

Kursimi i kohës është i lidhur me faktin që konvertimi «klasik» është «koha e backup-it» plus «koha e rikuperimit». Rikuperimi përbëhet prej dy pjesëve: leximi i të dhënave nga skedari i backup-it dhe ndërtimi i indeksit.

Me konvertim në rrjedhë, koha totale del si «koha e backup-it plus pesë deri në dhjetë përqind» dhe «koha e ndërtimit të indekseve».

Rezultatet konkrete varen nga struktura e bazës, por në mesatare koha e rikuperimit është rreth dyfishi i kohës së backup-it. Prandaj, nëse marrim si njësi kohën e backup-it, konvertimi «klasik» merr tre njësi kohe, ndërsa ai në rrjedhë merr dy njësi kohe. Rritja e TempCacheLimit ndihmon gjithashtu në reduktimin e kohës.

Në përgjithësi, konvertimi në rrjedhë në praktikë lejon kursimin e 30-40% të kohës së backup-it dhe rikthimit sekuencial.

Keni pytje?

Ju lutem, dĂ«rgoni tĂ« gjitha pyetjet nĂ« komentet, ose drejtohuni autorit tĂ« metodikĂ«s dhe bashkautorĂ«ve tĂ« kĂ«tij artikulli – Vasili Sidorov, inxhinierin e sistemit tĂ« kompanisĂ« «iBase», nĂ« adresĂ«n bs at ibase ru.

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, ju lutem.

Cilën version të Firebird përdorni?

  • Firebird 3.x

  • Firebird 2.5

  • Firebird 2.1

  • Firebird 2.0, 1.5 ose 1.0

16 përdorues kanë votuar. 1 përdorues është abstenuar.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster