Online Konversioun vu Firebird 2.5 Datenbanken op ODS12 Format (Firebird 3.0)

All Versioun vu Firebird huet seng eege Versioun vum Datebank-Diskstrukturformat - O(n)D(isk)S(Struktur). Bis Versioun 2.5 inklusiv konnt de Firebird Motor mat ODS vu fréiere Versioune schaffen, dat heescht, Datenbanken vun alen Versioune goufen vun der neier Versioun opgemaach an am Kompatibilitéitsmodus geschafft, awer de Firebird 3.0 Motor funktionnéiert nëmme mat Datenbanken an senger eegener ODS Versioun 12.0.

Fir op 3.0 ze wiesselen, muss d'Datebank vun 2.5 iwwer Backup / Restauréieren an dat neit Format ëmgewandelt ginn. Natierlech ginn mir dovun aus, datt d'Datebank virdru fir d'Konversioun virbereet gouf - d.h. Metadaten an Ufroe goufen op Kompatibilitéit mat Firebird 3.0 gepréift.

Wann Dir de Standard Approche befollegt, heescht dat datt Dir e Backup op der Versioun 2.5 maache musst, dann 3.0 installéieren an e Restauréieren maachen. Dës Prozedur ass akzeptabel wann Dir genuch Zäit hutt, awer wann Dir grouss Datenbanken migréiert, oder wann Dir gläichzäiteg e puer Dosen Datenbanken migréiert, wann d'Zäit leeft, kënnt Dir Streamkonversioun benotzen, wat 30-40% méi séier ass. Wéi genee dëst ze maachen (ënner Windows a Linux), liest ënnert dem Schnëtt.

Déi allgemeng Iddi ass datt mir eng Pipeline benotze fir d'Saachen ze beschleunegen:

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

Gbak aus 2.5 generéiert e Backup am linear Format a schéckt se op stdout, déi direkt gbak aus 3.0 iwwer stdin ophëlt an eng nei Datebank erstellt.

Et ass néideg sou eng Pipeline mat enger lokaler (Datei) Zougangsmethod z'organiséieren, well den Netzzougang (och duerch localhost) de Prozess wesentlech verlangsamen.

Hei drënner kucke mir d'Detailer fir Windows a Linux.

Windows

Am Fall vu Windows ass deen einfachste Wee fir e komplett standalone Build vu Firebird ze maachen. Fir dëst huelen mir Firebird 2.5 Embed Archiv, ëmbenennen fbemded.dll op fbclient.dll, füügt de "normale" 2.5 Utility gbak.exe an (optional) isql.exe aus dem Archiv.

Firebird 3.0 benotzt eenzeg Assemblée an erfuerdert keng Ännerung.

Déi minimal Optioun (déi keng Installatioun vun de VS2008/VS2010 Runtime Bibliothéiken um Zilsystem erfuerdert) enthält déi folgend Dateien:

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

En erfuerene Administrateur kann feststellen datt 2.5 d'Intl/fbintl.dll an intl/fbintl.conf Dateien net enthält. Dëst ass wouer, well gbak d'Verbindungscharset net benotzt an d'Donnéeën tëscht Charsets net konvertéiert, awer op der "Empfang" Säit vu Firebird 3.0 sinn dës Dateie gebraucht wann Dir Indexen erstellt.

Am Firebird 3.0 firebird.conf ass et recommandéiert ze addéieren:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Och ass et unzeroden verschidden IpcName Wäerter fir 2.5 an 3.0 ze setzen.

Wann Dir d'Wäerter vun anere Firebird.conf Parameteren auswielen, gi mir vun enger einfacher Iwwerleeung vir: an der Datetransferstadium leeft gbak 2.5 an engem Prozess, an 3.0 leeft an engem aneren, dann 2.5 fäerdeg seng Aarbecht, an 3.0 fänkt un Gebai Indexen.

