FirebirdSQL logo

Wiederherstellen oder neu erzeugen?

Sollte eine Datenbank wiederhergestellt oder ersetzt werden?Das Wiederherstellen einer Datenbank ist der Vorgang, bei dem Sie die vorhandene Datei übernehmen und löschen, bevor Sie sie auf der Festplatte durch eine Sicherungskopie ersetzen.gbak tut dies, wenn Sie den Schalter -r[ecreate_database] o[verwrite] oder den Schalter -rep[lace_database] angeben.Was ist der Unterschied?

Wenn eine Datenbank auf der Festplatte vorhanden ist und Sie gbak auffordern, diese mit einem der beiden oben genannten Schalter wiederherzustellen, können Sie die Datenbank beschädigen, insbesondere wenn die Datenbank verwendet wird und nicht mit gfix heruntergefahren wurde.Wenn Sie die Wiederherstellung einer Datenbank nur teilweise abgeschlossen haben und einige Benutzer entscheiden, ob sie sich anmelden können, ist die Datenbank möglicherweise beschädigt.

Wenn der Wiederherstellungsprozess feststellt, dass die Speicherauszugsdatei beschädigt ist, schlägt die Wiederherstellung fehl und Ihre zuvor funktionierende Datenbank ist für immer verschwunden.

Es ist ersichtlich, dass das Wiederherstellen einer Datenbank eine schwierige Erfahrung sein kann.

Erstellen Sie aus Sicherheitsgründen die Datenbank immer unter einem neuen Namen — einem Klon — und aktualisieren Sie die Datei aliases.conf, und referenzieren Sie die Datenbank hier.Auf diese Weise verweisen Sie Ihre Benutzer unabhängig vom tatsächlichen Dateinamen auf dem Server immer über den Alias ​​auf die Datenbank.

Fehlerhafte Zeichenfolgenfehler während der Wiederherstellung

Während eines Wiederherstellungsvorgangs, höchstwahrscheinlich beim Wiederherstellen einer Sicherung, die mit einer älteren gbak-Version erstellt wurde, können in der Ausgabe von gbak Fehlermeldungen angezeigt werden, die auf fehlerhafte Unicode-Zeichenfolgen hinweisen.Der Grund, warum diese auftreten können, ist wie von Helen Borrie erklärt:

Der Quelltext gespeicherter Prozeduren (und verschiedener anderer Objekttypen, z. B. CHECK-Einschränkungen) wird ebenso wie der "kompilierte" BLR-Code in einem Blob gespeichert.Wenn Sie eine Datenbank wiederherstellen, wird das BLR nicht neu erstellt: Das gleiche BLR wird verwendet, bis Sie das Objekt das nächste Mal neu erstellen oder ändern.

In der Vergangenheit hat die Engine in Bezug auf die Transliteration von in die Quelle und das BLR eingebetteten Zeichenfolgen nicht das Richtige getan.Wie Sie wahrscheinlich wissen, wurde in Version 2.1 und 2.5 viel Arbeit geleistet, um die internationalen Sprachprobleme anzugehen.Ein Nebeneffekt davon war, dass alles, was aus Daten und Metadaten gelesen wurde, einer Überprüfung der "Wohlgeformtheit" unterzogen wurde.Daher werfen diese zuvor gespeicherten Quell- und BLR-Objekte beim Wiederherstellen "fehlerhafte Zeichenfolgen" -Fehler aus, wenn gbak versucht, die Daten in diesen Systemtabellendatensätzen zu lesen und zu schreiben.Dieser sehr alte Fehler betrifft auch Benutzer-Blobs, wenn sie mit dem Zeichensatz NONE gespeichert wurden und der Client so konfiguriert ist, dass er einen bestimmten Zeichensatz liest, in den die gespeicherten Daten nicht transliteriert werden konnten.

In Version 2.1 gab es Skripte in ../misc, die Sie ausführen konnten, um die Metadaten-Blobs zu reparieren und als Vorlage für die Reparatur ähnlicher Fehler in Blobs in Ihren Benutzerdaten zu verwenden.Die Reparaturschalter wurden dem gbak-Wiederherstellungscode in Version 2.5 hinzugefügt, um die gleichen Korrekturen an Metadaten bzw. Daten während des Wiederherstellungsvorgangs einer Datenbank für das Upgrade vorzunehmen.

docnext count = 24

Wiederherstellung beschleunigen

Die Wiederherstellung einer Datenbank aus einer Sicherung kann schneller ausgeführt werden, wenn die Option -se[rvice] verwendet wird.Obwohl dies für Remote-Wiederherstellungen verwendet wird, kann es auch lokal verwendet werden.Es wird einfach vermieden, dass die Daten über das TCP-Netzwerk kopiert werden, was die Aktionen der Wiederherstellung verlangsamen kann.

tux> gbak -replace -service tux:service_mgr /backups/employee.fbk employee

Im obigen Beispiel wird die Mitarbeiterdatenbank auf dem Tux-Server mithilfe des Service-Managers "remote" gesichert.Auf dem Tux-Server wird der Befehl natürlich ausgeführt, sodass er überhaupt nicht remote ausgeführt wird.

Sie können natürlich die Optionen -g[arbage_collect] und -se[rvice] kombinieren.

Sicherheit von Backups

Wie Sie oben gesehen haben, kann jeder mit einem gültigen Benutzernamen und einem gültigen Kennwort eine Datenbank-Dump-Datei mittels gbak wiederherstellen, vorausgesetzt, er überschreibt keine vorhandene Datenbank.Dies bedeutet, dass Ihre wertvollen Daten von schändlichen Charakteren auf ihren eigenen Servern gestohlen und verwendet werden können, um eine Kopie Ihrer Datenbank zu erstellen und beispielsweise Ihre Verkaufszahlen einsehen.

Um dies zu verhindern, wird empfohlen, Vorsichtsmaßnahmen zu treffen.Sie sollten verhindern, dass Backups versehentlich überschrieben werden, bevor sie abgelaufen sind.Einige Vorsichtsmaßnahmen, die Sie treffen können, sind:

  • Stellen Sie die Dump-Datei nach Abschluss der Sicherung immer als schreibgeschützt ein. Dies verhindert, dass die Datei überschrieben wird.

  • Alternativ können Sie das Datum (und die Uhrzeit?) in Ihre Sicherungsdateinamen aufnehmen.

  • Bewahren Sie Backups an einem sicheren Ort auf dem Server auf. Durch das Speichern von Sicherungen an einem Ort mit eingeschränktem Zugriff wird die Wahrscheinlichkeit verringert, dass Ihre Sicherungsdateien in die Natur gelangen.

  • Bewahren Sie Bandkopien Ihrer Backups sehr sicher auf. Ein verschlossener sicherer oder externer Standort mit guter Sicherheit ist ratsam. Der externe Speicherort wird auch nach einer vollständigen Katastrophe von Nutzen sein, da die Sicherungen an einem separaten Speicherort auf dem Server gespeichert werden, auf dem sie benötigt werden.

  • Überführen Sie Ihr Backup auf eine Partition oder Festplatte, auf der die Verschlüsselung aktiviert ist.

  • Stellen Sie sicher, dass nur autorisiertes Personal Zugriff auf Bereiche hat, in denen Backups aufbewahrt werden.

  • Testen Sie Ihre Sicherungen immer, indem Sie eine Datenbank aus einer kürzlich durchgeführten Sicherung klonen.

In Firebird 2.1 ist eine zusätzliche Sicherheitsfunktion in gbak und allen anderen Befehlszeilenprogrammen integriert.Diese neue Funktion verbirgt das Kennwort automatisch, wenn es in der Befehlszeile mit dem Schalter -password angegeben wird.Gbak ersetzt das Passwort durch Leerzeichen — eines für jedes Zeichen im Passwort.Dies verhindert, dass andere Benutzer im System, die den Befehl ps ausführen und Ihre Befehlszeile und Parameter anzeigen können, ein angegebenes Kennwort anzeigen.Auf diese Weise können nicht autorisierte Benutzer das angegebene Kennwort nicht erhalten.

tux> gbak -b -user SYSDBA -passw secret employee /backups/employee.fbk
tux> ps efx| grep -i gba[k]
20724 ... gbak -backup -user SYSDBA -passw           employee employee.fbk
... (lots more data here)

Sie können oben sehen, dass das Kennwort unter Firebird 2.1 nicht angezeigt wird, da jedes Zeichen durch ein einzelnes Leerzeichen ersetzt wird.Dies bedeutet, dass es für jemanden möglich ist, herauszufinden, wie lang das Passwort sein könnte, und das könnte ein Hinweis für einen dedizierten Cracker sein.Wenn Sie die Länge des erforderlichen Passworts kennen, wird dies etwas einfacher. Verwenden Sie für optimale Ergebnisse eine zufällige Anzahl von Leerzeichen zwischen -passw und dem tatsächlichen Passwort.Je schwieriger Sie es den bösen Menschen in Ihrem Netzwerk machen, desto besser.

Rezepte für die Sicherung und Wiederherstellung

Die folgenden Rezepte zeigen Beispiele für Sicherungs- und Wiederherstellungsaufgaben mit gbak.Dies sind wahrscheinlich die häufigsten Fälle, denen Sie als DBA begegnen werden.Alle Beispiele verwenden die mit Firebird gelieferte Mitarbeiter-Datenbank (employee), und der tatsächliche Speicherort ist in aliases.conf korrekt konfiguriert.Jedes der folgenden Rezepte wird unter der Annahme ausgeführt, dass den Umgebungsvariablen ISC_USER und ISC_PASSWORD geeignete Werte zugewiesen wurden.

Voraussetzungen zum Sichern und Wiederherstellen

Wenn Sie eine geöffnete und laufende Datenbank ersetzen, besteht eine gute Chance, dass Sie sie beschädigen.Um optimale Ergebnisse und eine minimale Wahrscheinlichkeit einer Beschädigung einer Datenbank zu erzielen, sollten Sie diese schließen, bevor Sie sie ersetzen.Verwenden Sie zum Schließen einer Datenbank gfix wie folgt:

tux> gfix -shut -tran 60 employee

Das obige Beispiel verhindert, dass eine neue Transaktion gestartet wird, wodurch verhindert wird, dass neue Abfragen ausgeführt werden oder neue Sitzungen mit der Datenbank verbunden werden.Es dauert bis zu 60 Sekunden, bis sich alle abgemeldet haben und alle aktuellen Transaktionen abgeschlossen sind, bevor die Datenbank heruntergefahren wird.Wenn Transaktionen mit langer Laufzeit bis zum Ende von 60 Sekunden noch nicht abgeschlossen sind, tritt beim Herunterfahren eine Zeitüberschreitung auf und die Datenbank bleibt geöffnet.

Note

Nach Abschluss der Wiederherstellung der Datenbank wird die Datenbank automatisch wieder zur Verwendung geöffnet.

Sichern und Wiederherstellen mit und ohne Schattendateien.

An Datenbanken können bei normaler Verwendung Schattendateien angehängt werden.gbak sichert diese glücklicherweise mit und stellt sie ebenfalls wieder her. Bei normaler Verwendung werden Schattendateien neu erstellt.Wenn Sie nur die Datenbank wiederherstellen und die Schatten ignorieren möchten, kann gbak dies für Sie tun, wie das folgende Beispiel zeigt.

tux> # Prüfe die aktuellen Schattendateien und nutze isql, da gstat fehlerhaft ist
tux> isql employee

