Резервное копирование базы данных и последующее восстановление
Волох Д.А.
Компания НеРуСофт
Резервное копирование и восстановление из копии является одним из самых важных процессов в администрировании базы данных 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