Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

Проблемы с программным 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
14-1126334696
AlterEgo of WondeRu
2005-09-10 10:44
2005.10.23
Завтра прыгаю с парашютом...


2-1127678744
Pasha L
2005-09-26 00:05
2005.10.23
Ошибка при createprocess


1-1127972188
SiJack
2005-09-29 09:36
2005.10.23
Проблемы с обменом RS232


14-1128408994
Jolik
2005-10-04 10:56
2005.10.23
Сорри за оффтоп: чем MD4 лучше crc32?


6-1120318987
GEEK
2005-07-02 19:43
2005.10.23
WebServer application: работа с базами данных





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский