Архивиране и последващо възстановяване на InterBase база данни
Сайт на Delphi: ежедневни Delphi-новини, документация, статии, преглед, интервю, компютърен хумор.
Причините може да са следните: базата данни има ограничения като NOT NULL полета, външни ключове, уникалност и съществуващите данни в базата данни не отговарят на тези ограничения по някаква причина. Такива данни могат да съществуват мирно, стига да не участват в операции за редактиране или изтриване. По време на процеса на възстановяване всички данни се "сондират" - първо се създават ограничения и след това данните се качват, в този момент възниква грешка. За превенция трябва да възстановите базата данни до тестовата база данни и само след успешно завършване на процеса на възстановяване, направете Възстановяване до текущата база данни. Ако възникне ситуация с повреден архивен файл, трябва да намерите несъответствия в базата данни и да ги коригирате.
Нека разгледаме два начина за архивиране/възстановяване на база данни с помощта на помощната програма gbak и компонентите FIBPlus:
1.Помощната програма gbak със съответните ключовеви позволява да архивирате и възстановявате базата данни, синтаксисът за извършване на операции е както следва:
-
Резервация
gbak [-B] [превключва] файл_база данни архивен_файл
Ключова стойност: -g не събира боклук по време на архивиране; -l игнориране на транзакциите на limbo; -m само резервни метаданни; - потребителско име на потребител; -парола потребителска парола; -v показва регистриране по време на изпълнение на процеса; -z показва версия на gbak.
gbak -b --user SYSDBA --парола masterkey C:\workwork.gdb C:\workwork.gbk
gbak [-R/-C] [превключва] файл_база данни архивен_файл
Ключова стойност: -R възстановяване на базата данни до съществуващ файл. Използвайтетози ключ не се препоръчва, защото възможно е да се повреди работеща база данни и тя ще бъде несъвместима с Firebird 2.0; -При възстановяване на базата данни в нов файл, ако файлът вече съществува, процесът ще бъде прекъснат с грешка; -p размер на страницата (1024,2048,4196 или 8192). Ако ключът не е посочен, тогава базата данни се създава с размера на страницата, който е записан в архива.
gbak -c --user SYSDBA --password masterkey C:\workwork.gbk C:\workwork_new.gdb
Едно нещо, което трябва да отбележите е, че ако стартирате помощната програма gbak без превключвателя -B или -R / -C, процесът на архивиране на базата данни ще започне.
2.С помощта на компонентите FIBPlusможете също програмно да стартирате процеси за архивиране и възстановяване на база данни.
За архивиране на базата данни е използван компонентът TpFIBBackupService, за да стартирате процеса, трябва да попълните определени полета в компонента: fibBackUp.DatabaseName := edBackUpPath.Text; // посочете пътя до базата данни fibBackUp.ServerName := 'localhost'; //име на сървър // създайте и укажете името на бъдещия архивен файл на база данни fibBackUp.BackupFile.Add(frmMain.CurrentBackUpPath + ExtractFileName(edBackUpPath.Text) + '_' + DateToStr(now) + '.gbk'); fibBackUp.Params.Add('user_name=SYSDBA'); fibBackUp.Params.Add('password=masterkey');
Резултатът от архивирането ще се покаже в полето Memo:
Следната фигура показва формата, с която можете да възстановите базата данни:
За процеса на възстановяване е използван компонентът TpFIBRestoreService, списъкът показва някои от настройките, които трябва да бъдат зададени преди стартиране на процеса на възстановяване.
//възстановява базата данни в новопосочения файл ако chNewDB.Checked тогава fibRestore.Options :=[Създаване на нова база данни]; //замени базата данни при възстановяване ако chReplace.Checked тогава fibRestore.Options := [Replace]; fibRestore.BackupFile.Add(edPathGBK.Text); //посочете GBK файл fibRestore.DatabaseName.Add(edDirGDB.Text); //посочете файла на базата данни fibRestore.PageSize := StrToInt(cxComboBox1.Text); //размер на страницата fibRestore.ServerName := 'localhost'; fibRestore.Params.Add('user_name=SYSDBA'); fibRestore.Params.Add('password=masterkey'); опитайте Screen.Cursor := crSQLWait; fibRestore.Active := True; fibRestore.ServiceStart; mRestore.Lines.Add('******************** Процесът на възстановяване стартира: ' + edPathGBK.Text + '********************'); mRestore.Lines.Add(''); докато не (fibRestore.Eof) направете mRestore.Lines.Add(fibRestore.GetNextLine); mRestore.Lines.Add(''); mRestore.Lines.Add('******************** Възстановяването е завършено ****************'); fibRestore.Active := false; Screen.Cursor := crDefault; с изключение на MessageDlg('Грешка при възстановяване на база данни',mtError,[mbOk],0); край;
Резултатът от възстановяването е показан на следната фигура: