Главная страница
    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.46 MB
Время: 0.103 c
3-1126436644
alsov
2005-09-11 15:04
2005.10.23
Копирование данных из вьюхи в оракле в таблицу в Access


14-1128430953
oldman
2005-10-04 17:02
2005.10.23
Весьма запоздалое поздравление :(


14-1128496222
vidiv
2005-10-05 11:10
2005.10.23
Новый админ на сайте


2-1128155954
Николай1
2005-10-01 12:39
2005.10.23
TreeView


14-1128055512
CHES
2005-09-30 08:45
2005.10.23
Примеры "нестандартных" решений.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский