Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Backup von Firebird Embedded (https://www.delphipraxis.net/153656-backup-von-firebird-embedded.html)

Opa Knack 11. Aug 2010 13:31

Datenbank: Firebird • Version: 1.5 Embedded • Zugriff über: Zeos

Backup von Firebird Embedded
 
Hallo,

ich verwende Firebird in der Embedded-Version und greife mit Zeos 6.5 darauf zu. Um die Datenbank sichern zu können, verwende ich folgendes:

[DP]
dbverbindung.Disconnect;

ShellExecute(0,
'open',
'c:\gbak.exe',
'-v -t -user SYSBDA -password masterkey c:\db.fdb c:\sicherung.fbk',
nil,
SW_SHOW);
[/DP]

Wenn ich den Code direkt auf der DOS-Ebene eingebe, funktioniert alles wie gewünscht, vom Programm aus leider nicht. Es öffnet sich kurz ein DOS-Fenster, verschwindet nach einem Sekundenbruchteil, und das war's.

Mein Gedankengang war nun, dass der Disconnect zur DB vielleicht ein wenig Zeit braucht. Also habe ich eine kleine Pause eingebaut, was mich aber auch nicht weitergebracht hat.

Wie macht ihr das? Hatte evtl. jemand einen Tipp, vielleicht auch unabhängig von gbak.exe (wobei ich in den letzten Stunden auf meiner Suche nach passenden Threads gelesen habe, dass dies wohl die praktischste Variante wäre)?

Danke und Gruß
Opa

Lemmy 11. Aug 2010 13:46

AW: Backup von Firebird Embedded
 
Hi,

hast Du schon mal ein Application.ProcessMessages nach dem Disconnect gemacht? Und bist Du dir absolut sicher, dass sonst keine Verbindung zur DB offen ist?

[Update]
ich verwende IBO und mache da im Grunde das selbe, bei mir funktioniert das aber.... Ach ja: Die Dateinamen passen? Schon mal daran gedacht mit -Y Logfile.txt ein Logfile mit zu schreiben? Vielleicht kommen da etwas mehr INfos...

blackfin 11. Aug 2010 13:52

AW: Backup von Firebird Embedded
 
Beim embedded brauchst du gbak nicht unbedingt, kopiere doch einfach die fdb-Datei? :)

Zum überprüfen, ob eine Datei in Verwendung ist, setze ich folgenden Code ein:

Delphi-Quellcode:
// Is a file currently in usage?
function IsFileInUse(fName : string) : boolean;
var
    HFileRes : HFILE;
begin
    Result := false;
    if not FileExists(fName) then exit;
    HFileRes :=
      CreateFile(pchar(fName),
                 GENERIC_READ or GENERIC_WRITE,
                 0, nil, OPEN_EXISTING,
                 FILE_ATTRIBUTE_NORMAL,
                 0) ;
    Result := (HFileRes = INVALID_HANDLE_VALUE) ;
    if (not Result) then CloseHandle(HFileRes)
end;
das kannst du ja ggf. in einer Schleife / Timer etc. prüfen, sobald die Funktion false ausgibt, kannst du kopieren.

DeddyH 11. Aug 2010 13:56

AW: Backup von Firebird Embedded
 
AFAIK komprimiert gbak aber auch. Muss es denn unbedingt ZEOS sein? Einen Blick wert ist IMO das kostenlose UIB, da gibt es für Backup/Restore auch passende Komponenten.

Opa Knack 11. Aug 2010 14:02

AW: Backup von Firebird Embedded
 
Hallo,

Danke euch dreien.

@Lemmy:
Application.ProcessMessages habe ich schon versucht (leider auch ohne Erfolg). Kann die Embedded nicht nur eine einzelne Verbindung haben?

@blackfin:
Ich habe gelesen, dass das reine Kopieren zu Problemen führen könnte. Dazu kommt, dass es theoretisch vorkommen könnte, dass die Embedded irgendwann mal durch den Server ersetzt wird. Dann würde ich natürlich gerne bereits eine praktikable und "aufwärtskompatible" Backuplösung haben.

@DeddyH
UIB habe ich mir auch schon angeschaut. Ich habe mich letztlich für ZEOS entschieden, da ich damit die Möglichkeit habe, relativ unkompliziert auch auf MySQL zuzugreifen (was zwar momentan noch kein Thema ist, aber es könnte sein, dass diese Anforderung noch kommt)

DeddyH 11. Aug 2010 14:17

AW: Backup von Firebird Embedded
 
Zitat:

Zitat von OpaKnack
Kann die Embedded nicht nur eine einzelne Verbindung haben?

Momentan ja, das soll sich aber wohl dem Hörensagen nach in der 2.5 ändern. Von daher ist der Hinweis nicht unberechtigt.

mkinzler 11. Aug 2010 14:29

AW: Backup von Firebird Embedded
 
Ja das ändet sich, da die embedded seit 2.5 auf der neuen SuperClassic-Architektur anstatt auf der SuperServer-Architektur basiert

Opa Knack 12. Aug 2010 10:28

AW: Backup von Firebird Embedded
 
Hallo,

da die 2.5 erst als RC vorgestellt wurde und ich somit noch die 1.5 verwende, habe ich natürlich nur eine Verbindung offen, die ich vom Programm aus wie oben beschrieben trenne.

Hat noch jemand Ideen?

Danke und Gruß
Opa

DeddyH 12. Aug 2010 10:34

AW: Backup von Firebird Embedded
 
Um nochmal auf den Ausgangspost zurückzukommen: funktioniert der Befehl auch, wenn Du ihn nicht über die Kommandozeile, sondern über "Start - Ausführen" (WIN - R) absetzt?

FBrust 12. Aug 2010 10:41

AW: Backup von Firebird Embedded
 
Hallo,

vielleicht könntest Du zu Testzwecken den Befehl in eine .bat-Datei schreiben, gefolgt von dem Befehl "pause", der verhindert, dass sich das Fenster sofort wieder schließt und dann in Deinem Programm die Batchdatei aufrufen.

Dann siehst Du immerhin die Ausgabe von GBAK.


Gruß
Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz