Deze pagina is automatisch vertaald. Lees het Engelse origineel. English

IBSurgeon-bibliotheek

Snelle conversie van Firebird 2.5-databases naar Firebird 3.0

Basil Sidorov, 02-APR-2019, (c) IBSurgeon

Elke Firebird-versie heeft zijn eigen databaseformaat - O(n)D(isk)S(tructuur). Tot versie 2.5 kan de database-engine werken met de ODS van de vorige versie, maar de Firebird 3-engine werkt alleen met zijn eigen ODS (versie 12.0).

Om een database van Firebird 2.5 naar 3.0 te upgraden, is het noodzakelijk om een databaseback-up te maken met de gbak-tool in 2.5 en deze vervolgens te herstellen in 3.0.

Natuurlijk moet een database worden voorbereid op conversie - metadata en queries moeten worden gecontroleerd op compatibiliteit met Firebird 3.0, en na het herstel in Firebird 3 moeten alle objecten met BLR (triggers, opgeslagen procedures, enz.) opnieuw worden gecompileerd.

Als we de standaardaanpak gebruiken, moeten we een databaseback-up maken op 2.5 en vervolgens Firebird 3 installeren en het back-upbestand herstellen.

Dit is prima als je genoeg tijd hebt. Maar wanneer je database groot is, of je tientallen databases moet migreren en je beperkt bent in tijd, kun je streamconversie gebruiken, die 25-30% sneller is.

Het idee is om de transportband te gebruiken:

gbak -b … db25 stdout | gbak -c … stdin db30

Gbak -b van 2.5 schrijft back-up sequentieel en stuurt het naar de stdout-stream, die onmiddellijk wordt gelezen vanaf stdin door gbak van 3.0 en een nieuwe database creëert.

Deze transportband moet lokale databasetoegang (embedded) gebruiken, omdat netwerkoverdracht van gegevens (zelfs via localhost) het proces aanzienlijk zal vertragen.

Hieronder bekijken we hoe we streamback-up op Windows en op Linux kunnen uitvoeren.

Windows

Het is beter om een speciale set Firebird-bestanden voor Windows te maken. We moeten de Firebird 2.5 embedded-archief nemen, fbembed.dll hernoemen naar fbclient.dll en gbak.exe en optioneel isql.exe toevoegen.

Voor Firebird 3.0 gebruiken we het standaardarchief.

De minimale set (die geen runtime van VS2008/VS2010 vereist) bevat deze bestanden:

Code
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

Ervaren beheerders/ontwikkelaars kunnen opmerken dat de bestanden 25/intl/fbintl.dll en 25/intl/fbintl.conf niet zijn opgenomen. Dit klopt, omdat gbak de tekenset niet gebruikt voor de verbinding en geen gegevens converteert tussen tekensets. Maar aan de ontvangende kant, Firebird 3.0, zijn icu*-bestanden nodig, omdat tekensets worden gebruikt tijdens het creëren van indices (de laatste stap van back-up/herstel).

Het wordt aanbevolen om twee regels toe te voegen aan firebird.conf van Firebird 3:

Code
MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Het is ook goed om verschillende namen in te stellen voor de IpcName-parameter voor Firebird 2.5 en Firebird 3.0.

Andere parameters kunnen, indien gewenst, worden gewijzigd, rekening houdend met het feit dat tijdens databaseconversie Firebird 2.5 gegevens leest en Firebird 3 gegevens schrijft en indices creëert.

Om het creëren van indices te versnellen, raden we aan om de TempCacheLimit-parameter te verhogen tot ~40% van het beschikbare RAM (als dit een dedicated computer of server is).

Als je bijvoorbeeld 16 GB RAM hebt, kun je instellen:

Code
TempCacheLimit=6G

Natuurlijk kan deze waarde alleen worden ingesteld als je 64-bits Firebird 3 gebruikt, omdat elk 32-bits proces niet meer dan 2 gigabyte RAM kan toewijzen.

Je hoeft deze parameter niet te wijzigen voor 2.5, omdat deze de back-upsnelheid niet beïnvloedt en Firebird 2.5 zelf niet meer dan 2 gigabyte RAM kan gebruiken voor deze parameter, zelfs niet in de 64-bits versie.

Controleer ook vóór de start dat de waarde “page buffers” 0 is op de databaseheaderpagina (gstat -h databasenaam).

Als de parameter “page buffers” is ingesteld in de databaseheader, overschrijft deze de firebird.conf-instellingen en kan in geval van een grote waarde leiden tot enorm geheugengebruik en prestatievermindering van het conversieproces.

Kopieer vervolgens de voorbereide set bestanden naar het doelsysteem.

Houd er rekening mee dat je de reguliere service van Firebird 2.5 moet stoppen vóór de conversie.

Start vervolgens de opdrachtprompt met verhoogde rechten (Uitvoeren als beheerder):

Code
set ISC_USER=<specificeer_eigenaar_van_je_database_of_sysdba>
set ISC_PASSWORD=wachtwoord
"25/gbak" -z -b -g -v -st t -y 25.log db25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin db30

Hier is de volledige opdrachtregel omgeven door dubbele aanhalingstekens, het symbool | wordt gebruikt voor concatenatie en het symbool ^ wordt gebruikt om een regeleinde te escapen (dit is handig bij lange opdrachtregels).

De optie -st(atus) is geïntroduceerd in Firebird 2.5.8 en maakt het mogelijk om meer informatie over het back-upproces in het logbestand te schrijven.

Linux

Firebird 3 is op Linux afhankelijk van de tommath-bibliotheek. Op CentOS (RHEL) bevindt deze bibliotheek zich in de epel-repository, op Ubuntu (Debian) in de systeemrepository.

Op CentOS moet je eerst de EPEL-repository inschakelen en pas daarna « yum install libtommath» uitvoeren.

Op Ubuntu hoef je geen extra repositories toe te voegen, maar Ubuntu 16 en Ubuntu 18 hebben verschillende pakketversies - respectievelijk libtommath0 en libtommath1.

Firebird 3 zoekt naar tommath.so.0, en voor Ubuntu 18 moet je een symlink maken van tommath.so.0 naar tommath.so.1. Om dit te doen moet je eerst tommath.so.1 vinden. Het gebruikelijke pad op Ubuntu is /usr/lib/x86.64- linux -gnu/, maar dit kan anders zijn in andere Debian-gebaseerde distributies.

Een ander probleem is dat er tot en met Firebird 3.0.1 geen eenvoudige manier was om 2 verschillende serverversies te installeren. De optie “compileren uit de bronnen met een prefix” wordt hier niet overwogen.

Firebird 3.0.2 heeft CORE‑5204-fix: build met -enable-binreloc, (http://tracker.firebirdsql.org/browse/CORE-5204), en de afzonderlijke installatieoptie -path.

Dus, als de tommath-bibliotheek en, indien nodig, de tommath.so.0-symlink is geïnstalleerd, kun je de nieuwste Firebird 3.0.4-distributie in /opt/fb3 installeren met de volgende opdracht: ./install.sh -path /opt/fb3

Daarna kun je de bestaande Firebird 2.5 stoppen en streamconversie uitvoeren.

Als je Firebird 2.5 Classic gebruikt, onthoud dan dat Classic meestal wordt uitgevoerd via xinetd - dus je moet de firebird-service voor xinetd uitschakelen of xinetd volledig stoppen.

Je hoeft de MaxUnflushed*-parameters niet in te stellen in firebird.conf van Firebird 3 (omdat ze alleen op Windows werken), of iets te wijzigen in Firebird 2.5.

Embedded toegang in Firebird 2.5 op Linux is niet zoals op Windows - Firebird 2.5 werkt binnen het gbak-proces (zonder netwerkonderdeel), maar toegangsrechten worden gecontroleerd met de gebruikersdatabase, dus het is noodzakelijk om niet alleen de gebruikersnaam van de database-eigenaar maar ook het wachtwoord op te geven:

Code
export ISC_USER=gebruikersnaam ISC_PASSWORD=wachtwoord
/opt/firebird/bin/gbak -b … db25 stdout\
|/opt/fb3/bin/gbak -c … stdin db30

Na de succesvolle conversie moet je de “tijdelijke instantie” van Firebird 3 verwijderen, vervolgens de originele 2.5 deïnstalleren, en pas daarna kun je de schone installatie van Firebird 3 uitvoeren.

Het is beter om Firebird 3 te installeren vanuit tar.gz, niet vanuit de repositories, omdat tar.gz alles installeert op de handige locatie /opt/ firebird , en ook de Firebird-versie in repositories is meestal ouder dan in tar.gz.

Nadat de conversie is voltooid en Firebird 3 is geïnstalleerd, moet je controleren dat de “firebird”-gebruiker de eigenaar is van het databasebestand.

Zo niet, dan moet je dit corrigeren:

Code
chown firebird.firebird databasenaam

Samenvatting

De streamconversie is sneller dan de standaardaanpak (gbak -b, daarna gbak -c), omdat het de “schrijven naar back-up”-bewerkingen in het midden overslaat - als resultaat is de streamconversietijd ongeveer “back-uptijd plus 10-15%” plus “tijd om indices te creëren”.

In onze praktijk is de streamconversie minstens 25-30% sneller dan de traditionele “sequentiële” back-up en herstel.

Naast tijdwinst en vermindering van de vraag naar vrije schijfruimte heeft streamconversie nog een voordeel - het vereist niet dat de bestaande Firebird 2.5 wordt verwijderd, waardoor je snel kunt terugkeren naar 2.5 in geval van een fout tijdens de conversie.

Contacten

Stuur feedback en vragen naar IBSurgeon supportteam.