Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.23;
Скачать: CL | DM;

Вниз

Проблемы с программным backup/restore Firebird   Найти похожие ветки 

 
Андрей Жук ©   (2005-09-12 12:02) [0]

Используются IBX. Но бэкап/рестор в FIB аналогичен.

Процедура создания бэкапа
procedure TFormMain.DoBackup(FileName: TFileName; AlertOnExit: boolean = true);
var
 USER_NAME, PASSWORD: string;
begin
 USER_NAME := DataModuleMain.DBMain.Params.Values["user_name"];
 PASSWORD := DataModuleMain.DBMain.Params.Values["password"];
 with DataModuleMain.IBBackup do
 begin
   DatabaseName := DataModuleMain.DBMain.DatabaseName;
   Params.Clear;
   Params.Add("user_name=" + USER_NAME);
   Params.Add("password=" + PASSWORD);
   BackupFile.Clear;
   BackupFile.Add(FileName);
   Attach;
   ServiceStart;
   Detach;
   if AlertOnExit then
     InformationMsg("Базу збережено", "Файл збережено в " + FileName);
 end;
end;


Процедура восстановления базы
function TFormMain.DoRestore(FileName: TFileName; DBName: string; ReplaceCurrent: boolean; AlertOnExit: boolean = true): string;
var
 USER_NAME, PASSWORD: string;
begin
 USER_NAME := DataModuleMain.DBMain.Params.Values["user_name"];
 PASSWORD := DataModuleMain.DBMain.Params.Values["password"];
 with DataModuleMain.IBRestore do
 begin
   if ReplaceCurrent then
   begin
     DataModuleMain.DBMain.Connected := false;
     Options := Options + [Replace] - [CreateNewDB];
   end
   else
     Options := Options - [Replace] + [CreateNewDB];
   DatabaseName.Clear;
   DatabaseName.Add(DBName + "=2048");
   Params.Clear;
   Params.Add("user_name=" + USER_NAME);
   Params.Add("password=" + PASSWORD);

   BackupFile.Clear;
   BackupFile.Add(FileName);
   Attach;
   ServiceStart;
   while not Eof do
   begin
     Logging("Information", GetNextLine);
     Next;
   end;
   Detach;
   Result := DBName;
   if AlertOnExit then
     InformationMsg("Базу відновлено", "Файл збережено в " + DBName);
   if ReplaceCurrent then
     DataModuleMain.DBMain.Connected := true;
 end;
end;


Вызов в программе (сначала backup, потом restore - делаем новую базу для записи на флешку)

procedure TFormMain.ToolButtonRestoreFlashClick(Sender: TObject);
var
 FName, FRName: TFileName;
 TempPath, SavePointName: string;
 R: Cardinal;
 procedure MakeChanges(str: string);
 begin
   with DataModuleMain.IBSQL do
   begin
     SQL.Clear;
     SQL.Add(str);
     ExecQuery;
     Transaction.Commit;
     Transaction.Active := true;
   end;
 end;
begin
 R := GetTempPath(0, nil);
 SetLength(TempPath, R);
 GetTempPath(R, PChar(TempPath));
 FName := ExtractFilePath(TempPath) + FormatDateTime("ddmmhhnn", now) + ".fbk";
 FRName := ExtractFilePath(TempPath) + FormatDateTime("ddmmhhnn", now) + ".fdb";
 if InputQuery("Введіть назву точки збереження", "Savepoint", SavePointName) then
 begin
   MakeChanges(Format("EXECUTE  PROCEDURE APP_SAVEPOINTS_IU (""%s"",""Y"")", [SavePointName]));
   MakeChanges("SELECT gen_id(GEN_FILIAL_COUNTER,1) from rdb$database");
   DoBackup(FName, false);
   MakeChanges(Format("UPDATE APP_SAVEPOINTS SET IS_ACTIVE=""N"" WHERE SAVEPOINT_NAME=""%s""", [SavePointName]));
 end;

 if FileExists(FName) then
   DoRestore(FName, FRName, false, false);
end;


И вот на восстановлении получаем
cannot open backup file C:\DOCUME~1\zhouck\LOCALS~1\Temp\12091056.fbk.
Хотя такой файл есть. Вероятно, файл еще занят процедурой создания бэкапа.
Что порекомендуете сделать?


 
Андрей Жук ©   (2005-09-12 12:07) [1]

Да, еще.
Если в процедуру создания бэкапа добавить

  begin
    Logging("Information", GetNextLine);
    Next;
  end


То иногда (непостоянно)получаю ошибку "обрыв связи" (это на локальном коннекте).


 
Андрей Жук ©   (2005-09-12 12:11) [2]

Странно...
Поставил Application.ProcessMessages; в цикл получения инфы о бэкапе/ресторе - ошибки (пока) исчезли...


 
Desdechado ©   (2005-09-12 12:25) [3]

НЕ используй локальный коннект
он глюкавый



Страницы: 1 вся ветка

Текущий архив: 2005.10.23;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 1.295 c
14-1128013321
Kolan
2005-09-29 21:02
2005.10.23
Кто смотрел 9 роту.


8-1117526386
MrAndrey_ka
2005-05-31 11:59
2005.10.23
Прозрачность части формы


3-1126685588
Term
2005-09-14 12:13
2005.10.23
Сообщение об ошибке при создании ХП


1-1127972252
Rentgen
2005-09-29 09:37
2005.10.23
DecToHexToStr ???


1-1128084197
Иванов__
2005-09-30 16:43
2005.10.23
Как поместить в буфер обмена текст