Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [FB] restore, wie genau ? (https://www.delphipraxis.net/51174-%5Bfb%5D-restore-wie-genau.html)

Hansa 7. Aug 2005 19:35

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 ?

Lemmy 8. Aug 2005 06:50

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

Hansa 8. Aug 2005 12:13

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:

Lemmy 8. Aug 2005 13:41

Re: [FB] restore, wie genau ?
 
Hi Hansa,

und Deine IBDatabase (oder FIBDatabase oder was auch immer): hast Du die von der DB getrennt?

Lemmy

Hansa 8. Aug 2005 16:52

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:

Lemmy 8. Aug 2005 19:00

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

mschaefer 8. Aug 2005 19:14

Re: [FB] restore, wie genau ?
 
Frage mich eigentlich ob es bei FB nicht so etwas wie eine serverseitige Zwangstrennung gibt?

// Martin

Hansa 8. Aug 2005 21:37

Re: [FB] restore, wie genau ?
 
Muß mal Source liefern. 8) So ungefähr sieht das aus :

Delphi-Quellcode:
  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;
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".

EDIT : es kommen schon immer die gleichen Fehler, solange nichts am Quelltext geändert wird !

mschaefer 8. Aug 2005 22:04

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

TimetoBackup for Firebird
Vielleicht mal anschauen


Grüße // Martin

Lemmy 9. Aug 2005 07:00

Re: [FB] restore, wie genau ?
 
Hi,


Zitat:

Zitat von Hansa
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".

In dem Fall solltest Du mal ein Attach versuchen:

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: http://www.delphi-tutorials.de/Tutor...2_tutorial.zip

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 08:05 Uhr.

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