Schnellanleitung für Gbak-Backup-Wiederherstellung
1.1 Das einfachste Firebird-Backup mit dem gbak-Befehl
1.2. Lokales Backup mit gbak, das online unter Windows durchgeführt werden kann
1.3. Backup mit gbak mit TCP/IP-Verbindungszeichenfolge
1.4. Schnelleres Backup mit gbak mit Service Manager
1.5. Das schnellste Backup mit gbak mit Service Manager und deaktivierter Garbage Collection
1.6. Backup auf eine Netzwerkfreigabe oder einen Netzwerkort
1.7. Einfaches Backup vom entfernten Server auf den lokalen Rechner
1.8. Schnelleres Backup von einem entfernten Server auf den lokalen Rechner mit Service Manager
1.10. Backup einer Firebird-Datenbank 6x schneller mit Firebird 5 (oder HQbird in 2.5/3.0/4.0/5.0)
2. Wiederherstellung mit dem Gbak-Tool
2.1. Der einfachste Wiederherstellungsbefehl
2.2. Wiederherstellung mit localhost-Verbindungszeichenfolge
2.3. Wiederherstellung mit XNET unter Windows
2.4. Schnellere Wiederherstellung mit Service Manager
2.5. Nicht empfohlener Schalter
2.6. Datenbank mithilfe eines Alias wiederherstellen
2.7. Lokales Backup auf den entfernten Server wiederherstellen
2.8. Lokales Backup auf den entfernten Server mit Service Manager wiederherstellen
2.9. Extrem lange Tabellen wiederherstellen
3. Optimierung und Protokollierung von Backup- und Wiederherstellungsprozessen
3.1. Gbak mit ausführlicher Ausgabe
3.2. Leistungsstatistiken zur ausführlichen Ausgabe hinzufügen
3.3. Tabellen vom Backup und/oder von der Wiederherstellung ausschließen
3.4. Passwort für Backup oder Wiederherstellung aus der Datei abrufen
4. Ein-Schritt-Backup-Wiederherstellung
Sehr häufig gestellte Fragen zu VM und Firebird-Backups
Anhang A. Fehler während Backup/Wiederherstellung
Was ist gbak?
Gbak ist ein standardmäßiges Firebird-Befehlszeilentool (siehe offizielle Dokumentation hier), das entwickelt wurde, um 1) ein vollständiges Backup der Datenbank durchzuführen: Es liest jeden Datensatz in der Datenbank und speichert sie in der Backup-Datei, 2) das Backup in eine neue Datenbank wiederherzustellen.
Für Entwickler und Administratoren mit Erfahrung mit anderen RDBMS könnte der Begriff „Backup“ etwas verwirrend sein, da gbak nicht die exakte Kopie der Datenbank erzeugt, sondern eine Datei im Nicht-Datenbankformat, die nur Daten enthält (Indizes werden als Deklarationen gespeichert).
Um eine Datenbank aus der gbak-Backup-Datei zu erstellen, muss der Wiederherstellungsprozess mit gbak durchgeführt werden.
1. Backups meistern mit Gbak
1.0. Vorbereitung
Erstellen wir den Ordner C:\data und legen dort eine Datenbank ab. Wir verwenden eine 5-GB-Datenbank aus dem Firebird OLTP-EMUL-Test, aber Sie können natürlich auch Ihre eigene Datenbank verwenden.
Für Linux-Benutzer: Erstellen wir den Ordner /db und ändern seinen Besitzer auf „firebird“ und kopieren die Datenbank dorthin (stellen Sie sicher, dass ihr Besitzer ebenfalls firebird ist).
mkdir /db
chown firebird -R /db
1.1 Das einfachste Firebird-Backup mit dem gbak-Befehl
Windows
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
In diesem Beispiel greift das gbak-Tool mithilfe von lokalem oder eingebettetem Zugriff auf die Datenbankdatei zu.
Firebird 3.0: Der eingebettete Zugriff in der Standardkonfiguration für Firebird 3.0 (mit dem Parameter ServerMode = SuperServer in firebird.conf) versucht, eine exklusive Sperre auf die Datenbank zu legen, sodass andere Verbindungen nicht auf die Datenbank zugreifen können (oder der gbak-Versuch schlägt aufgrund aktiver Verbindungen fehl).
Firebird 2.5: Mit Firebird 2.5 unter Windows funktioniert der Befehl über das XNET-Protokoll einwandfrei (wenn Sie natürlich nur eine Firebird-Instanz ausführen). Unter Linux versucht Firebird, den eingebetteten Zugriff zu verwenden. Wenn dieser nicht verfügbar ist, wird automatisch (und implizit) versucht, über TCP/IP eine Verbindung herzustellen. (Wenn Sie nicht wissen, was XNET, INET usw. bedeuten, lesen Sie bitte das Firebird Connection Strings Cheat Sheet).
Hinweis 1: Dieser Befehl wird unter dem Konto des Betriebssystembenutzers (d. h. Ihrem) ausgeführt und verwendet dessen Berechtigungen für den Zugriff auf Backup- und Datenbankdateien.
Normalerweise läuft der Firebird-Dienst unter Windows mit dem Konto LocalSystem und unter Linux mit dem Benutzer „firebird“, aber die Konsole wird normalerweise unter Ihrem eigenen Benutzerkonto ausgeführt.
Wenn dieses Benutzerkonto keinen Zugriff auf den Datenbankpfad oder den Backup-Pfad hat, schlägt gbak mit dem Fehler „Cannot open backup file“ fehl (siehe Beispiel in Anhang A. Fehler, #5).
Hinweis 2: gbak -b überschreibt die Backup-Datei stillschweigend. Wenn Sie also bereits backup1.fbk haben, wird diese überschrieben.
Hinweis 3: Unter Linux erstellt dieser gbak-Befehl eine Backup-Datei, deren Besitzer dem Konsolenbenutzer entspricht.
Zeit für das Backup mit diesem Befehl: 120 Sekunden
1.2. Lokales Backup mit gbak, das online unter Windows durchgeführt werden kann
Dieser Abschnitt ist nur für Windows-Benutzer! Normalerweise müssen wir ein Backup durchführen, während aktive Verbindungen zur Datenbank bestehen. Daher ist es besser, anstelle der eingebetteten Verbindung explizit das lokale Protokoll anzugeben, um zu vermeiden, dass gbak selbst in Firebird 3 eine exklusive Sperre auf die Datenbankdatei legt, d. h. XNET.
Für Firebird 3.0:
gbak -b xnet://c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Für Firebird 2.5 können wir eine lokale Verbindungszeichenfolge verwenden, und es wird ebenfalls XNET verwendet:
gbak -b c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Unter Linux unterstützt Firebird kein spezifisches lokales Protokoll wie XNET unter Windows, daher ist es notwendig, eine TCP/IP-Verbindungszeichenfolge zu verwenden (siehe Abschnitt 1.3).
Außerdem funktioniert XNET nur für die einzelne Firebird-Instanz. Wenn Sie also mehrere Firebird-Instanzen unter Windows ausführen, kann es einfacher sein, eine INET-Verbindungszeichenfolge zu verwenden, um die Zielserverinstanz anzugeben.
Zeit für das Backup: 139 Sekunden
1.3. Backup mit gbak mit TCP/IP-Verbindungszeichenfolge
Dies ist der universellste gbak-Befehl, um ein Online-Backup durchzuführen.
Windows
gbak -b localhost:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b localhost:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
In diesem Fall wird durch die Angabe von localhost: am Anfang des Datenbankpfads die Verbindung über das Netzwerksubsystem von Firebird hergestellt.
Es ist etwas langsamer als der lokale Zugriff, funktioniert aber in allen Fällen, in denen ein laufender Server vorhanden ist, der Verbindungen akzeptiert.
Nicht standardmäßiger Port für Firebird
Wenn Firebird auf einem nicht standardmäßigen Port läuft (z. B. 3051 statt 3050), können Sie das Backup auf diese Weise durchführen:
Windows
gbak -b localhost/3051:c:\Data\test1.fdb C:\data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b localhost/3051:/db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
Zeit für das Backup: 182 Sekunden
1.4. Schnelleres Backup mit gbak mit Service Manager
Wie können wir die Universalität der TCP/IP-Verbindung mit Unterstützung für nicht standardmäßige Ports und schnelles lokales Backup erreichen? Verwenden wir den Service Manager! Der Service Manager ist, einfach ausgedrückt, die Möglichkeit, Standardtools über die Firebird-Engine auszuführen. Bitte beachten Sie, dass bei Verwendung des Service Managers der Servername nicht im Pfad zur Datenbank angegeben werden muss, sondern nur im Parameter -se.
Windows
gbak -b -se localhost:service_mgr c:\Data\test1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr /db/test1.fdb /db/backup1.fbk -user SYSDBA -pass masterkey
Dieser Befehl verwendet den Schalter -service, um anzugeben, dass wir den Service Manager der Firebird-Instanz auf Port 3050 für das Backup verwenden möchten.
In diesem Fall wird das Backup direkt innerhalb des Firebird-Prozesses durchgeführt (er enthält eine Kopie des gbak-Codes), und da die prozessinterne Kommunikation viel schneller ist, ist das Backup in diesem Fall deutlich schneller.
Wenn Firebird auf einem nicht standardmäßigen Port läuft (z. B. 3051), kann der Befehl wie folgt aussehen:
gbak -b -se localhost/3051:service_mgr c:\Data\test1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Hinweis: Es gibt eine erhebliche Einschränkung in Firebird 2.5 und Firebird 3.0.0-3.0.5 (erst in 3.0.6 entfernt): Die Befehlszeile (alle Parameter und Pfade für die Datenbank und das Backup) muss weniger als 256 Zeichen enthalten.
Wenn Sie dieses Limit erreichen, z. B. aufgrund langer Pfade von Datenbank und Backup, können Sie einen Alias für die Datenbank in databases.conf (3.0 und höher) oder aliases.conf (2.5) deklarieren:
mydb1=c:\Data\test1.fdb #Windows
oder
mydb1=/db/test1.fdb #linux
und ihn dann in unserem Befehl verwenden:
Windows
gbak -b -se localhost:service_mgr mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey
Zeit für das Backup: 115 Sekunden
1.5. Das schnellste Backup mit gbak mit deaktivierter Garbage Collection
Um das Backup noch schneller zu machen, fügen wir den Schalter -g hinzu:
-G(ARBAGE_COLLECT) Garbage Collection unterdrücken
Der Backup-Befehl lautet also wie folgt:
Windows
gbak -b -se localhost:service_mgr -g mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Linux
gbak -b -se localhost:service_mgr -g mydb1 /db/backup1.fbk -user SYSDBA -pass masterkey
Der Schalter -g zwingt die Firebird-Engine, die Garbage Collection für den Backup-Prozess in der Datenbankdatei zu deaktivieren.
Das bedeutet nicht, dass Garbage-Record-Versionen in der Backup-Datei gespeichert werden, sondern dass der Server während des Backups nicht versucht, vorhandenen Garbage in der Datenbank zu bereinigen, und das Backup dadurch schneller ist.
Wir empfehlen dringend, diesen Schalter zu verwenden, da wir glauben, dass die Garbage Collection und die damit verbundene Bereinigung durch Sweep (gfix -sweep oder Autosweep) durchgeführt werden sollte. Betrachten Sie gbak also besser nicht als Alternative zum Sweep.
Zeit für das Backup: 105 Sekunden
1.6. Backup auf eine Netzwerkfreigabe oder einen Netzwerkort
Was ist, wenn wir die Backup-Datei auf eine Netzwerkfreigabe legen müssen?
Unter Windows
Die häufige Verwirrung neuer Firebird-Benutzer: Manuelles Backup (wenn Sie den Befehl von einer Eingabeaufforderung aus starten) mit einfachem gbak -b auf eine Netzwerkfreigabe funktioniert einwandfrei, aber die schnelle Version von gbak mit -se localhost:service_mgr funktioniert nicht.
Der Grund ist, dass Firebird unter Windows mit dem Konto LocalSystem läuft, das keinen Zugriff auf Netzwerkorte hat (es sei denn, diese Netzwerkfreigaben haben Zugriff für die Gruppe „Jeder“ konfiguriert, aber das ist in unserer Ära der Ransomware sehr, sehr gefährlich).
Die Lösung besteht darin, den Firebird-Dienst unter Windows mit einem Konto auszuführen, das über ausreichende Rechte für den Zugriff auf die Netzwerkfreigabe und gleichzeitig ausreichende Rechte für den Zugriff auf lokale Datenbankdateien und Systemdateien in C:\ProgramData\Firebird verfügt. Außerdem ist es eine gute Idee, den Parameter RestrictAccess in firebird.conf zu konfigurieren.
Unter Linux
Da Firebird unter Linux mit dem Konto „firebird“ läuft, mounten Sie die Netzwerkfreigabe mit Zuordnung zum Benutzer „firebird“, sodass der Firebird-Dienst auf den Netzwerkort wie auf ein lokales Laufwerk zugreifen kann.
1.7. Einfaches Backup vom Remote-Server auf den lokalen Rechner
Es ist möglich, die Datenbank vom Remote-Server auf den lokalen Rechner zu sichern.
Der Beispielbefehl unten startet auf einem Windows-Computer, greift auf die Datenbank auf einem Linux-Server zu (mit der IP-Adresse 192.168.0.108, aber natürlich kann auch der Hostname des Servers verwendet werden), und die Sicherungsdatei wird im Ordner C:\Data auf Windows gespeichert:
gbak -b -user SYSDBA -pass masterkey 192.168.0.108:/db/test1.fdb c:\data\remotebackup1.fbk
Zeit für das Backup: 568 Sekunden
Dieser Befehl ist in der Regel viel langsamer als ein lokales Backup, da gbak Daten vom Remote-Server liest und Datensätze über das Netzwerk überträgt.
1.8. Schnelleres Backup vom Remote-Server auf den lokalen Rechner mit Service Manager
Der folgende Befehl ist schneller als das traditionelle Backup vom Remote-Server auf den lokalen Rechner, beschrieben in #1.7
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb stdout > C:\Data\remoteback1.fbk
Er verwendet den Service Manager, um das Backup auf dem Remote-Server durchzuführen, aber die Ausgabe wird an die stdout-Pipe gesendet und dann in die lokale Datei umgeleitet.
Dieser Befehl ist in der Regel 15%-20% schneller als in #1.7 (Einfaches Backup vom Remote-Server auf den lokalen Rechner), aus den folgenden Gründen:
- Er führt das Backup über den Service Manager auf dem Remote-Server durch, sodass alle Lese- und Komprimierungsvorgänge auf dem schnellsten Weg ausgeführt werden,
- Er überträgt über das Netzwerk nur die resultierende Sicherungsdatei, deren Größe kleiner ist als die Daten in der Datenbank
Mit diesem Befehl ist es jedoch nicht möglich, den ausführlichen Modus zu aktivieren und detaillierte Ausgaben in der Protokolldatei zu speichern.
Zeit für das Backup: 473 Sekunden
1.9. Backup der Firebird-Datenbank auf dem Remote-Server auf denselben Remote-Server mit Service Manager
Mit dem Service Manager ist es möglich, ein gbak-Backup der Datenbank auf dem Remote-Server aufzurufen und es auch auf demselben Remote-Server zu speichern.
gbak -b -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey /db/test1.fdb /db/back12.fbk
Dieser Befehl ruft über den Service Manager ein Backup auf dem Remote-Server auf, mit der Anweisung, die Sicherungsdatei auch auf demselben Netzwerkserver zu speichern.
Natürlich sollte der Sicherungsort für den Firebird-Dienst zugänglich sein (unter Linux läuft er als Benutzer „firebird“, unter Windows als LocalSystem-Konto).
1.10. Firebird-Datenbank 6x schneller sichern mit Multi-Thread-Backup in Firebird 5 (oder HQbird 2.5/3.0/4.0/5.0)
Wenn Sie mit der Backup-Leistung von Firebird gbak immer noch nicht zufrieden sind, sollten Sie eine Migration auf Firebird 5 in Betracht ziehen (oder die Enterprise-Firebird-Distribution verwenden: HQbird für andere Versionen).
Es unterstützt Multi-Thread-Backup, das bis zu 6x schnellere Backup-Vorgänge mit gbak ermöglicht.
gbak -b -par 8 -se localhost:service_mgr -g C:\Data\testbigdb1.fdb c:\Data\backup1.fbk -user SYSDBA -pass masterkey
Wie Sie sehen können, gibt es einen neuen Parameter -par 8, der gbak veranlasst, 8 Threads zum Erstellen eines Backups zu verwenden.
HQbird führt Wartungsaufgaben (Sweep, Backup, Restore) viel schneller durch (die Ergebnisse in der Abbildung unten stammen natürlich von einer anderen Datenbank):

2. Wiederherstellen mit dem Gbak-Tool
Wir haben die Sicherungsdatei backup1.fbk, die mit einem der obigen Befehle erstellt wurde, und müssen sie auf schnelle und effiziente Weise wiederherstellen.
Nehmen wir an, die Datei befindet sich unter Windows in C:\Data\backup1.fbk oder unter Linux in /db/backup1.fbk.
2.1. Der einfachste Wiederherstellungsbefehl
Unter Windows
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Unter Linux
gbak -c /db/backup1.fbk /db/new1.fdb -user SYSDBA -pass masterkey
Bitte beachten Sie zunächst, dass gbak -c die Datenbankdatei nicht überschreibt. Wenn die Datei C:\data\new1.fdb oder /db/new1.fdb bereits existiert, gibt gbak einen Fehler zurück, dass die Datenbank bereits existiert.
Dieser Befehl funktioniert tatsächlich sehr unterschiedlich auf 2.5/3.0+ und Windows/Linux.
Unter Linux verwendet dieser Befehl den eingebetteten Zugriff auf die erstellte Datenbank (wenn Sie die Reihenfolge der Firebird-Anbieter in firebird.conf nicht geändert haben, natürlich) sowohl für 3.0 als auch für 2.5.
Unter Windows verwendet er bei Firebird 3.0 mit der Standardreihenfolge der Anbieter den eingebetteten Zugriff, bei 2.5 - XNET.
Dieser Befehl erstellt dann eine Datei mit den Rechten des Benutzers, der gbak gestartet hat. Dies ist besonders unter Linux wichtig - wenn Sie gbak als root ausführen, wird der Eigentümer der Datenbankdatei root sein, und der Firebird-Prozess, der unter dem Benutzer „firebird“ läuft, kann nicht auf die wiederhergestellte Datei zugreifen.
Hinweis für Linux-Benutzer
Viele Leute wenden, um den Besitz zu „korrigieren“, Berechtigungen für alle an, um auf die wiederhergestellte Datenbank zuzugreifen, d.h. so etwas wie „chmod 777 database“, aber das ist sehr unsicher. Der richtige Weg ist, den Eigentümer der Datenbank mit dem folgenden Befehl auf firebird zu ändern:
chown firebird /db/new1.fdb
Im Allgemeinen ist dieser Befehl gut genug für die einfache Wiederherstellung von Nicht-Produktionsdatenbanken (für Tests oder in der Entwicklung).
Zeit für die Wiederherstellung: 275 Sekunden
2.2. Wiederherstellung mit localhost-Verbindungszeichenfolge
Die universellste, aber nicht die schnellste Wiederherstellungsoption ist die folgende:
Windows
gbak -c C:\Data\backup1.fbk localhost:C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey
Nicht standardmäßiger Port
Wenn Firebird auf einem nicht standardmäßigen Port läuft, z.B. 3051, kann dieser im Wiederherstellungsbefehl angegeben werden:
Windows
gbak -c C:\Data\backup1.fbk localhost/3051:C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c /db/backup1.fbk localhost/3051:/db/new1.fdb -user SYSDBA -pass masterkey
Zeit für die Wiederherstellung: 1225 Sekunden
2.3. Wiederherstellung mit XNET unter Windows
Um die Wiederherstellung etwas schneller zu machen, können wir unter Windows XNET verwenden (für Firebird 3.0 und höher):
gbak -c C:\Data\backup1.fbk xnet://C:\Data\New2.fdb -user SYSDBA -pass masterkey
Unter Firebird 2.5 unter Windows wird der XNET-Zugriff mit der einfachen Befehlszeile verwendet (wenn nur eine Firebird-Instanz läuft):
gbak -c C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Zeit für die Wiederherstellung: 585 Sekunden
2.4. Schnellere Wiederherstellung mit Service Manager
Und der schnellste Weg zur Wiederherstellung ist die Verwendung des Service Managers
Windows
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new1.fdb -user SYSDBA -pass masterkey
Linux
gbak -c -se localhost:service_mgr /db/backup1.fbk localhost:/db/new1.fdb -user SYSDBA -pass masterkey
Mit dem Schalter -se rufen wir den Service Manager auf der localhost-Adresse auf und weisen ihn an, den Wiederherstellungscode innerhalb der Firebird-Engine auszuführen.
Wenn die Wiederherstellung vom Service Manager durchgeführt wird, gehört die erstellte Datenbankdatei dem Konto der laufenden Firebird-Instanz (Prozess) - unter Linux ist es „firebird“ und unter Windows LocalSystem.
Zeit für die Wiederherstellung: 244 Sekunden
2.5. Nicht empfohlener Schalter
Irgendwann könnten Sie versucht sein, den folgenden Schalter zu verwenden:
-R(ECREATE_DATABASE) [O(VERWRITE)] create (or replace if OVERWRITE used) database from backup file (restore)
um das Ersetzen der vorhandenen Datenbank durch die neue zu erzwingen.
Nach unserer Erfahrung erhöht dieser Schalter die Wahrscheinlichkeit, versehentlich die Produktionsdatenbank zu überschreiben, erheblich.
Wir empfehlen dringend, die Datenbank jedes Mal mit einem neuen Namen wiederherzustellen und sie umzubenennen sowie die alte Datenbank explizit zu löschen.
Wir werden nicht einmal ein Beispiel für den Befehl mit diesem Schalter bereitstellen.
2.6. Wiederherstellung der Datenbank mit Alias
Es ist möglich, die Datenbank mit dem Alias wiederherzustellen, der in databases.conf (oder aliases.conf in Firebird 2.5) deklariert ist.
Zum Beispiel haben wir die folgende Deklaration:
restdb=c:\Data\newrest1.fdb #Windows
restdb=/db/newrest1.fdb #Linux
So können wir den folgenden Befehl ausführen, um das Backup auf den durch den Alias angegebenen Pfad wiederherzustellen:
Windows
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk restdb -user SYSDBA -pass masterkey
Linux
gbak -c -se localhost:service_mgr /db/backup1.fbk restdb -user SYSDBA -pass masterkey
2.7. Wiederherstellung eines lokalen Backups auf dem Remote-Server
Es ist möglich, die lokale Sicherungsdatei auf dem Remote-Firebird-Server wiederherzustellen.
In diesem Beispiel stellen wir die auf Windows gespeicherte Sicherungsdatei auf dem Linux-Server wieder her (seine IP-Adresse 102.168.0.108):
gbak -c C:\Data\backup1.fbk 192.168.0.108:/db/newdb1.fdb -user SYSDBA -pass masterkey
Zeit für die Wiederherstellung: 7009 Sekunden
Wie Sie vielleicht bemerken, funktioniert der Remote-Wiederherstellungsprozess sehr langsam. Können wir ihn mit dem Service Manager beschleunigen?
2.8. Wiederherstellung des lokalen Backups auf dem Remote-Server mit Service Manager
Um das lokale Backup auf dem Remote-Server mit Service Manager wiederherzustellen, ist es notwendig, den Trick mit dem stdin-Eingabestrom anzuwenden:
gbak -c -se 192.168.0.108:service_mgr -user SYSDBA -pass masterkey stdin /db/new3.fdb < C:\Data\backup1.fbk
Dieser Befehl ruft die Wiederherstellung auf dem Remote-Server mit dem Standard-Eingabestrom stdin als Quelle des Backups auf - und liefert die Eingabe über den Teil < C:\Data\backup1.fbk des Befehls.
Sieht ein wenig knifflig aus? Aber es ist ein einfacher Weg, um die gbak-Leistung bei der Wiederherstellung auf dem Remote-Server um das 10-fache zu steigern!
Zeit für die Wiederherstellung: 450 Sekunden
2.9. Wiederherstellung extrem langer Tabellen
Wenn Sie eine wirklich große Datenbank mit mehr als 2 Milliarden Zeilen insgesamt haben, ist es notwendig, den Schalter -o[ne_at_a_time] anzugeben, um jede Tabelle in einer separaten Transaktion wiederherzustellen und einen internen Überlauf zu vermeiden.
gbak -c -se localhost:service_mgr -one C:\Data\backup1.fbk C:\data\new44.fdb -user SYSDBA -pass masterkey
3. Optimierung und Protokollierung von Backup- und Wiederherstellungsprozessen
3.1. Gbak mit ausführlicher Ausgabe
Standardmäßig ist gbak ein sehr stilles Tool; es gibt bei erfolgreicher Ausführung nichts zurück. Um es ausführlich zu machen, können wir den Schalter -v[erify] hinzufügen:
gbak -b -se localhost/3050:service_mgr -g mydb1 c:\Data\backup1.fbk -v -user SYSDBA -pass masterkey
Als Ergebnis gibt es mehr Details. Das kleine, aber ärgerliche Problem ist, dass die Ausgabe auf der Konsole das ausführliche Backup erheblich langsamer machen kann als die stille Variante. Daher ist es eine gute Idee, das Protokoll mit dem Schalter - y logfile in einer Datei zu speichern:
gbak -b -se localhost/3050:service_mgr -g -v mydb1 c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
Hinweis: gbak überschreibt die vorhandene Protokolldatei nicht! Wenn Sie in diesem Beispiel bereits C:\data\backuplog1.txt haben, wird das Backup einen Fehler auslösen (siehe #3 in Anhang A).
Hinweis 2: Es gibt die Option -verbint, um das Intervall für die Meldung der Anzahl der verarbeiteten Datensätze während des Backups oder der Wiederherstellung zu steuern.
3.2. Leistungsstatistiken zur ausführlichen Ausgabe hinzufügen
In der ausführlichen gbak-Ausgabe für Backup und Wiederherstellung können wir Nachrichten wie diese sehen:
gbak: writing data for table COUNTRY
gbak:16 records written
für jede Tabelle und andere Datenbankobjekte.
Es ist interessant herauszufinden, welche Tabellen/Objekte die meiste Zeit in Anspruch nehmen, oder?
Dafür ist es notwendig, den Schalter -st(atistics) zu verwenden:
-ST(ATISTICS) TDRW show statistics:
T time from start
D delta time
R page reads
W page writes
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -st tdrw c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
Wenn angewendet, fügt es dem Protokoll die folgenden Spalten hinzu:
gbak: time delta reads writes
so können wir die Zeit und die E/A sehen, die für jede Zeile aufgewendet wurden.
3.3. Tabellen vom Backup und/oder von der Wiederherstellung ausschließen
Wenn Sie denken, dass einige Tabellen vom Backup ausgeschlossen werden können (ein gutes Beispiel ist eine sehr lange Protokolltabelle), können Sie sie im Parameter SK[IP_DATA] mit einem regulären Ausdruck als Parameter angeben.
Im folgenden Beispiel schließen wir Daten aus den Tabellen COUNTRY und JOB von der Sicherung aus:
gbak -b -se localhost/3050:service_mgr -g -v mydb1 -SKIP_D ‘(COUNTRY|JOB)’ c:\Data\backup1.fbk -user SYSDBA -pass masterkey -y C:\data\backuplog1.txt
Und im folgenden Beispiel schließen wir die Tabelle CLIENT von der Wiederherstellung aus:
gbak -c -se localhost:service_mgr C:\Data\backup1.fbk C:\data\new33.fdb -user SYSDBA -pass masterkey -SKIP_D "CLIENT"
Bitte beachten Sie, dass der Parameter für SKIP_DATA als einzelner Parameter übergeben werden muss, daher muss er in Anführungszeichen stehen!
Unter Linux sollten einfache Anführungszeichen verwendet werden, unter Windows - doppelte.
Vorsichtsmaßnahmen beim Ausschließen von Tabellen aus Sicherung und/oder Wiederherstellung
Wir empfehlen dringend, die Bedingung des regulären Ausdrucks vor der Verwendung mit der folgenden Abfrage zu überprüfen - sie gibt eine Liste der Tabellen zurück, die der Filterbedingung entsprechen (in der Abfrage sind die Anführungszeichen immer einfach):
SQL> SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE TRIM(RDB$RELATION_NAME) SIMILAR TO '(COUNTRY|JOB)';
RDB$RELATION_NAME
===============================
COUNTRY
JOB
Bitte beachten Sie, dass Tabellen aus der Sicherung oder Wiederherstellung unabhängig von vorhandenen Einschränkungen (Fremdschlüsseln) ausgeschlossen werden. Wenn Sie einen solchen Ausschluss nicht sorgfältig geplant haben, kann es daher leicht zu dem Fehler „Cannot commit foreign key index“ während des Wiederherstellungsprozesses kommen.
3.4. Passwort für Sicherung oder Wiederherstellung aus einer Datei abrufen
Wenn Sie nicht gerade ein großer Fan davon sind, das Passwort für alle sichtbar zu machen, die Ihre Befehle sehen, werden Sie den folgenden Schalter mögen: -fetch passwordfile
Erstellen wir die Datei mit dem Passwort in C:\Data\passfile.txt und verwenden sie (hier verwenden wir eine sehr einfache eingebettete Variante; natürlich funktioniert der Schalter auch mit dem Service Manager):
gbak -b c:\Data\test1.fdb c:\Data\backup5.fbk -user SYSDBA -fetch C:\Data\passfile.txt
Es gibt 2 praktische Vorteile:
- Wenn wir das Passwort in einer einzigen Datei speichern, können wir sicherstellen, dass alle unsere Befehlsdateien immer das aktuelle Passwort verwenden.
- Wir legen das Passwort nicht in jeder Befehlsdatei offen.
4. Ein-Schritt-Sicherung-Wiederherstellung
Oft ist das Ziel der Sicherung die sofortige Wiederherstellung, um eine neue frische Datenbank zu erhalten, zum Beispiel um die neue Seitengröße für die Datenbank anzuwenden oder die bestehende Datenbank von 2.5 auf 3.0 zu migrieren.
In diesem Fall ist es möglich, die Sicherung-Wiederherstellung mit einem einzigen Befehl durchzuführen, indem Standardeingabe und -ausgabe als Quellen für die entsprechenden Befehle verwendet werden, um die Erstellung einer Zwischensicherungsdatei zu umgehen, den Bedarf an freiem Speicherplatz zu reduzieren und den Prozess zu beschleunigen.
Der Befehl lautet wie folgt:
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout | gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb
Im Wesentlichen führen wir hier 2 Befehle aus, verbunden durch das Symbol |,
den ersten für die Sicherung nach stdout:
gbak -b -se localhost:service_mgr -g -user SYSDBA -password masterkey C:\Data\test1.fdb stdout
und den zweiten für die Wiederherstellung von stdin:
gbak -c -se localhost:service_mgr -user SYSDBA -password masterkey stdin C:\Data\new10.fdb
Dieser Befehl ist der schnellste Weg, um eine Sicherung-Wiederherstellung auf derselben Firebird-Instanz durchzuführen.
Bitte beachten Sie: Für die Konvertierung von Datenbanken mit Ein-Schritt-Sicherung-Wiederherstellung von 2.5 auf 3.0 ist es notwendig, 2 Firebird-Instanzen zu verwenden, siehe Details hier.
5. Leistungsübersicht
Die folgende Abbildung enthält Informationen über die Geschwindigkeit verschiedener Sicherungsbefehle der lokalen Sicherung der Testdatenbank:

Wie Sie sehen können, ist der schnellste Weg für eine lokale Sicherung die Verwendung des Service Managers (Schalter -se[rvice]) und die Unterdrückung der Garbage Collection (Schalter -ig).
Für die Sicherung vom entfernten Server auf die lokale Maschine ist der Service Manager ebenfalls die beste Option:

Die Situation bei der Wiederherstellungsleistung ist ähnlich: Der Service Manager ist der schnellste Weg zur Wiederherstellung.

Was den eher seltenen Fall betrifft, dass die Wiederherstellung von einer lokalen Sicherung auf den entfernten Server durchgeführt wird, ist die Verwendung des Service Managers mit dem stdin-Trick die einzige praktikable Wahl:

Sehr häufig gestellte Frage zu VM- und Firebird-Sicherungen
Warum sollte ich Firebird-Sicherungswerkzeuge verwenden, wenn es beliebte Sicherungswerkzeuge gibt, die versprechen, alles zu sichern?
Oder: Ich sichere das vollständige Image der virtuellen Maschine, warum sollte ich mich um die Sicherung der Firebird-Datenbank kümmern?
Die Antwort finden Sie hier.
Anhang A. Fehler während Sicherung/Wiederherstellung
- Ein Versuch, gbak ohne Parameter oder mit einem Benutzer auszuführen, der nicht der Eigentümer der Datenbank/nicht SYSDBA ist, führt zu folgendem Fehler:
gbak: ERROR:Unable to perform operation. You must be either SYSDBA or owner of the database
gbak:Exiting before completion due to errors
- Wenn Sie das falsche Passwort angeben, erscheint der folgende Fehler:
gbak: ERROR:Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
gbak:Exiting before completion due to errors
- Ein Fehler tritt auf, wenn die vorhandene Datei als Ziel für das ausführliche Protokoll angegeben wird:
gbak: ERROR:cannot open status and error output file C:\data\backuplog1.txt
gbak: ERROR: Exiting before completion due to errors
gbak:Exiting before completion due to errors
- Ein Fehler tritt auf, wenn die vorhandene Datenbank im gbak-Wiederherstellungsbefehl als Ziel angegeben wird:
gbak: ERROR:database C:\data\new1.fdb already exists. To replace it, use the -REP switch
gbak:Exiting before completion due to errors
- Ein Fehler tritt auf, wenn gbak versucht, eine Sicherung an einen Ort zu schreiben, an dem es nicht über ausreichende Schreibrechte verfügt.
gbak: ERROR:cannot open file /db/test1.fbk
gbak:Exiting before completion due to errors
- Wenn gbak versucht, auf eine Datei ohne Berechtigung zuzugreifen - zum Beispiel, wenn die Datei unter Linux einen anderen Eigentümer als den Benutzer „firebird“ hat:
gbak: ERROR:no permission for read-write access to database /db/test1.fdb
gbak: ERROR: IProvider::attachDatabase failed when loading mapping cache
gbak:Exiting before completion due to errors
- Versuch, die ausführliche Ausgabe zu verwenden:
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -user SYSDBA -pass masterkey /db/test1.fdb stdout >
c:\data\rembackup2.fbk
gbak: ERROR:standard output is not supported when using split operation or in verbose mode
gbak: ERROR: Exiting before completion due to errors
gbak:Exiting before completion due to errors
- Versuch, eine Sicherung mit dem Service Manager auf dem entfernten Server mit aktivierter ausführlicher Ausgabe und Speicherung in der Protokolldatei durchzuführen.
C:\HQbird\Firebird30>gbak -se 192.168.0.108:service_mgr -v -st tdrw -y lg1.txt -user SYSDBA -pass masterkey /db/test1.f
db stdout > c:\data\rembackup2.fbk
gbak: ERROR:Invalid clumplet buffer structure: string length doesn't match with clumplet
gbak:Exiting before completion due to errors
- Fehler bei der Ein-Schritt-Sicherung-Wiederherstellung, wenn die Sicherung aus irgendeinem Grund fehlschlägt:
gbak: ERROR:No request from user for stdin data
gbak:Exiting before completion due to errors
- Wenn Sie versuchen, eine Nicht-Sicherung an gbak zu übergeben:
gbak: ERROR:unavailable database
gbak:Exiting before completion due to errors
gbak: ERROR:expected backup description record
gbak:Exiting before completion due to errors
- Die Sicherung einer beschädigten Datenbankdatei mit der falschen Seite meldet den folgenden Fehler (Nummer und Datenbankdatei werden natürlich abweichen):
gbak: ERROR:database file appears corrupt (E:\DATABASE1.FDB)
gbak: ERROR: wrong page type
gbak: ERROR: page 9294588 is of wrong type (expected 8, found 0)
gbak: ERROR:gds_$get_segment failed
gbak:Exiting before completion due to errors
gbak: ERROR:Unexpected I/O error while reading from backup file
gbak:Exiting before completion due to errors
Kontakte
Bitte zögern Sie nicht, uns bei Fragen zu kontaktieren oder Fehler oder Tippfehler zu melden: [email protected]