![]() |
Datenbank: FB 1.5 • Zugriff über: FIBplus
[FB] restore, wie genau ?
Hi,
ich habe hier mit meinem Programm ein Backup gemacht. Nun will ich das über IBRestore wieder zurückspielen und die eventuell vorhandene Datenbank ersetzen. Momentan verwende ich dazu die Option [Replace]. Da macht die vorhandene DB aber nicht mit. "Can't drop database xy (database might be in use)". Vorher habe ich allerdings Database.Close, Transaction.Commit usw. aufgerufen. Hat einer einen Tip ? |
Re: [FB] restore, wie genau ?
Hi Hansa,
wenn er die vorhandene DB nicht ersetzten kann greift eben noch einer darauf zu: Der Server, wenn noch nicht alle Dinge geschrieben/abgeschlossen sind. Da gibts doch auch ne Einstellung, dass der Server alles direkt schreibt oder nen Cache verwendet. Dann Windows: nur weil der Server alles geschrieben hat muss es Windows noch lange nicht getan haben. Und zum Schluss sind da noch selbst gestrickte Programme wie Service,.... die im hintergrund noch auf die DB zugreifen (das Konsolenprogramm, das an dem DB-File angemeldet ist und minimiert ist ist z.B. auch ein toller Kandidat).... Grüße Lemmy |
Re: [FB] restore, wie genau ?
Delphi hast Du vergessen ! Natürlich läuft der Server noch (als Service). Und mein Programm soll ja das restore machen. Da ist die Datenbank aber geschlossen und auch die Transactions commited. Das merkt man auch schön, wenn nach dem Restore-Versuch darauf zugegriffen werden soll. Da heißt es nämlich "Database is not open". Zur Zeit habe ich 2 Varianten, je nach Einstellung : "DB might be in use" und "DB is not open" (direkt beim restore). :wiejetzt:
|
Re: [FB] restore, wie genau ?
Hi Hansa,
und Deine IBDatabase (oder FIBDatabase oder was auch immer): hast Du die von der DB getrennt? Lemmy |
Re: [FB] restore, wie genau ?
Habe ein Database.Close; probiert, ein connected := false; usw. Muß die DB jetzt offen, oder geschlossen sein ? Das ist vorerst dir Kernfrage. :shock:
|
Re: [FB] restore, wie genau ?
Nein, die IBDatabase darf auf keinen Fall connected sein, sonst greift diese auf die DB zu und damit auf das File!
Lemmy |
Re: [FB] restore, wie genau ?
Frage mich eigentlich ob es bei FB nicht so etwas wie eine serverseitige Zwangstrennung gibt?
// Martin |
Re: [FB] restore, wie genau ?
Muß mal Source liefern. 8) So ungefähr sieht das aus :
Delphi-Quellcode:
Das unwichtige drumrum habe ich weggemacht. Wo ist da ein Fehler ? Momentan kommt der Fehler "Service not attached". Das wird aber wohl an meiner Fummelei im OI liegen. 8) Wie gesagt vorher kam entweder "DB not open" oder "DB is in use".
EingDM.ReadTransaction.Commit;
Transaction.active := false; Database.Close; Database.CloseDataSets; Database.Connected := false; with RestoreService do begin Options := [Replace,UseAllSpace]; // DB-Seiten zu 100 % füllen (Standard 80 %) BufferSize := 3000; PageSize := 4096; ServerName := 'localhost'; LoginPrompt := False; Params.Add('user_name='+User); Params.Add('password='+Password); Active := false; try Verbose := True; BackupFile.Clear; BackupFile.Text := DBgbk; DatabaseName.Text := DBgdb; ServiceStart; finally Active := False; Database.Open; Transaction.StartTransaction; ShowMessage ('Rücksicherung beendet !'); Close; end; EDIT : es kommen schon immer die gleichen Fehler, solange nichts am Quelltext geändert wird ! |
Re: [FB] restore, wie genau ?
Sorry, zu Dein Code kann ich mangels entsprechender Komponenten nichts sagen,
aber ich habe TimeToBackup gefunden, einen OpenSource BackupDienst für Firebird ![]() Vielleicht mal anschauen Grüße // Martin |
Re: [FB] restore, wie genau ?
Hi,
Zitat:
Code:
try Attach; //hier Verbose := True; BackupFile.Clear; BackupFile.Text := DBgbk; DatabaseName.Text := DBgdb; ServiceStart; finally Ich habe hier gerdae keine Möglichkeit das nachzustellen, aber Du musst den Backup und Restore-Service erst mal mit der DB verbinden (Attach), Detach nicht vergessen! hier mal der code aus meinem Tutorial: ![]()
Delphi-Quellcode:
with IBBackupService1 do
begin if Active then Detach; BackupFile.Clear; BackupFile.Add(FilePath+'backup.gbk'); DatabaseName:=FilePath+'db1.gdb'; Attach; Screen.Cursor:=crSQLWait; lblService.Caption:='Service is running'; try ServiceStart; while isServiceRunning do begin Application.ProcessMessages; end; finally Application.ProcessMessages; lblService.Caption:='Service finished'; Detach; Screen.Cursor:=crDefault; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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 by Thomas Breitkreuz