Diese Seite wurde maschinell übersetzt. Lesen Sie das englische Original. English

IBSurgeon-Bibliothek

Schnelle Konvertierung von Firebird 2.5-Datenbanken zu Firebird 3.0

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

Jede Firebird-Version hat ihr eigenes Datenbankformat - O(n)D(isk)S(tructure). Bis zur Version 2.5 kann die Datenbank-Engine mit der ODS der vorherigen Version arbeiten, aber die Firebird-3-Engine arbeitet nur mit ihrer eigenen ODS (Version 12.0).

Um eine Datenbank von Firebird 2.5 auf 3.0 zu aktualisieren, ist es notwendig, die Datenbankdatei mit dem gbak-Tool in 2.5 zu sichern und sie dann in 3.0 wiederherzustellen.

Natürlich muss eine Datenbank für die Konvertierung vorbereitet werden - Metadaten und Abfragen müssen auf Kompatibilität mit Firebird 3.0 geprüft werden, und nach der Wiederherstellung in Firebird 3 müssen alle Objekte mit BLR (Trigger, gespeicherte Prozeduren usw.) neu kompiliert werden.

Wenn wir den Standardansatz verwenden, müssen wir ein Datenbank-Backup auf 2.5 erstellen und dann Firebird 3 installieren und die Backup-Datei wiederherstellen.

Das ist in Ordnung, wenn Sie genügend Zeit haben. Aber wenn Ihre Datenbank groß ist oder Sie Dutzende von Datenbanken migrieren müssen und zeitlich begrenzt sind, können Sie die Stream-Konvertierung verwenden, die 25-30% schneller ist.

Die Idee ist, ein Fließband zu verwenden:

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

Gbak -b von 2.5 schreibt das Backup sequenziell und leitet es an den stdout-Stream weiter, der sofort von gbak von 3.0 vom stdin gelesen wird und eine neue Datenbank erstellt.

Dieses Fließband muss lokalen Datenbankzugriff (embedded) verwenden, da Netzwerkübertragungen von Daten (auch über localhost) den Prozess erheblich verlangsamen würden.

Im Folgenden betrachten wir, wie man ein Stream-Backup unter Windows und unter Linux durchführt.

Windows

Es ist besser, ein spezielles Set von Firebird-Dateien für Windows zu erstellen. Wir müssen das Firebird-2.5-Embedded-Archiv nehmen, fbembed.dll in fbclient.dll umbenennen und gbak.exe und optional isql.exe hinzufügen.

Für Firebird 3.0 verwenden wir das Standard-Archiv.

Das minimale Set (das keine Laufzeit von VS2008/VS2010 erfordert) enthält diese Dateien:

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

Erfahrene Administratoren/Entwickler mögen bemerken, dass die Dateien 25/intl/fbintl.dll und 25/intl/fbintl.conf nicht enthalten sind. Das stimmt, weil gbak den Zeichensatz für die Verbindung nicht verwendet und keine Daten zwischen Zeichensätzen konvertiert. Aber auf der Empfängerseite, Firebird 3.0, werden die Dateien icu* benötigt, da Zeichensätze während der Indexerstellung verwendet werden (der letzte Schritt des Backup/Restore).

Es wird empfohlen, der firebird.conf von Firebird 3 zwei Zeilen hinzuzufügen:

Code
MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Außerdem ist es gut, unterschiedliche Namen für den Parameter IpcName für Firebird 2.5 und Firebird 3.0 festzulegen.

Andere Parameter können, wenn gewünscht, geändert werden, wobei zu bedenken ist, dass während der Datenbankkonvertierung Firebird 2.5 Daten liest und Firebird 3 Daten schreibt und Indizes erstellt.

Um die Erstellung von Indizes zu beschleunigen, empfehlen wir, den Parameter TempCacheLimit auf ~40% des verfügbaren Arbeitsspeichers zu erhöhen (wenn dies ein dedizierter Computer oder Server ist).

Wenn Sie beispielsweise 16 GB RAM haben, können Sie setzen:

Code
TempCacheLimit=6G

Natürlich kann dieser Wert nur gesetzt werden, wenn Sie 64-Bit-Firebird 3 verwenden, da jeder 32-Bit-Prozess nicht mehr als 2 Gigabyte RAM zuweisen kann.

Sie müssen diesen Parameter für 2.5 nicht ändern, da er die Backup-Geschwindigkeit nicht beeinflusst und Firebird 2.5 selbst nicht mehr als 2 Gigabyte RAM für diesen Parameter verwenden kann, selbst in der 64-Bit-Version.

Bitte prüfen Sie außerdem vor dem Start, dass der Wert “page buffers” auf der Datenbank-Header-Seite 0 ist (gstat -h datenbankname).

Wenn der Parameter “page buffers” im Datenbank-Header gesetzt ist, überschreibt er die firebird.conf-Einstellungen und kann bei einem großen Wert zu enormem Speicherverbrauch und Leistungseinbußen des Konvertierungsprozesses führen.

Kopieren Sie dann das vorbereitete Datei-Set auf das Zielsystem.

Bitte beachten Sie, dass Sie den regulären Dienst von Firebird 2.5 vor der Konvertierung stoppen müssen.

Starten Sie dann die Eingabeaufforderung mit erhöhten Rechten (Als Administrator ausführen):

Code
set ISC_USER=<geben_sie_den_besitzer_ihrer_datenbank_oder_sysdba_an>
set ISC_PASSWORD=passwort
"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 ist die vollständige Befehlszeile von doppelten Anführungszeichen umgeben, das Symbol | wird für die Verkettung verwendet, und das Symbol ^ wird verwendet, um einen Zeilenumbruch zu maskieren (dies ist bei langen Befehlszeilen nützlich).

Die Option -st(atus) wurde in Firebird 2.5.8 eingeführt und ermöglicht es, mehr Informationen über den Backup-Prozess in die Log-Datei zu schreiben.

Linux

Firebird 3 hängt auf Linux von der tommath-Bibliothek ab. Auf CentOS (RHEL) befindet sich diese Bibliothek im EPEL-Repository, auf Ubuntu (Debian) im System-Repository.

Auf CentOS müssen Sie zuerst das EPEL-Repository aktivieren und erst dann « yum install libtommath» ausführen.

Auf Ubuntu müssen Sie keine zusätzlichen Repositories hinzufügen, aber Ubuntu 16 und Ubuntu 18 haben unterschiedliche Paketversionen - libtommath0 bzw. libtommath1.

Firebird 3 sucht nach tommath.so.0, und für Ubuntu 18 müssen Sie einen Symlink von tommath.so.0 auf tommath.so.1 erstellen. Dazu müssen Sie zuerst tommath.so.1 finden. Der übliche Pfad auf Ubuntu ist /usr/lib/x86.64- linux -gnu/, kann aber in anderen Debian-basierten Distributionen unterschiedlich sein.

Ein weiteres Problem ist, dass es bis einschließlich Firebird 3.0.1 keine einfache Möglichkeit gab, zwei verschiedene Serverversionen zu installieren. Die Option “Kompilieren aus den Quellen mit einem Präfix” wird hier nicht betrachtet.

Firebird 3.0.2 enthält den Fix CORE‑5204: Build mit -enable-binreloc, (http://tracker.firebirdsql.org/browse/CORE-5204), und die separate Installationsoption -path.

Wenn also die tommath-Bibliothek und, falls erforderlich, der Symlink tommath.so.0 installiert wurde, können Sie die neueste Firebird-3.0.4-Distribution mit dem folgenden Befehl in /opt/fb3 installieren: ./install.sh -path /opt/fb3

Danach können Sie das vorhandene Firebird 2.5 stoppen und die Stream-Konvertierung ausführen.

Wenn Sie Firebird 2.5 Classic verwenden, denken Sie bitte daran, dass Classic normalerweise von xinetd ausgeführt wird - Sie müssen also den Firebird-Dienst für xinetd deaktivieren oder xinetd vollständig stoppen.

Sie müssen die Parameter MaxUnflushed* in der firebird.conf von Firebird 3 nicht setzen (da sie nur unter Windows funktionieren) oder etwas in Firebird 2.5 ändern.

Der Embedded-Zugriff in Firebird 2.5 unter Linux ist nicht wie unter Windows - Firebird 2.5 arbeitet innerhalb des gbak-Prozesses (ohne Netzwerkteil), aber die Zugriffsrechte werden mit der Benutzerdatenbank geprüft, daher ist es notwendig, nicht nur den Benutzernamen des Datenbankbesitzers, sondern auch das Passwort anzugeben:

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

Nach der erfolgreichen Konvertierung müssen Sie die “temporäre Instanz” von Firebird 3 entfernen, dann das ursprüngliche 2.5 deinstallieren, und erst danach können Sie die saubere Installation von Firebird 3 durchführen.

Es ist besser, Firebird 3 aus tar.gz zu installieren, nicht aus den Repositories, da tar.gz alles an den praktischen Ort /opt/ firebird _ installiert, und auch die Firebird-Version in den Repositories ist normalerweise älter als in tar.gz._

Nachdem die Konvertierung abgeschlossen und Firebird 3 installiert ist, müssen Sie prüfen, dass der Benutzer “firebird” der Besitzer der Datenbankdatei ist.

Wenn nicht, müssen Sie es korrigieren:

Code
chown firebird.firebird datenbankname

Zusammenfassung

Die Stream-Konvertierung ist schneller als der Standardansatz (gbak -b, dann gbak -c), da sie die “Schreibvorgänge ins Backup” in der Mitte überspringt - als Ergebnis beträgt die Stream-Konvertierungszeit etwa “Backup-Zeit plus 10-15%” plus “Zeit zur Indexerstellung”.

In unserer Praxis ist die Stream-Konvertierung mindestens 25-30% schneller als das traditionelle “sequentielle” Backup und Restore.

Neben der Zeitersparnis und der Reduzierung des Bedarfs an freiem Speicherplatz hat die Stream-Konvertierung einen weiteren Vorteil - sie erfordert nicht das Entfernen des vorhandenen Firebird 2.5, was es ermöglicht, im Fehlerfall während der Konvertierung schnell zu 2.5 zurückzukehren.

Kontakte

Bitte senden Sie Feedback und Anfragen an das IBSurgeon-Supportteam.