Database:  employee
SQL> show database;
Database: employee
        Owner: SYSDBA
 Shadow 1: "/opt/firebird/shadows/employee.shd1" manual
 Shadow 2: "/opt/firebird/shadows/employee.shd2" manual
...

SQL> quit;

tux> # Datenbank ohne Schattendateien wiederherstellen
tux> gfix -shut -tran 60 employee
tux> gbak -replace overwrite /backups/employee.fbk employee

tux> # Prüfe die Schattendateien erneut, nutze isql, da gstat fehlerhaft ist
tux> isql employee

Database:  employee
SQL> show database;
Database: employee
        Owner: SYSDBA
 Shadow 1: "/opt/firebird/shadows/employee.shd1" manual
 Shadow 2: "/opt/firebird/shadows/employee.shd2" manual
...

SQL> quit;


tux> # Datenbank wiederherstellen und eliminiere Schattendateien
tux> gfix -shut -tran 60 employee
tux> gbak -replace overwrite -kill /backups/employee.fbk employee

tux> # Prüfe die Schattendateien erneut, nutze isql, da gstat fehlerhaft ist
tux> isql employee

Database:  employee
SQL> show database;
Database: employee
        Owner: SYSDBA
...

SQL> quit;
Note

Ich benutze isql in den obigen Beispielen, da gstat -h verwirrt darüber zu sein scheint, wie viele Schatten sich in einer Datenbank befinden.Es meldet Null, wenn es zwei gibt, holt schließlich auf und meldet, dass es zwei gibt. Wenn Sie einen Schatten entfernen, meldet es, dass es jetzt drei gibt!

Remote-Sicherungen und -Wiederherstellungen

Das Dienstprogramm gbak von Firebird kann Backups einer entfernten Datenbank erstellen.Dazu müssen Sie eine Verbindung zum Service Manager herstellen, der auf dem Remote-Server ausgeführt wird. Dies wird normalerweise als service_mgr bezeichnet.Das folgende Beispiel zeigt, wie die Firebird-Mitarbeiterdatenbank auf dem Server tuxrep vom Server tux gesichert wird.Die Sicherung wird auf den Remote-Server geschrieben, dh die Sicherungsdatei wird auf dem Server tuxrep und nicht auf dem Server tux erstellt.Das verwendete Netzwerkprotokoll ist TCP.

tux> # Berichtsdatenbank auf Remote-Server tuxrep sichern
tux> gbak -backup -service tuxrep:service_mgr employee /backups/remote_backup.fbk

Die Sicherungsdatei hat denselben Eigentümer und dieselbe Gruppe wie der Firebird-Datenbankserver — zumindest auf Unix-Systemen.

Es ist auch möglich, eine entfernte Datenbank auf diese Weise wiederherzustellen, und gbak erlaubt dies.

tux> # Stelle die schreibgeschützte Berichtsdatenbank auf dem Remote-Server tuxrep wieder her.
tux> gbak -replace -mode read_only -service tuxrep:service_mgr \
            /backups/remote_backup.fbk employee
Note

Das obige Beispiel verwendet die praktische Unix-Fähigkeit, eine lange Zeile über viele kürzere zu teilen, wobei ein Schrägstrich als letztes Zeichen in der Zeile verwendet wird.

Wie immer wird empfohlen, sich vor dem Ersetzen einer Datenbank zu hüten, falls während der Wiederherstellung Probleme auftreten.Im obigen Beispiel wird die vorhandene Datenbank im schreibgeschützten Modus neu erstellt. Dies muss jedoch nicht immer der Fall sein.

Eine Remote-Sicherung kann auch auf dem Datenbankserver selbst ausgeführt werden!Unter Windows macht dies keinen Unterschied, aber auf Unix-Systemen reduziert diese lokal-entfernte Methode zum Sichern und Wiederherstellen den Netzwerkverkehr.Der 'Remote'-Server ist in diesem Fall nicht wirklich entfernt. Es ist nur die Methode zum Ausführen der Sicherung — herstellen einer Verbindung zum Service Manager --, die die Entfernung impliziert.

tux> # Sichern der Mitarbeiterdatenbank auf diesem Server, aber pseudo-remote!
tux> gbak -backup -service tux:service_mgr employee /backups/remote_backup.fbk

Entsprechende Wiederherstellungen können auch 'remote' ausgeführt werden:

tux> # Restore the employee database on this server, but pseudo-remotely!
tux> gbak -replace -service tux:service_mgr /backups/remote_backup.fbk employee

Das Format des Parameters, der für den service-Schalter verwendet wird, unterscheidet sich je nach Art des verwendeten Netzwerkprotokolls:

TCP

Bei Verwendung von TCP-Netzwerken ist das Parametertrennzeichen ein Doppelpunkt, wie in -service server_name:service_mgr.

Named pipes

Bei Verwendung von Named Pipes benötigt der Parameter zwei führende Backslashes und der Separator selbst ist ebenfalls ein Backslash, wie in -service \\server_name\service_mgr.

Remote-Sicherungen und Wiederherstellungen mit SSH

Wie oben gezeigt, können Sie die speziellen Dateinamen stdin und stdout verwenden, um eine Datenbank in einer separaten Datenbank auf demselben Server zu sichern und wiederherzustellen.Sie können jedoch auch dieselben Tools über eine SSH-Verbindung zu einem Remoteserver verwenden und die Sicherung einer Datenbank direkt an eine Wiederherstellung einer separaten Datenbank übergeben.

Im ersten Beispiel wird eine lokale Datenbank auf einen Remote-Server kopiert, auf dem Firebird ausgeführt wird und die Umgebung des Firebird-Benutzers so eingerichtet ist, dass sich das gbak-Tool bei der Anmeldung standardmäßig auf $PATH befindet.

Note

In jedem der folgenden Beispiele wurden die Parameter -user sysdba und -password whatever in den Befehlszeilen durch {…​} ersetzt.Wenn Sie diese Befehle ausführen, müssen sie für alle gbak-Remotebefehle angegeben werden, es sei denn, der Firebird-Benutzer der/den Remote-Datenbank(en) hat die Werte für ISC_USER und ISC_PASSWORD in .profile oder .bashrc (oder äquivalente Anmeldedateien) gesetzt.Dies ist jedoch eine wirklich schlechte Idee und unglaublich unsicher.

tux> # Klone eine Testdatenbank auf einen anderen Server, ohne dass eine Dump-Datei erforderlich ist
tux> gbak -backup employee stdout | \
ssh firebird@tuxrep "gbak {...} -replace stdin emptest"

Wenn das oben Gesagte ausgeführt wird, werden Sie aufgefordert, ein Kennwort für den Remote-Firebird-Benutzer auf dem Server tuxrep einzugeben, vorausgesetzt, Sie haben noch kein ordnungsgemäßes SSH-Schlüsselpaar eingerichtet und sind aktiv.Der Befehl ersetzt die lokale Datenbank gemäß dem Aliasnamen emptest. Sie können jedoch bei Bedarf vollständige Pfadnamen für die Datenbanken angeben.Das Folgende zeigt ein Beispiel für die Ausführung des oben genannten Vorgangs.

tux> # Klonen eine Testdatenbank auf einen anderen Server, ohne dass eine Dump-Datei erforderlich ist
tux> gbak -backup employee stdout | \
ssh firebird@tuxrep "gbak {...} -replace stdin emptest"

firebird@tuxrep's password:

Wie Sie sehen, steht der Ausgabe nicht viel im Wege, aber Sie können eine Remoteverbindung herstellen und Folgendes überprüfen:

tux> isql {...} tuxrep:emptest

Database:  tuxrep:emptest

SQL> show database;

Database: tuxrep:emptest
        Owner: SYSDBA
PAGE_SIZE 4096
...

Das nächste Beispiel zeigt eine Remote-Datenbank, die auf ähnliche Weise in einer lokalen Datenbank gesichert wird.

tux> ssh firebird@tuxrep "gbak -backup {...} emptest stdout" | \
gbak -create stdin data/tuxrep_emptest.fdb

firebird@tuxrep's password:

tux> ls data

employee.fdb  tuxrep_emptest.fdb

Sie können sehen, dass eine neue Datenbank tuxrep_emptest.fdb erstellt wurde.Funktioniert sie?Die Überprüfung mit isql zeigt, dass dies der Fall ist.

tux> isql data/tuxrep_emptest.fdb

Database:  data/tuxrep_emptest.fdb

SQL> quit;

Das letzte Beispiel zeigt, wie eine entfernte Datenbank auf einem Server in einer entfernten Datenbank auf einem anderen Server gesichert wird.

tux> ssh firebird@tuxrep "gbak -backup {...} emptest stdout" |  \
ssh firebird@tuxqa "gbak -create {...} stdin data/tuxrep_empqa.fdb"

firebird@tuxrep's password:
firebird@tuxqa's password

tux> ssh firebird@tuxqa "ls data"

employee.fdb  tuxrep_empqa.fdb

Externe Tools verwenden

gbak und nbackup sind die besten Tools zum Sichern und / oder Wiederherstellen von Firebird-Datenbanken.Sie wurden ausgiebig getestet und kennen die Interna der Datenbank und deren Funktionsweise. Daher ist die Wahrscheinlichkeit, dass diese Tools Ihre wertvollen Daten beschädigen, sehr gering.Einige Datenbankadministratoren verwenden jedoch weiterhin gerne externe Tools (die nicht mit Firebird geliefert werden), um aus irgendeinem Grund Backups zu erstellen.

Da externe Tools anhand des Aliasnamens nicht wissen können, wo sich eine Datenbank befindet, müssen der Skriptschreiber und / oder der Datenbankadministrator explizit den korrekten Speicherort der Datenbankdatei(en) ermitteln und diese an die externe Datei weitergeben Werkzeug.Um dies für Skriptautoren zu vereinfachen, verwendet meine eigene Installation einen Standard in meiner Datei "aliases.conf" wie folgt:

  • Der Datenbankalias muss in Spalte eins beginnen.

  • Vor dem Gleichheitszeichen (=) muss ein Leerzeichen stehen.

  • Nach dem Gleichheitszeichen (=) muss ein Leerzeichen stehen.

  • Doppelte Anführungszeichen um den Datenbankdateinamen sind nicht zulässig - dies funktioniert auch nicht für die Firebird-Dienstprogramme.

  • Datenbanken sind alle Einzeldateidatenbanken.

Die letzte Regel gilt nur für meine Installation und bedeutet, dass das folgende einfache Sicherungsskript funktioniert.Wenn mehrere Dateidatenbanken verwendet würden, wäre mehr Code erforderlich, um eine Sicherung mit externen Tools durchzuführen.

tux> cat /opt/firebird/aliases.conf
# ---------------------------------------------------------
# WARNUNG: Backup-Standards erfordern Folgendes:
#          Der Datenbankname beginnt in Spalte 1.
#          Vor dem Gleichheitszeichen steht ein einzelnes Leerzeichen.
#          Nach dem Gleichheitszeichen steht ein einzelnes Leerzeichen.
#          Der Pfad hat keine doppelten Anführungszeichen (sie funktionieren nicht!)
# ----------------------------------------------------------
employee = /opt/firebird/examples/empbuild/employee.fdb

Im Folgenden wird die Verwendung des Dienstprogramms "gzip" auf einem Linux-Server zum Erstellen und Komprimieren einer Sicherung einer laufenden Datenbank gezeigt.Folgendes wird als Root-Benutzer ausgeführt, da gfix ausgeführt werden muss, um die Datenbank herunterzufahren.

