Шрифт:
Интервал:
Закладка:
Регулярное резервное копирование является основной для поддержания базы данных в хорошем состоянии, обеспечения целостности данных, безопасности и возможности избежать неприятностей. Утилита командной строки резервного копирования и восстановления данных в Firebird gbak создает и восстанавливает резервные копии ваших баз данных. Она создает независимый от платформы архив фиксированного снимка базы данных, который может быть записан в дисковый файл, и он при желании может быть сжат посредством утилит сторонних разработчиков.
Резервная копия Firebird является "горячей" копией - нормальная работа с базой данных может продолжаться в то время, как gbak анализирует метаданные и записывает файл копии. Операция выполняется в транзакции SNAPSHOT, захватывающей состояние базы данных, которое она имела на момент старта транзакции. Изменения данных, которые клиенты подтверждают в базе данных после начала резервного копирования, не записываются в файл копии.
! ! !
ВНИМАНИЕ! Операционные системы обычно включают средства для архивирования файлов баз данных. Не полагайтесь на копии ваших баз данных Firebird, выполненные такими утилитами или утилитами файловой системы, или утилитами сжатия данных, такими как gzip или WinZip, если работа базы данных полностью не завершена. Подобные копии баз данных не являются "гигиеничными" - неубранный мусор будет восстановлен вместе с другими данными файла. Поскольку эти утилиты обычно используют низкоуровневые блокировки диска, их использование приводит к разрушению базы данных, если при их выполнении сохраняются живые соединения с базой данных.
. ! .
Файлы gbak
Утилита gbak анализирует и разбивает на части файлы Firebird, сохраняя отдельно метаданные и данные в компактном формате. Копия, сделанная gbak, не является файлом базы данных и не будет распознаваться сервером. Чтобы стать используемой, она должна быть восстановлена в формат Firebird, который будет читаем сервером с учетом версии gbak, соответствующей версии выполняемого сервера Firebird.
При восстановлении файлов копии в формат базы данных gbak выполняет проверку метаданных и данных перед внутренним использованием языка запросов для воссоздания базы данных и наполнения ее данными.
Если обнаружено разрушение данных, gbak останавливает восстановление и выдает сообщение. Возможность этой утилиты анализировать проблемы делает ее неоценимо полезной при попытках восстановления разрушенной базы данных. Если вы находитесь в такой грустной ситуации, обратитесь к приложению 4.
! ! !
ВНИМАНИЕ! Выполнение резервного копирования является лишь одной стороной защиты схемы. Если вы ослеплены верой в сохранение целостности при резервном копировании, то, независимо от используемой вами системы резервного копирования, вы будете неизбежно наказаны. Тот факт, что копирование завершилось, не является гарантией, что копия будет восстановлена. Делайте тестовое восстановление периодически или регулярно вместе с резервным копированием.
. ! .
Другие таланты gbak
Утилита gbak также выполняет последовательность других важных задач в процессе анализа, сохранения и восстановления базы данных. Одни являются автоматическими, другие должны быть запрошены при использовании переключателей при вызове программы из командной строки.
В процессе копирования gbak выполняет сборку мусора устаревших записей - необязательный переключатель, выполняется по умолчанию. Если он включен, его действие появляется, даже если вы не восстанавливаете копию, а начинаете работать с чистым файлом. Заметьте при этом, что выполнение gbak не упаковывает базу, как это делает копирование - выполняйте полную сборку мусора для выполнения этого.
Задачи восстановления могут включать:
* балансировку индексов для улучшения производительности вашей базы данных;
* освобождение пространства, занимаемого удаленными записями, и упаковку остальных данных. Это часто уменьшает размер базы данных и улучшает производительность с "упакованными" данными;
* по желанию изменение размера страницы при восстановлении;
* изменение владельца базы данных. Это по желанию- но смотрите! Это может привести к авариям, если вы не будете осторожны;
* обновление базы данных InterBase до Firebird или с меньшей версии базы данных Firebird до более высокой версии (например, обновление ODS);
* разделение базы данных на множество файлов или изменение размеров существующих нескольких файлов. Это выполняется по желанию;
* распределение многофайловой базы данных на несколько дисков. Это выполняется по желанию.
Копирование и восстановление также играют важную роль при наличии неприятных событий, которые могут разрушать базы данных. Подробности осуществления стратегии восстановления базы данных см. в приложении 4.
Обновление структуры на диске (ODS)
Вероятно, основным изменением в новых релизах сервера Firebird является изменение структуры на диске (Оп-Disk Structure, ODS). Если ODS изменилась, и вы хотите использовать преимущества новых возможностей Firebird, обновите ваши базы данных до новой ODS. Новая версия сервера может работать с базами данных, созданными в некоторых предыдущих версиях, однако сервер не может использовать свои новые возможности для старой базы данных с более низким значением ODS.
Вы можете использовать большинство баз данных Firebird 1.0.x непосредственно в Firebird 1.5, хотя ODS версии 1.5 (10.1) выше, чем в версии 1.0.x (10.0). Тем не менее рекомендуется выполнить процедуру обновления для ваших баз данных, обновив их с 10.0 до 10.1, для получения преимуществ повышения производительности за счет возможности индексирования системных таблиц в версии 1.5.
Для обновления существующих баз данных до новой версии ODS выполните следующие шаги:
1. Перед инсталляцией новой версии ODS Firebird выполните резервное копирование баз данных с использованием старой версии gbak.
2. Установите новую версию сервера Firebird, как описано в главе 1.
3. После инсталляции новой версии восстановите базы данных с использованием утилиты gbak новой версии из каталога /bin корневого каталога Firebird.
Диалект 1 баз данныхДиалект 1 базы данных остается диалектом 1 и после восстановления базы данных. База данных остается ограниченной возможностями языка InterBase 5, хотя некоторые ограничения применяются к диалекту 1 баз данных в новой версии ODS, которые не применялись к InterBase 5. Например, в Firebird есть множество новых зарезервированных слов, которые будут недопустимыми в базе данных диалекта 1. Полный список зарезервированных слов см. в приложении 11.
Немного отойдя от обсуждаемой темы, скажем, что можно изменить диалект восстановленной базы данных диалекта 1 в диалект 3 при использовании инструмента gfix, обсуждаемого в главе 39. Однако такая миграция не является простым делом. Язык не является единственным, в чем различаются диалекты. Различия в типах данных не менее важны, если не более.
Например, домены и столбцы чисел с фиксированной точкой сохраняют свои старые атрибуты при изменении базы данных до диалекта 3. Типы NUMERIC и DECIMAL С точностью выше 10 в диалекте 1 хранятся в виде DOUBLE PRECISION. Преобразование в
64-битовые числа с фиксированной точкой не выполняется при изменении диалекта на 3 - вы должны создать новые столбцы требуемого типа и выполнить преобразование старых значений в новые столбцы.
Firebird унаследовал некоторые возможности для выполнения миграции из диалекта 1 в родной SQL-диалект Firebird (диалект 3). Известно, что существуют гораздо более простые и безопасные способы выполнить такую миграцию. Лучшие результаты получаются, если создать скрипт, выполнив извлечение метаданных, изменить его при необходимости и восстановить в "пустую" базу данных диалекта 3. Широко доступны прекрасные свободно распространяемые или недорогие инструменты для заполнения вашей новой базы данных вашими старыми данными. См. в приложении 5 рекомендации, а в конце главы 8 ссылки на специальные темы миграции.
Права на выполнение копирования и восстановления базы данных
Использование gbak для копирования и восстановления ограничено пользователем SYSDBA и владельцем этой базы данных.
! ! !
ПРИМЕЧАНИЕ. Любой пользователь может восстановить базу данных при использовании переключателя -c[reate] (см. разд. "Выполнение восстановления"), если создаваемая база данных не будет перекрывать существующую базу данных.
. ! .
Изменение владельца базы данных
Восстановленный файл базы данных или созданный из gbak имеет владельцем того пользователя, который выполнил восстановление. Следовательно, выполнение копирования и восстановления является механизмом для изменения владельца базы данных.
! ! !
ВНИМАНИЕ! Любой может украсть базу данных Firebird путем восстановления базы данных с резервной копии на машине, где ему известен пароль пользователя SYSDBA. Важно обеспечить, чтобы ваши резервные копии были защищены от неавторизованного доступа[148].
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Сделай видеоигру один и не свихнись - Слава Грис - Программирование / Руководства
- Психбольница в руках пациентов - Алан Купер - Программирование