![]() |
Datenbank: Firebird • Version: 2.5.1 • Zugriff über: UniDAC
Firebird - DB Restore
Hallo,
nach dem Datenbank Backup komme ich jetzt beim ![]() Sichere ich den Befehl als .bat, schließe das Programm und führe die .bat aus, dann wird die Datenbank wiederhergestellt.
Delphi-Quellcode:
Versuche ich das zur Laufzeit, Datenmodul trennen, Aufruf per ShellExecute dann erhalte ich die Fehlermeldung:
var
BackupFile, DatabaseFile, Parameter : String; sl : TStringList; begin // ... BackupFile := '"' + OpenDialog.FileName + '"'; if Datenmodul.UniConnection.Server <> '' then DatabaseFile := '"' + Datenmodul.UniConnection.Server + ':' + Datenmodul.UniConnection.Database + '"' else DatabaseFile := '"' + Datenmodul.UniConnection.Database + '"'; Parameter := '"' + ExtractFilePath(ParamStr(0)) + 'gbak.exe" -rep -v -user sysdba -password masterkey '+ BackupFile +' '+ DatabaseFile; sl := TStringList.Create; try sl.Add(Parameter); sl.SaveToFile(BackupDirectory + 'restore.bat'); finally sl.Free; end; gbak: opened file BackupFile gbak: ERROR:could not drop database DatabaseFile <database might be in use> gbak: Exiting before completion due to errors
Delphi-Quellcode:
Kann ich die Datenbank zur Laufzeit überhaupt wiederherstellen?
Datenmodul.UniConnection.Connected := false; // oder Datenmodul.UniConnection.Disconnect;
Parameter := '-rep -v -user sysdba -password masterkey '+ BackupFile +' '+ DatabaseFile; ShellExecute(0,nil,PChar(ExtractFilePath(ParamStr(0)) + 'gbak.exe'),PChar(Parameter),nil,SW_SHOW); |
AW: Firebird - DB Restore
Du kannst die Datenbank dann zur Laufzeit wieder herstellen, wenn wirklich niemand mehr auf die Datenbank zugreift.
Du schließt sicher irgendwo eine Verbindung nicht richtig. Oder Du hast noch was offen (2. Client, evtl. von remote, IBExpert, etc...). |
AW: Firebird - DB Restore
Delphi-Quellcode:
habe nochmal eine Abfrage vorgepackt, der Code wird ausgeführt mit der obigen Fehlermeldung.
if not Datenmodul.UniConnection.Connected then
begin Parameter := '-rep -v -user sysdba -password masterkey '+ BackupFile +' '+ DatabaseFile; ShellExecute(0,nil,PChar(FormMain.ExeProgramDirectory + 'gbak.exe'),PChar(Parameter),nil,SW_SHOW); end; Ein anderes Programm greift nicht auf die DB zu, andernfalls müsste der Fehler doch auch bei der .bat auftreten. |
AW: Firebird - DB Restore
Und wenn Du UniConnection vorher komplett freigibst?
|
AW: Firebird - DB Restore
Hallo,
sinnvoller als -rep ist es die aktuelle DB umzubenennen und die Datenbank wiederherzustellen (wie gesagt ohne -rep). Wegen dem Code: Mach mal vor dein Shellexecute oder nach deinem DB.Disconnect ein Application.Processmessage Grüße |
AW: Firebird - DB Restore
Zitat:
:thumb: |
AW: Firebird - DB Restore
Ich würde niemals eine vorhandene Datenbank mit -rep überschreiben. Wenn z.B. das Backup defekt ist oder sonst irgend etwas beim Restore passiert, steht man schnell ohne Datenbank da.
lg, Thomas |
AW: Firebird - DB Restore
Zitat:
|
AW: Firebird - DB Restore
Guten Morgen,
Variante 1: Kurze Downtime: Backup mit einem anderen DBNamen wieder herstellen, anschließend ggf. testen. Alte DB abhängen, umbenennen und dann die neue DB umbenennen und diese aktivieren Variante 2: längere Downtime: alte DB abhängen, umbenennen und dann Backup mit dem DBNamen wieder herstellen und ggf. testen und aktivieren. Grüße |
AW: Firebird - DB Restore
ich nehme Tor 1 (hätte man mit nachdenken ja auch selber drauf kommen können...)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz