AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [FB] restore, wie genau ?
Thema durchsuchen
Ansicht
Themen-Optionen

[FB] restore, wie genau ?

Ein Thema von Hansa · begonnen am 7. Aug 2005 · letzter Beitrag vom 9. Aug 2005
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

[FB] restore, wie genau ?

  Alt 7. Aug 2005, 19:35
Datenbank: FB 1.5 • Zugriff über: FIBplus
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: [FB] restore, wie genau ?

  Alt 8. Aug 2005, 06:50
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: [FB] restore, wie genau ?

  Alt 8. Aug 2005, 12:13
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).
Gruß
Hansa
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: [FB] restore, wie genau ?

  Alt 8. Aug 2005, 13:41
Hi Hansa,

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

Lemmy
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: [FB] restore, wie genau ?

  Alt 8. Aug 2005, 16:52
Habe ein Database.Close; probiert, ein connected := false; usw. Muß die DB jetzt offen, oder geschlossen sein ? Das ist vorerst dir Kernfrage.
Gruß
Hansa
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: [FB] restore, wie genau ?

  Alt 8. Aug 2005, 19:00
Nein, die IBDatabase darf auf keinen Fall connected sein, sonst greift diese auf die DB zu und damit auf das File!

Lemmy
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#7

Re: [FB] restore, wie genau ?

  Alt 8. Aug 2005, 19:14
Frage mich eigentlich ob es bei FB nicht so etwas wie eine serverseitige Zwangstrennung gibt?

// Martin
Martin Schaefer
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: [FB] restore, wie genau ?

  Alt 8. Aug 2005, 21:37
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 !
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#9

Re: [FB] restore, wie genau ?

  Alt 8. Aug 2005, 22:04
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
Martin Schaefer
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: [FB] restore, wie genau ?

  Alt 9. Aug 2005, 07:00
Hi,


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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 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