Fir d'Indexbauphase am 3.0 ze beschleunegen, ass et recommandéiert d'Gréisst vum TempCacheLimit Parameter op ~40% RAM ze erhéijen (wann dëst natierlech en dedizéierten Server ass).

Zum Beispill, wann de Server 16 GB RAM huet, da kënnt Dir astellen

TempCacheLimit=6G

Natierlech kann dëse Wäert nëmme fir 64-Bit Firebird 3 gesat ginn, well all 32-Bit-Prozess net méi wéi 2 Gigabytes Erënnerung kann allocéieren.

Fir 2.5 muss dëse Parameter net geännert ginn - et kann iwwerhaapt net méi wéi 2 Gigabytes sinn, an och während der Backupsatellit beaflosst et net d'Geschwindegkeet.

Ier Dir d'Operatioun ausféiert, musst Dir kontrolléieren datt de Säitecache am Datebankheader op 0 gesat ass (Kommando gstat -h databasename, kuckt d'Säitbuffer Linn).

Wann de Cache explizit am Datebankheader gesat gëtt, iwwerschreift se d'Wäerter vu firebird.conf (an databases.conf an 3.0), an am Fall vun onpassend grousse Wäerter kann et zu onnéidege Gedächtnisverbrauch féieren an Stockage am Swap.

Nächst, kopéiert d'Dateien an d'Zilsystem.

D'Konversioun gëtt duerchgefouert nodeems de Firebird 2.5 "System" Service gestoppt gouf, an der Kommandozeil mat Rechter op de lokalen Administrateur erhéicht (Beispill):

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

Dëst Beispill benotzt e "Forward Slash" an Zitatzeechen (gülteg "Unix-Stil"), an en "Hutt" (den "^" Charakter) entkommt aus dem Zeilfeed Charakter, wat praktesch ass wann Dir laang Kommandoen tippt. D'Optioun -st(atus) erschéngt am Firebird 2.5.8 an erlaabt Iech Daten iwwer d'Laafzäit vum gbak-Prozess ze protokolléieren (Detailer an der Dokumentatioun).

Linux

Op Linux hänkt Firebird 3 vun der tommath Bibliothéik of. An CentOS (RHEL) ass dës Bibliothéik am Epel Repository, an Ubuntu (Debian) am System Repository.

Fir CentOS musst Dir als éischt den Epel Repository verbannen an nëmmen dann maachen

yum install libtommath

Ubuntu brauch keng zousätzlech Repositories ze verbannen, awer Ubuntu 16 an Ubuntu 18 installéiere verschidde Versioune vun de Packagen - libtommath0 a libtommath1, respektiv.

Firebird 3.0 kuckt no tommath.so.0 a fir Ubuntu 18 ass et zousätzlech néideg fir e Symlink vun tommath.so.0 op tommath.so.1 ze kreéieren. Fir dëst ze maachen, musst Dir als éischt tommath.so.1 fannen.

De Wee deen Dir sicht an Ubuntu ass - /usr/lib/x86_64-linux-gnu/, awer et kann anescht sinn an aneren Debian-baséiert Verdeelungen.

Den zweete Problem staamt aus der Tatsaach, datt bis Firebird 3.0.1, inklusiv, et keen einfache Wee war fir zwou verschidde Versioune vum Server z'installéieren. Mir betruechten d'Optioun "aus Quellen mat dem erfuerderleche Präfix" net wéinst senger relativer Aarbechtsintensitéit.

Implementéiert fir Firebird 3.0.2 a méi héich Gebai mat –enable-binreloc an eng separat Installatiounsoptioun (-Wee Wee).

Unzehuelen datt d'Tommath-Bibliothéik an, wann néideg, e Symlink fir tommath.so.0 an de System bäigefüügt sinn, kënnt Dir déi aktuell (zu der Zäit vun dësem Artikel schreiwen) Firebird 3.0.4 Verdeelung installéieren an zB / / opt/fb3:

./install.sh -path /opt/fb3

