Announcement

Collapse
No announcement yet.

Problem mit restore

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit restore

    Hallo,

    Zugriffskomponenten : FIBplus.

    ich mache aus einem Programm heraus ein Backup. Nun will ich natürlich davon auch ein retore machen. Der Code sieht momentan so aus :

    with RestoreService do begin
    ReadTransaction.Commit;
    ReadTransaction.active := false;
    Database.Close;
    Database.CloseDataSets;
    Database.Connected := false;
    Options := [UseAllSpace]; // DB-Seiten zu 100 % füllen (Standard 80 %)
    if ckbReplace.Checked then begin
    Options := Options + [Replace];
    CopyFile (PChar (DBgdb),PChar (DBgdbBAK),false);
    end; // noch eigene Sicherung zusätzlich anlegen
    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;
    EingDM.Database.Open;
    EingDM.ReadTransaction.StartTransaction;
    ShowMessage ('Rücksicherung beendet !');
    // Detach;
    Close;
    end;
    end;
    end;

    In verschiedenen Konstellationen kommt nun entweder : "DB is not open" oder "DB might be in use" Deshalb stellt sich erstens die Frage was jetzt sein muß : DB geöffnet oder nicht ? Ich gehe eher von letzterem aus. Sieht vielleicht jemand einen Fehler ?

  • #2
    Hallo Hans-Jörg,<p>
    ich rate dringends davon ab, das Restore in die Originaldatenbank zu machen !!
    Mache das Restore entweder in ein eigenes Verzeichnis oder nimm einen anderen Dateinamen.
    <p>
    Heiko
    <p>
    PS1: Das "Bei einer Interbase/Firebird-Datenbank sollte regelmäßig ein Backup/Restore gemacht werden, heisst nicht, dass das Restore im laufenden Betrieb passieren muss". Ich habe mir hierfür übrigens ein Script gebastelt, dass gbak -b / -c benutzt.
    Der Admin muss dann dafür sorgen , dass beim Überschreiben der Restore-Datei keiner in der Datenbank ist (z.B. durch umbenennen der gdb).
    <p>
    PS2: Mein Programm erlaubt auch ein Backup (im laufenden Betrieb). Das ist auch OK als manuelles Backup.
    Zusätzlich lasse ich über "geplante Vorgänge" aber auch obiges Script laufen, so dass ich immer eine aktuelle gdb, eine gbk und eine restore-Datei habe

    Comment


    • #3
      Ich mache es etwas anders, siehe hier :

      CopyFile (PChar (DBgdb),PChar (DBgdbBAK),false);

      D.h. die DB wird vor dem restore nochmals im Ursprungszustand kopiert. Erst DANACH wird das restore durchgeführt, was aber wie gesagt nicht geht. Nur warum geht das nicht

      Comment

      Working...
      X