(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Резервное копирование и последующее восстановление базы данных InterBase/FireBird

Источник: delphiplus
Волох Д.А.

Резервное копирование и восстановление из копии является одним из самых важных процессов в администрировании базы данных InterBase/FireBird.

Резервное копирование - один из самых надежных способов сохранить и предохранить свои данные от потери или порчи. Процесс резервного копирования также делается в профилактических целях, для увеличения производительности базы данных - это достигается за счет того, что в момент копирования происходит считывание последних версий всех записей, старые же версии в копию никогда не попадают. Здесь важно заметить, что недостаточно одного лишь резеврного копирования, нужно иногда проверять восстанавливаемость базы данных из резеверной копии, потому что бывают случаи, что база данных работает в режиме 24*7, то есть 24 часа в сутки и 7 дней в неделю, backup базы данных может происходит нормально, но в силу определенных причин база данных не восстанавливается, последствия могут быть плачевными для всех данных.

Причины могут следующими: в базе данных есть ограничения, такие как NOT NULL поля, внешние ключи, уникальность, а существующие данные в базе данных этим ограничениям не соответствуют по каким-либо причинам. Такие данные могут мирно существовать до тех пор, пока они не будут задействованы в операциях редактирования или удаления. В процессе восстановления "прощупываются" все данные - в первую очередь создаются ограничения и затем заливаются данные, в этот момент и происходит ошибка. Для профилактики следует восстанавливать базу данных в тестовую, и лишь при успешном завершении процесса восстановления, делать Restore в текущую базу. В случае возникновения ситуации с поврежденным файлом backup"а следует найти в базе данных несоответствия и исправить их.

Рассмотрим два способа резервирования/восстановления базы данных с помощью утилиты gbak и компонентов FIBPlus:

1. Утилита gbak с соответствующими ключами позволяет совершать резервирование и восстановление базы данных, синтаксис выполнения операций следующий:

  • Резервирование

          gbak [-B] [ключи] файл_базы_данных файл_резервной_копии Значение ключей:
    -g не собирать мусор во время резервного копирования;
    -l игнорировать лимбо-транзакции;
    -m резервирование только метаданных;
    -user имя пользователя;
    -password пароль пользователя;
    -v показать протоколирование во время выполнения процесса;
    -z показать версию gbak.

    Пример:

          gbak -b -user SYSDBA -password masterkey C:\workwork.gdb C:\workwork.gbk

  • Восстановление:

          gbak [-R/-С] [ключи] файл_базы_данных файл_резервной_копии

    Значение ключей:
    -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');

fibBackUp.Active := True; // активируем процесс
try
    Screen.Cursor := crSQLWait;
    fibBackUp.ServiceStart; // и стартуем его
    mBackup.Lines.Add('**************** Резервное копирование начато базы: ' +
    dBackUpPath.Text + '****************' );
    mBackup.Lines.Add(' );
    {пока не завершится процесс выводим логии о процессе, для того чтобы логии отображались нужно свойство Verbose поставить в значение TRUE}
    while not (fibBackUp.Eof) do
        begin
            mBackup.Lines.Add(fibBackUp.GetNextLine);
        end;
    mBackup.Lines.Add('*************** Резервное копирование закончено ***************');
    fibBackUp.Active := false; //закрываем процесс
    Screen.Cursor := crDefault;
    except
        MessageDlg('Ошибка при резервном копировании базы данных', mtError,[mbOk],0);
    end;

Результат бекапа будет выведен в Memo-поле:

На следующем рисунке представлена форма с помощью, которой можно осуществит восстановление базы данных:

Для процесса restore использовался компонент TpFIBRestoreService, в листинге показаны часть настроек, которые необходимо установить перед запуском процесса восстановления.

//восстанавливаем базу данных в новый указанный файл
if chNewDB.Checked then
    fibRestore.Options := [CreateNewDB];
//перезаписываем базу данный при restore
if chReplace.Checked then     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');
try
    Screen.Cursor := crSQLWait;
    fibRestore.Active := True;
    fibRestore.ServiceStart;
    mRestore.Lines.Add('**************** Начат процесс восстановления: ' +
        edPathGBK.Text + '****************');
    mRestore.Lines.Add('');
    while not (fibRestore.Eof) do
        mRestore.Lines.Add(fibRestore.GetNextLine);
    mRestore.Lines.Add('');
    mRestore.Lines.Add('**************** Восстановление закончено ****************');
    fibRestore.Active := false;
    Screen.Cursor := crDefault;
except
    MessageDlg('Ошибка при восстановление базы данных',mtError,[mbOk],0);
end;

Результат восстановления представлен на следующем рисунке:

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 15.06.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Delphi Professional Named User
Enterprise Connectors (1 Year term)
TeeGrid VCL/FMX Source Code single license
Microsoft 365 Business Standard (corporate)
Allround Automation PL/SQL Developer - Annual Service Contract - Single user
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Новые материалы
Новые программы для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100