Duerno kënnt Dir de Firebird System Service stoppen an d'Streaming Konversioun starten.

Wann Dir Firebird stoppt, sollt Dir berücksichtegen datt Firebid 2.5 Prozesser am Classic Modus normalerweis vum xinetd lancéiert ginn - dofir musst Dir entweder de Firebird Service fir xinetd deaktivéieren oder xinetd komplett stoppen.

An firebird.conf fir 3.0 op Linux, braucht Dir keng MaxUnflushed Parameteren ze setzen (si schaffen nëmmen op Windows) an änneren Firebird 2.5 Astellunge.

Op Linux ass den lokalen (Datei) Zougang vu Firebird 2.5 net gläichwäerteg mat der embeded Versioun ënner Windows - Server 2.5 wäert am gbak Prozess lafen (ouni den Netzdeel), awer Zougangsrechter ginn géint d'Benotzerbasis iwwerpréift, dat heescht datt Dir brauch net nëmmen e Login, awer och e Passwuert:

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

No der erfollegräicher Konversioun, musst Dir als éischt den "zousätzlechen" Firebird 3.0 ewechhuelen, dann den "Haapt" Firebird 2.5, an duerno eng propper Installatioun vu Firebird 2.5 ausféieren - am beschten aus dem Standard tar.gz Installateur, an net duerch Repositories, well D'Versioun an de Repositories ka lags.

Och, nodeems Dir d'Datebank op Linux restauréiert an nei installéiert hutt, musst Dir kucken datt déi nei Datebank vum Firebird Benotzer gehéiert.

Wann dat net de Fall ass, da muss et korrigéiert ginn

chown firebird.firebird database

D 'Resultat

Zousätzlech fir Zäit an Disk Space ze spueren, huet d'Streamkonversioun e weidere wichtege Virdeel - d'Datebankkonversioun gëtt gemaach ouni déi existent Firebird 2.5 ze läschen, wat et vill méi einfach mécht zréckzerollen wann d'Konversioun net klappt (meeschtens wéinst Plazmangel oder eng onerwaart Neistart während dem Migratiounsprozess).

D'Zäit spueren ass wéinst der Tatsaach, datt d'"klassesch" Konversioun "Backup Zäit" plus "Restauréieren Zäit" ass. D'Erhuelung besteet aus zwee Deeler: d'Liesen vun Daten aus der Backupdatei an en Index bauen.

Mat kontinuéierlecher Konversioun gëtt d'Gesamtzäit als "Backupzäit plus fënnef bis zéng Prozent" an "Indexbauzäit" kritt.

Spezifesch Resultater hänke vun der Struktur vun der Datebank of, awer am Duerchschnëtt ass d'Erhuelungszäit ongeféier gläich wéi d'Duebel vun der Backupzäit. Dofir, wa mir Backup Zäit als Eenheet huelen, dann ass "klassesch Konversioun" dräi Unitéiten vun Zäit, a kontinuéierlech Konversioun ass zwou Unitéiten vun Zäit. TempCacheLimit erhéijen hëlleft d'Zäit weider ze reduzéieren.

Am Allgemengen, erlaabt d'In-Line Konversioun an der Praxis Iech 30-40% vun der Zäit ze spueren fir alternativ Backup a Restauratioun ze spueren.

Froen?

Schreift w.e.g. all Froen an de Kommentaren, oder schéckt se un den Auteur vun der Methodik a Co-Autor vun dësem Artikel - Vasily Sidorov, féierende Systemingenieur bei iBase, bei bs at ibase ru.

Nëmme registréiert Benotzer kënnen un der Ëmfro deelhuelen. Umellen, wann ech glift.

Wéi eng Versioun vu Firebird benotzt Dir?

  • Firebird 3.x

  • Firebird 2.5

  • Firebird 2.1

  • Firebird 2.0, 1.5 oder 1.0

16 Benotzer hunn gestëmmt. 1 Benotzer huet sech enthalen.

Source: will.com

Setzt e Commentaire