FirebirdSQL logo

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

docnext count = 13

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.