|
Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Резервное копирование базы данных и последующее восстановлениеРезервное копирование и восстановление из копии является одним из самых важных процессов в администрировании базы данных InterBase/FireBird. Резервное копирование - один из самых надежных способов сохранить и предохранить свои данные от потери или порчи. Процесс резервного копирования также делается в профилактических целях, для увеличения производительности базы данных - это достигается за счет того, что в момент копирования происходит считывание последних версий всех записей, старые же версии в копию никогда не попадают. Здесь важно заметить, что недостаточно одного лишь резеврного копирования, нужно иногда проверять восстанавливаемость базы данных из резеверной копии, потому что бывают случаи, что база данных работает в режиме 24*7, то есть 24 часа в сутки и 7 дней в неделю, backup базы данных может происходит нормально, но в силу определенных причин база данных не восстанавливается, последствия могут быть плачевными для всех данных. Причины могут следующими: в базе данных есть ограничения, такие как NOT NULL поля, внешние ключи, уникальность, а существующие данные в базе данных этим ограничениям не соответствуют по каким-либо причинам. Такие данные могут мирно существовать до тех пор, пока они не будут задействованы в операциях редактирования или удаления. В процессе восстановления <прощупываются> все данные - в первую очередь создаются ограничения и затем заливаются данные, в этот момент и происходит ошибка. Для профилактики следует восстанавливать базу данных в тестовую, и лишь при успешном завершении процесса восстановления, делать Restore в текущую базу. В случае возникновения ситуации с поврежденным файлом backup'а следует найти в базе данных несоответствия и исправить их. Рассмотрим два способа резервирования/восстановления базы данных с помощью утилиты gbak и компонентов FIBPlus: 1. Утилита gbak с соответствующими ключами позволяет совершать резервирование и восстановление базы данных, синтаксис выполнения операций следующий: Резервированиеgbak [-B] [ключи] файл_базы_данных файл_резервной_копии Значение ключей:
Пример: gbak -b -user SYSDBA -password masterkey C:workwork.gdb C:workwork.gbk Восстановление:gbak [-R/-С] [ключи] файл_базы_данных файл_резервной_копии Ключи:
Пример: 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;
Результат восстановления представлен на следующем рисунке: ![]() |
Форум Программиста
Новости
Обзоры
Магазин Программиста
Каталог ссылок
Поиск
Добавить файл
Обратная связь |