tux> # Backup der Produktiv-Mitarbeiter-DB mit gzip
tux> gfix -shut -tran 60 employee
tux> DBFILE=`grep -i "^employee =" /opt/firebird/aliases.conf | cut -d" " -f3`
tux> gzip -9 --stdout $DBFILE > /backups/employee.fdb.gz

Der Wiederherstellungsprozess für diese Datenbank wäre umgekehrt.Wieder läuft das Folgende als root.

tux> # Wiederherstellen der Produktiv-Mitarbeiter-DB aus dem gzip-Backup
tux> gfix -shut -tran 60 employee
tux> DBFILE=`grep -i "^employee =" /opt/firebird/aliases.conf | cut -d" " -f3`
tux> gunzip --stdout /backups/employee.fdb.gz > $DBFILE

tux> # Stelle sicher, dass Firebird die Datei sehen kann.
tux> chown firebird:firebird $DBFILE

Ein simples Backup & Restore

In diesem Beispiel wird eine Sicherung erstellt und die ursprüngliche Datenbank mit der neuen Sicherung sofort überschrieben.Dies ist normalerweise keine gute Idee, da die erste Aktion einer Wiederherstellung darin besteht, die Datenbank zu löschen.

tux> # Datenbank sichern
tux> gbak -backup employee /backups/employee.fbk

tux> # Datenbank wiederherstellen
tux> gfix -shut -tran 60 employee
tux> gbak -replace /backups/employee.fbk employee

Nur Metadaten

Es ist möglich, gbak zu verwenden, um eine leere Datenbank neu zu erstellen, die nur die verschiedenen Domains, Tabellen, Indizes usw. der ursprünglichen Datenbank enthält, jedoch keine der Daten.Dies kann hilfreich sein, wenn Sie Ihre Anwendung in einer Testumgebung geprüft haben und das System beispielsweise in eine Produktionsumgebung migrieren möchten, aber ohne Ihre Testdaten neu beginnen möchten.

tux> # Nur die Metadaten sichern
tux> gfix -shut -tran 60 employee
tux> gbak -backup -meta_data employee employee.meta.fbk

Wenn die obige Dump-Datei auf dem Produktionsserver wiederhergestellt wird, sind nur die Metadaten vorhanden.

Es gibt eine andere Möglichkeit, eine Datenbank ohne Daten und nur mit den Metadaten zu erstellen.Stellen Sie einfach aus einem vorhandenen Speicherauszug wieder her, der die Daten enthält, und geben Sie den Schalter -m[eta_data] in die Wiederherstellungsbefehlszeile ein.Die Datenbank wird wiederhergestellt, aber keine der Originaldaten sind vorhanden.

tux> # Nur die Metadaten wiederherstellen
tux> gbak -create employee.fbk mytest.fdb -meta_data

Der Schalter -m[eta_data] kann entweder für eine Sicherung oder eine Wiederherstellung verwendet werden, um die Erstellung einer Klondatenbank (oder das Überschreiben einer vorhandenen) ohne tatsächliche Daten zu erleichtern.

Die Sicherung aufteilen

Die in einem eigenen Handbuch dokumentierte Filteranwendung gsplit funktioniert nicht mehr.Dieser Filter wurde mit alten Versionen von InterBase und Firebird geliefert, damit große Datenbanksicherungen auf mehrere Dateien aufgeteilt werden können, damit die Dateisystemgrenzen eingehalten werden können.Solche Beschränkungen können die Größe einer CD sein, die Beschränkung auf 2 GB für einzelne Dateigrößen auf einer DVD, wobei einige Unix-Dateisysteme eine Beschränkung auf 2 GB usw. haben.

Mit gbak können die Speicherauszugsdateien in verschiedene Größen (mit mindestens 2048 Byte) aufgeteilt werden, und es werden nur die benötigten Dateien erstellt.

tux> # Datenbanksicherung in mehreren Dateien auftrennen.
tux> gbak -backup employee /backups/emp.a.fbk 600m /backups/emp.b.fbk 600m

Die Größen nach jedem Dateinamen geben an, wie groß diese bestimmte Datei sein darf.Die Standardgröße ist Byte, aber Sie können ein Suffix von k, m oder g angeben, um Einheiten von Kilo, Mega oder Gigabyte zu verwenden.

Wenn der Speicherauszug abgeschlossen ist, bevor in einige Dateien geschrieben wird, werden diese Dateien nicht erstellt.Eine Dump-Datei wird immer nur erstellt, wenn dies erforderlich ist.

Die Größe der endgültigen Speicherauszugsdatei wird stillschweigend ignoriert, wenn die Datenbank zu groß geworden ist, um eine abgeschnittene Sicherung abzuschließen.Wenn im obigen Beispiel die Sicherung insgesamt 1500MB benötigt, wird die letzte Datei auf eine endgültige Größe von 900m anstatt der angegebenen 600m geschrieben.

Um eine solche Sicherung mit mehreren Dateien wiederherzustellen, müssen Sie alle Dateinamen im Speicherauszug und in der richtigen Reihenfolge angeben.Das folgende Beispiel zeigt, wie die oben genannte Mitarbeiterdatenbank aus den beiden oben gespeicherten Dateien wiederhergestellt wird:

tux> # Datenbank aus mehreren Dateien wiederherstellen
tux> gfix -shut -tran 60 employee
tux> gbak -replace /backups/employee.a.fbk /backups/employee.b.fbk employee

ODS anpassen

Normalerweise ist das verwendete ODS dasjenige, welches von der wiederherstellenden Firebird-Version verwendet wird.Die obigen Beispiele ändern also tatsächlich den ODS, wenn die Datenbank wiederhergestellt wird.Die Sicherung sollte mit dem Dienstprogramm gbak durchgeführt werden, das von der alten ODS-Version von InterBase oder Firebird bereitgestellt wird.Die Wiederherstellung sollte mit gbak aus der neueren Version von Firebird durchgeführt werden.

tux> setenv_firebird 2.0
Firebird environment set for version 2.0.

tux> # Aktuelle ODS-Version prüfen (als root-Benutzer!)
tux> gstat -h employee|grep ODS
        ODS version             11.0

tux> # Alte Datenbank sichern
tux> gbak -backup employee /backups/employee.2_0.fbk

tux> setenv_firebird 2.1
Firebird environment set for version 2.1.

tux> # Datenbank neu erstellen und ODS aktualisieren
tux> gfix -shut -tran 60 employee
tux> gbak -replace /backups/employee.2_0.fbk employee

tux> # Neue ODS-Version prüfen (als root-Benutzer!)
tux> gstat -h employee|grep ODS
        ODS version             11.1

Danach wurde die alte 2.0 Firebird-Datenbank als Firebird 2.1-Datenbank mit dem entsprechenden Upgrade auf das ODS von 11.0 auf 11.1 neu erstellt — und die alte Datenbank gelöscht.

Das Skript setenv_firebird wird nicht mit Firebird geliefert und setzt einfach PATH usw., um die richtige Version von Firebird gemäß dem angegebenen Parameter zu verwenden.

Cache-Größe anpassen

Der Standard-Datenbank-Cache wird beim Erstellen der Datenbank oder anschließend mit gfix erstellt.gbak kann eine Datenbank wiederherstellen und auch die Standard-Cache-Größe zurücksetzen.Der Prozess ist wie folgt:

tux> # Aktuelle Cache-Größe prüfen (als root-Benutzer!)
tux> gstat -h employee | grep -i buffer
        Page buffers            0

tux> # Datenbank wiederherstellen und Cache-Größe anpassen
tux> gfix -shut -tran 60 employee
tux> gbak -replace -buffer 200 /backups/employee.fbk employee

tux> # Neue Cache-Größe anpassen (als root-Benutz!)
tux> gstat -h employee | grep -i buffer
        Page buffers            200

Die Standard-Cache-Größe wird verwendet, wenn die Anzahl der Puffer Null ist, wie im ersten Beispiel oben.Mit gbak kann dies bei Bedarf geändert werden.gbak kann die Cache-Größe jedoch nicht auf Null zurücksetzen.Sie müssen dazu gfix verwenden.

Anpassen der Seitengröße

Ähnlich wie im obigen Beispiel zum Ändern der Standardgröße des Datenbankcaches kann die Größe der Datenbankseite auch mit gbak geändert werden.

tux> # Prüfe die aktuelle Seitengröße (als root-Benutzer!)
tux> gstat -h employee | grep -i "page size"
        Page size               4096

tux> # Stelle die Datenbank wieder her und ändere die Seitengröße.
tux> gfix -shut -tran 60 employee
tux> gbak -replace -page_size 8192 /backups/employee.fbk employee

tux> # Prfe die neue Seitengröße (als root-Benutzer!)
tux> gstat -h employee | grep -i "page size"
        Page size               8192

Schreibgeschützten Datenbankklon erstellen

Manchmal möchten Sie nicht, dass Ihre Berichtersteller intensive Abfragen für Ihre Produktionsdatenbank ausführen.Zu diesem Zweck können Sie ganz einfach täglich einen Klon Ihrer Produktionsdatenbank erstellen und schreibschützen.Auf diese Weise kann das Berichtsteam so viele intensive Berichte erstellen, wie es möchte, ohne dass dies negative Auswirkungen auf die Produktionsdatenbank hat, und es wird verhindert, dass versehentlich Änderungen vorgenommen werden.

Das folgende Beispiel zeigt die Produktionsmitarbeiterdatenbank, die auf dem Linux-Server tux ausgeführt wird und auf den Linux-Server tuxrep des Berichtsteams geklont wird.Zuerst auf dem Produktionsserver:

tux> # Sicherung der Produktions-Datenbank.
tux> gbak -backup employee /backups/employee.fbk

Dann auf dem tuxrep-Server des Berichtsteams:

tuxrep> # Kopiere die Dump-Datei vom tux-Server mittels Scp
tuxrep> scp fbuser@tux:/backups/employee.fbk ./
Using keyboard-interactive authentication.
Password:
employee.fbk              |         19 kB |  19.3 kB/s | ETA: 00:00:00 | 100%

tuxrep> # Mitarbeiter-DB schreibgeschützt wiederherstellen
tuxrep> gfix -shut -tran 60 employee
tuxrep> gbak -replace -mode read_only employee.fbk employee

tuxrep> # Datenbankmodus prüfen (als root-Benutzer!)
tuxrep> gstat -h employee|grep -i attributes
        Attributes              no reserve, read only

Datenbankklon ohne Dump-Datei erstellen

Sie können gbak verwenden, um einen Klon einer Datenbank auf demselben Server zu erstellen, ohne eine potenziell große Dump-Datei erstellen zu müssen.Zu diesem Zweck leiten Sie die Ausgabe einer gbak-Sicherung wie folgt direkt an die Eingabe einer gbak-Wiederherstellung weiter.

tux> # Klonen der Testdatenbank auf denselben Server, ohne dass eine Dump-Datei erforderlich ist.
tux> gbak -backup emptest stdout | gbak -replace stdin emptest_2

Sie werden feststellen, dass der Name der Ausgabedatei für die Sicherung stdout und der Name der Eingabedatei für die Wiederherstellung stdin lautet.Durch diese Möglichkeit, die Standardausgabe eines Prozesses an die Standardeingabe eines anderen Prozesses weiterzuleiten, können Sie vermeiden, dass eine Zwischen-Dump-Datei erstellt wird.Die obigen Befehle setzen voraus, dass geeignete Aliasnamen sowohl für emptest als auch für emptest_2 eingerichtet sind.Wenn nicht, müssen Sie den vollständigen Pfad zu den beiden Datenbanken und nicht den Alias ​​angeben.

