The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Резервное копирование Interbase (Firebird) и последующее восстановление. (database interbase firebird backup)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: database, interbase, firebird, backup,  (найти похожие документы)
From: Волох Д.А. <support@nerusoft.com.> Newsgroups: email Date: Mon, 20 Sep 2005 14:31:37 +0000 (UTC) Subject: Резервное копирование Interbase (Firebird) и последующее восстановление. Оригинал: http://nerusoft.com/modules.php?name=Content&pa=showpage&pid=143 Автор: Волох Д.А. <volokh@nerusoft.com.> Компания НеРуСофт (http://nerusoft.com) Резервное копирование и восстановление из копии является одним из самых важных процессов в администрировании базы данных 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 восстановление базы данных в уже существующий файл; -С восстановление базы данных в новый файл, если файл уже существует, то процесс будет прерван с ошибкой; -p размер страницы (1024,2048,4196 или 8192). По умолчанию 1024; Пример: gbak -R -user SYSDBA -password masterkey C:workwork.gbk C:workwork.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; Результат восстановления представлен на следующем рисунке:

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру