Svaka verzija Firebirda ima svoju verziju formata struktura diskova baze podataka – O(n)D(isk)S(truktura). Do verzije 2.5 uključivo, Firebird je mogao raditi s ODS-om prethodnih verzija, što znači da su baze starih verzija mogle biti otvorene novom verzijom i raditi u režimu kompatibilnosti, ali Firebird 3.0 radi samo s bazama u vlastitoj ODS verziji 12.0.
Da biste prešli na 3.0, bazu podataka iz 2.5 potrebno je pretvoriti u novi format putem backup/restore. Naravno, pretpostavljamo da je baza bila prethodno pripremljena za konverziju — t.j. da su metapodaci i upiti provjereni na kompatibilnost s Firebird 3.0.
Ako se pridržavamo standardnog pristupa, to znači da je potrebno napraviti backup na verziji 2.5, zatim instalirati 3.0 i obaviti restore. Ova procedura je prihvatljiva, ako imate dovoljno vremena, ali pri migraciji velikih baza podataka, ili tijekom simultane migracije više desetina baza kada vrijeme pritisne, možete iskoristiti strimsku konverziju koja je 30-40% brža. Kako to učiniti (pod Windows i Linux), pročitajte ispod.
Opća ideja je da za ubrzanje iskoristimo cjevovod:
gbak -b … baza25 stdout | gbak -c … stdin baza30Gbak iz 2.5 generira backup u linearnoj formatu i usmjerava ga u stdout, koji odmah preko stdin preuzima gbak iz 3.0 i stvara novu bazu.
Organizirati takav cjevovod potrebno je lokalnom (datotečnom) metodom pristupa, budući da mrežni pristup (čak i preko localhost-a) značajno usporava proces.
Ispod razmatramo detalje za Windows i Linux.
Windows
U slučaju Windowsa, najlakše je napraviti potpuno autonomnu verziju Firebirda. Za to uzimamo , preimenujemo fbemded.dll u fbclient.dll, dodajemo iz arhiva „običnog“ 2.5 alate gbak.exe i (neobavezno) – isql.exe.
Firebird 3.0 koristi i ne zahtijeva nikakve dorade.
Najminimalnija opcija (koja ne zahtijeva instalaciju runtime biblioteka VS2008/VS2010 na ciljnom sustavu) sadrži sljedeće 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.dllIskusni administrator može primijetiti da u 2.5 nisu uključene datoteke intl/fbintl.dll i intl/fbintl.conf. To je zaista tako, budući da gbak ne koristi charset konekcije i ne konvertira podatke između char seta, ali na 'prijemnoj' strani Firebird 3.0 ove datoteke su potrebne prilikom kreiranja indeksa.
U firebird.conf Firebird 3.0 preporučuje se dodati:
MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1Također, poželjno je postaviti različitu vrijednost IpcName za 2.5 i 3.0.
Prilikom odabira vrijednosti drugih parametara firebird.conf polazimo od jednostavne pretpostavke: tijekom procesa prebacivanja podataka u jednom procesu, gbak radi 2.5, a u drugom – 3.0, zatim 2.5 završava rad, a 3.0 započinje s izgradnjom indeksa.
Kako bismo ubrzali fazu izgradnje indeksa u 3.0, preporučuje se povećanje veličine parametra TempCacheLimit na ~40% RAM-a (ako je to posvećen server, naravno).
Na primjer, ako je na serveru 16 GB RAM-a, može se postaviti
TempCacheLimit=6GNaravno, takvu vrijednost može se postaviti samo na 64-bitnom Firebirdu 3, budući da bilo koji 32-bitni proces ne može alocirati više od 2 giga memorije.
Za 2.5 ovaj parametar nije potrebno mijenjati – on ionako ne može biti veći od 2 gigabajta, a niti ne utječe na brzinu prilikom izrade sigurnosne kopije.
Prije izvođenja operacije potrebno je provjeriti je li veličina složenog predmemoriranja u zaglavlju baze podataka postavljena na 0 (komanda gstat -h databasename, pogledajte redak Page buffers).
Ako je keš eksplicitno postavljen u zaglavlju baze podataka, tada nadilazi vrijednosti iz firebird.conf (i databases.conf u 3.0), te u slučaju neadekvatno velikih vrijednosti može dovesti do pretjerane potrošnje memorije i korištenje swap prostora.
Nakon toga, kopiramo datoteke na ciljnu sustav.
Konverzija se provodi nakon zaustavljanja 'sustavne' usluge Firebird 2.5, u naredbenoj liniji s povišenim pravima do lokalnog administratora (primjer):
set ISC_USER=vlasnik
"25/gbak" -z -b -g -v -st t -y 25.log baza25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin baza30U ovom primjeru koristi se 'ravna kosa' u navodnicima (dozvoljen 'unix-style'), a 'šapica' (simbol '^') escapira simbol nove linije, što je zgodno pri unosu dugih komandi. Opcija -st(atus) pojavila se u Firebirdu 2.5.8 i omogućava bilježenje podataka o vremenu rada procesa gbak (detalji – u dokumentaciji).
Linux
Na Linuxu Firebird 3 ovisi o biblioteci tommath. U CentOS-u (RHEL) ova biblioteka se nalazi u epel-repozitoriju, u Ubuntu (Debian) u – sistemskoj.
Za CentOS prvo je potrebno spojiti epel-repozitorij, a zatim izvršiti
yum install libtommathUbuntu ne zahtijeva dodatno povezivanje repozitorija, ali u Ubuntu 16 i Ubuntu 18 instaliraju se različite verzije paketa – libtommath0 i libtommath1, respektivno.
Firebird 3.0 traži tommath.so.0, a za Ubuntu 18 dodatno je potrebno stvoriti vezu (symlink) od tommath.so.0 na tommath.so.1. Da bi se to postiglo, prvo treba pronaći tommath.so.1.
Tražena staza u Ubuntu – /usr/lib/x86_64-linux-gnu/, ali u drugim Debian-based distribucijama može biti drugačije.
Drugi problem je u tome što do Firebird 3.0.1, uključivo, nije bilo jednostavnog načina za instalaciju dvije različite verzije servera. Opciju „kompiliranje iz izvora s potrebnim prefiksom“ ne razmatramo zbog njene relativne složenosti.
Za Firebird 3.0.2 i više implementirano je i posebna opcija instalatera (-path putanja).
Pretpostavljajući da je biblioteka tommath i, po potrebi, symlink za tommath.so.0 dodan u sustav, možete instalirati aktualnu (u trenutku pisanja ovog članka) distribuciju Firebird 3.0.4 u, na primjer, /opt/fb3:
./install.sh -path /opt/fb3Nakon toga možete zaustaviti sistemsku uslugu Firebird i pokrenuti konverziju u toku.
Prilikom zaustavljanja Firebird-a treba uzeti u obzir da procese Firebird 2.5 u Classic načinu obično pokreće xinetd – stoga je potrebna ili zabrana servisa firebird za xinetd ili potpuno zaustavljanje xinetd-a.
U firebird.conf za 3.0 na Linuxu nije potrebno postavljati MaxUnflushed-parametre (oni rade samo na Windows-u) i mijenjati postavke Firebird 2.5.
Na Linuxu, lokalni (datotečni) pristup Firebird 2.5 nije ekvivalentan embeded-varijanti pod Windows-om – server 2.5 će raditi unutar procesa gbak (bez mrežne komponente), ali prava pristupa bit će provjeravana prema bazi korisnika, a to znači da će biti potrebni ne samo korisničko ime, već i lozinka:
export ISC_USER=korisničko_ime ISC_PASSWORD=lozinka
/opt/firebird/bin/gbak -b … baza25 stdout
|/opt/fb3/bin/gbak -c … stdin baza30Nakon uspješne konverzije prvo treba ukloniti „dodatni“ Firebird 3.0, zatim „glavni“ Firebird 2.5 i tek nakon toga izvršiti čistu instalaciju Firebird 2.5 – pri čemu je najbolje koristiti službenog instalatera tar.gz, a ne putem repozitorija, jer verzija u repozitorijima može biti zastarjela.
Također, nakon restauracije Baze podataka na Linuxu i ponovne instalacije, treba provjeriti da nova Baza podataka ima vlasnika korisnika firebird.
Ako to nije slučaj, treba ispraviti
chown firebird.firebird bazaZaključak
Osim uštede vremena i prostora na disku, on-line konverzija ima još jednu važnu prednost – pretvaranje baze se vrši bez brisanja postojećeg Firebirda 2.5, što značajno olakšava povratak u slučaju neuspjele konverzije (najčešće zbog nedostatka prostora ili iznenadnog restarta tokom procesa migracije).
Ušteda vremena povezana je s tim da "klasična" konverzija znači "vrijeme izrade sigurnosne kopije" plus "vrijeme oporavka". Oporavak se sastoji od dva dijela: čitanje podataka iz datoteke sigurnosne kopije i izgradnja indeksa.
Kod on-line konverzije ukupno vrijeme se sastoji od "vrijeme sigurnosne kopije plus pet do deset posto" i "vrijeme izgradnje indeksa".
Specifični rezultati ovise o strukturi baze, ali u prosjeku vrijeme oporavka otprilike je dvostruko vrijeme sigurnosne kopije. Stoga, ako uzmemo vrijeme sigurnosne kopije kao jedinicu, "klasična konverzija" traje tri jedinice vremena, a on-line konverzija dvije jedinice vremena. Dodatno smanjenje vremena može se postići povećanjem TempCacheLimit.
Sve u svemu, on-line konverzija u praksi omogućava uštedu od 30-40% vremena potrebnog za redovno pravljenje sigurnosne kopije i restauraciju.
Imate pitanja?
Molimo, postavite sva pitanja u komentarima ili ih uputite autoru metodologije i koautoru ovog članka – Vasilyu Sidorovu, glavnom sistemskom inženjeru kompanije "iBase", na adresu bs at ibase ru.
Samo registrirani korisnici mogu sudjelovati u anketi. , molimo.
Koju verziju Firebirda koristite?
Firebird 3.x
Firebird 2.5
Firebird 2.1
Firebird 2.0, 1.5 ili 1.0
Glasovalo je 16 korisnika. 1 korisnik se suzdržao.
Izvor: habr.com