Die Option -replace beim Wiederherstellungsprozess überschreibt den angegebenen Datenbanknamen — als Alias ​​oder als vollständigen Pfad --, falls vorhanden, und erstellt ihn neu, wenn dies nicht der Fall ist.Alternativ können Sie auch die Option recreate overwrite verwenden.Beide haben das gleiche Ergebnis.

Wenn Sie keine vorhandenen Datenbanken überschreiben möchten, verwenden Sie -create. Dadurch wird eine Datenbank nur erstellt, wenn sie noch nicht vorhanden ist, und wenn dies der Fall ist, wird sie mit einem Fehler beendet.In POSIX-kompatiblen Systemen ist der Fehlercode in $? In diesem Fall 1.

Weitere Beispiele für das Sichern und Wiederherstellen von Remote-Datenbanken über ssh unter Verwendung der Dateinamen stdin und stdout finden Sie unten.

gbak-Fallstricke

Das Folgende ist eine kurze Liste von Fallstricken und Funnies, die ich bei meiner eigenen Verwendung von gbak entdeckt habe.Einige davon sind oben erwähnt, andere möglicherweise nicht.Wenn Sie sie alle hier an einem Ort sammeln, sollten Sie herausfinden können, was passiert, wenn Sie Probleme haben.

gbak-Standardmodus

Wenn Sie keinen Modusschalter wie -b[ackup] oder -c[reate] usw. angeben, führt gbak eine Sicherung durch, als ob der Schalter -b[ackup] angegeben worden wäre — vorausgesetzt, die anderen angegebenen Schalter sind für eine Sicherung korrekt.

Warning

Das Erkennen, ob Sie eine Sicherung oder eine Wiederherstellung durchführen möchten, bedeutet, dass Sie, wenn Sie den Befehlszeilenschalter -z verwenden, um gbak-Informationen anzuzeigen, eine Sicherung erstellen und die von Ihnen angegebene Sicherungsdatei überschreiben, wenn in der Befehlszeile auch Datenbankname und Name der Sicherungsdatei vorhanden sind.Dies setzt voraus, dass es für gbak eine Möglichkeit gibt, den Benutzernamen und das Kennwort zu bestimmen, die verwendet werden sollen — entweder als Befehlszeilenparameter oder über definierte Umgebungsvariablen.

Normaler vs. privilegierter Modus

Nur der SYSDBA oder der Eigentümer einer Datenbank kann eine Sicherung der Datenbank erstellen. Jeder authentifizierte Benutzer kann jedoch eine Datenbanksicherung mit dem Schalter -c[reate] wiederherstellen.Dies bedeutet, dass Sie sicherstellen müssen, dass Ihre Sicherungsdateien nicht in die falschen Hände geraten, da nichts dann Unbefugte daran hindert, Ihre Daten zu sehen, indem Sie einfach Ihre Sicherungen auf Ihrem Server wiederherstellen.

Die Datenbankwiederherstellung schlägt natürlich fehl, wenn der Benutzer, der sie ausführt, nicht der Datenbankeigentümer ist und bereits eine Datenbank mit demselben Dateinamen vorhanden ist.

Leise laufenlassen?

Der Schalter -y suppress_output unterdrückt jegliche Ausgaben.Ähnlich wie beim Ausführen mit -v[erify] nicht angegeben.Es scheint jedoch nur zu bewirken, dass die Ausgabe (gemäß der Schaltereinstellung -v[erify]) in eine Datei mit dem Namen suppress_output geschrieben wird. Dies funktioniert jedoch nur einmal, da der nächste Durchlauf von gbak mit -y suppress_output fehlschlägt, da die Datei suppr_output bereits vorhanden ist.

Es ist möglich, dass dieses Problem in Version 2 für Firebird eingeführt wurde, da sowohl die 2.0- als auch die 2.1-Version tatsächlich den Schalter -y suppress anstelle von -y suppress_output verwenden.Die Verwendung dieser (kürzeren) Option funktioniert wie beabsichtigt und die Ausgabe wird tatsächlich unterdrückt.

gbak-Protokolldatei kann nicht überschrieben werden

Wenn Sie mit dem Schalter -y <Protokolldatei> einen Protokolldateinamen angeben und die Datei bereits vorhanden ist, kann gbak sie nicht überschreiben, obwohl der Firebird-Benutzer die Datei besitzt und über Schreibberechtigungen verfügt.Sie müssen immer den Namen einer Protokolldatei angeben, die nicht vorhanden ist.Auf Linux-Systemen kann Folgendes hilfreich sein:

tux> # Erstelle eindeutige Log-Datei
tux> FILENAME=employee_`date "+%Y%m%d_%H%M%S"`

tux> # Datenbank herunterfahren und sichern
tux> gfix -shut -tran 60 employee
tux> gbak -backup employee /backups/${FILENAME}.fbk -y /logs/${FILENAME}.log -v

Dies ist insofern sehr nützlich, als es Sie daran hindert, frühere Sicherungen zu überschreiben, die möglicherweise erforderlich sind.Der Nachteil ist, dass Sie jetzt ein Reinigungssystem einführen müssen, um alte, unerwünschte Sicherungen zu beseitigen und zu verhindern, dass sich Ihr Sicherungsbereich füllt.

Verwenden von 'stdin' oder 'stdout'-Dateinamen

gbak erkennt die Literalzeichenfolgen 'stdin' und 'stdout' als Quell- oder Zieldateinamen.In POSIX-Systemen ist es bei Verwendung der Standardeingabe- und / oder Standardausgangskanäle nicht zulässig, Suchoperationen auf diesen Kanälen auszuführen.Wenn Sie 'stdin' oder 'stdout' als Dateinamen mit gbak verwenden, wird 'gbak' gezwungen, eine Verarbeitung zu verwenden, die nicht auf den Eingangs- oder Ausgangskanälen sucht, sodass sie für die Verwendung in Pipes geeignet sind — wie in den Beispielen in den Rezepten angegeben Abschnitt oben.

Diese Dateinamen scheinen zwar POSIX-Namen zu sein, sind aber definitiv keine Synonyme für /dev/stdin oder /dev/stdout. Sie sind einfach Literale, nach denen gbak bei der Verarbeitung seiner Parameter sucht.Versuchen Sie nicht, die Namen /dev/stdin oder /dev/stdout in einem Pipeline-Prozess zu verwenden, da dies höchstwahrscheinlich fehlschlagen wird.

Wenn Sie eine Dump-Datei mit dem Namen stdin oder stdout erstellen möchten, sollten Sie den Dateinamen als vollständigen oder relativen Pfadnamen wie ./stdin oder ./stdout angeben, wodurch "gbak" ausgelöst wird Behandeln Sie sie als wörtlichen Dateinamen und nicht als speziellen Dateinamen, der sich von der normalen Verarbeitung während des Dump- oder Wiederherstellungsprozesses unterscheidet.

Dokumentenhistorie

Der genaue Dateiversionsverlauf wird im Firebird-Dokumentations-Git-Repository aufgezeichnet; siehe https://github.com/FirebirdSQL/firebird-documentation

Revisionshistorie

1.0

10. Okt. 2009

ND

Erstellt als Kapitel im Handbuch der Befehlszeilen-Dienstprogramme.

1.1

20. Okt. 2009

ND

Weitere kleinere Updates und konvertiert in ein eigenständiges Handbuch.

1.2

24. Nov. 2009

ND

Der Wiederherstellungsoption -o[ne_at_a_time] wurden weitere Details hinzugefügt, um Transaktionen zu erläutern.

1.3

24. Jun. 2010

ND

Weitere Details zur Wiederherstellungsoption -o[ne_at_a_time], um Transaktionen zu erläutern.

1.4

09. Aug. 2010

ND

Es wird darauf hingewiesen, dass gbak standardmäßig eine Sicherung oder Wiederherstellung gemäß dem ersten angegebenen Dateinamenparameter ausführt.

Einige kleinere Formatierungsfehler, URLs und einige Beispiele wurden korrigiert.

Außerdem wurde ein Beispiel für eine Sicherung und Wiederherstellung nur von Metadaten hinzugefügt.

1.5

31. Mär. 2011

ND

Die Option -z wurde aktualisiert, um anzuzeigen, dass eine Sicherung durchgeführt wird.

1.6

11. Okt. 2011

ND

Aktualisiert, um Änderungen an Firebird 2.5 abzudecken.

Richtige Beschreibung des Schalters -g[arbage_collect].

Viele Rechtschreibfehler wurden korrigiert.

1.7

11. Jan. 2013

ND

Aktualisiert, um die Verwendung der Dateinamen stdin und stdout in Sicherungen und Wiederherstellungen zu dokumentieren, mit denen Sicherungen in Standardeingaben und Standardausgaben geschrieben oder von diesen gelesen werden können.

Es wurde ein Abschnitt über die Verwendung der oben genannten Informationen zum Klonen von Datenbanken hinzugefügt, ohne dass eine Zwischen-Dump-Datei erforderlich ist.Ein zusätzlicher Abschnitt wurde hinzugefügt, um zu zeigen, wie in Verbindung mit SSH Sicherungs- und / oder Wiederherstellungsvorgänge für Datenbanken ausgeführt werden können, bei denen eine oder beide der fraglichen Datenbanken remote sind.

1.8

14. Jan. 2013

ND

Weitere Aktualisierungen zur Dokumentation der Verwendung der Dateinamen stdin und stdout bei Sicherungen und Wiederherstellungen.Gbak Caveats wurde ein Abschnitt hinzugefügt, der detailliertere Informationen zu diesen beiden speziellen Dateinamen enthält.

1.9

11. Apr. 2013

ND

Es wurde ein Abschnitt hinzugefügt, in dem erläutert wird, wie Sie Ihre Backups beschleunigen können.Der Option -service wurde ein Hinweis hinzugefügt, um zu erläutern, dass die Verwendung nicht auf entfernte Datenbanken beschränkt ist.Syntaxfehler in einigen Beispielen korrigiert.

1.10

1. Mai 2013

ND

Leichte Aktualisierung des Befehlszeilenschalters -use_[all_space], um zu erklären, wie es verständlicher funktioniert.

1.11

1. Mai 2013

ND

Eine Korrektur der obigen Änderung am Befehlszeilenschalter -use_[all_space] — dies betrifft alle nachfolgenden Seiten sowie die während der Wiederherstellung erstellten Seiten.

1.12

18. Jun. 2020

MR

Konvertierung in AsciiDoc, geringfügige Bearbeitung von Texten

1.12-de

28. Jul. 2020

MK

Deutsche Übersetzung.

Lizenzhinweis

Der Inhalt dieser Dokumentation unterliegt der "Public Documentation License Version 1.0" (der “License”);die Dokumentation darf nur unter Respektierung dieser Lizenz genutzt werden.Kopien der Lizenz sind verfügbar unter https://www.firebirdsql.org/pdfmanual/pdl.pdf (PDF) und https://www.firebirdsql.org/manual/pdl.html (HTML).

Die Original-Dokumentation trägt den Titel Firebird Backup & Restore Utility.

Der ursprüngliche Autor der Original-Dokumentation ist: Norman Dunbar.

Copyright © 2005-2020.Alle Rechte vorbehalten.Kontakt zum Original-Autor: NormanDunbar at users dot sourceforge dot net.

Mitwirkende: Norman Dunbar; Mark Rotteveel; Martin Köditz - siehe Dokumenthistorie.