FirebirdSQL logo

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.

docnext count = 7

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.