Опубликован: 07.05.2010 | Уровень: специалист | Доступ: платный
Лекция 26:

Администрирование InterBase: обслуживание БД

< Лекция 25 || Лекция 26: 123 || Лекция 27 >
Аннотация: Эта лекция посвящена обслуживанию баз данных InterBase. Подробно поднимаются вопросы резервного копирования и восстановления БД, изменение настроек базы и применение теневых копий. Даются рекомендации по ремонту разрушенных баз данных.

Резервное копирование базы данных (Backup)

В любой нормальной организации резервное копирование БД ( backup ) является безусловной обязанностью администратора. Ведь база данных может разрушиться по самым разным причинам: сбой питания на сервере, вирус, злоумышленник, ошибки операционной системы, и т.п. Кроме того, сами пользователи могут случайно ввести неправильные данные, которые потом сложно будет исправить. Конечно, такие неприятности не случаются ежедневно, база данных может нормально функционировать годами, тем не менее, вероятность порчи БД не исключена. Поэтому главной обязанностью администратора БД считается регулярное резервное копирование данных. Оптимальным вариантом было бы ежедневное копирование, в крайнем случае, еженедельное. Здесь имейте в виду, что если вдруг БД придется восстанавливать, то чем старее ваша резервная копия, тем больше работы персоналу организации придется сделать для восстановления утерянных данных!

Еще один важный момент: копии базы данных должны храниться не просто на другом разделе жесткого диска, а вообще на другом жестком диске, ведь диск с рабочей БД тоже может выйти из строя. Если копии будут храниться на нем, то они также будут потеряны. Лучше всего хранить резервные копии на другом ПК, и (или) записывать их на CD -носители. К примеру, во многих банках существует правило: делать три резервных копии и хранить их в разных местах, даже в разных зданиях (на случай пожара). Так что отнеситесь к этой лекции серьезно.

Проще всего было бы скопировать файл базы данных *.gdb на другое место, однако так делать не рекомендуется по разным причинам. Пользователи могут вносить данные в базу, следовательно, файл БД будет постоянно изменяться. Чтобы просто скопировать файл, придется отключить работу сервера, то есть, запретить пользователям работу с базой данных, что обычно не приветствуется персоналом организации. Кроме того, в "Ключи и индексы" мы говорили, что интенсивная работа с базой данных может привести к тому, что индексы становятся разбалансированными, значения в них располагаются, как попало, и использование индекса не ускоряет, а даже замедляет поиск данных. А в "Транзакции" мы говорили о транзакциях, и знаем, что многие версии старых записей (мусор) обычно присутствуют в БД, возможно, есть и "повисшие" транзакции. Все эти проблемы не решаются простым копированием файла *.gdb, и остаются в такой копии.

Для создания нормальной резервной копии БД, в InterBase имеются собственные механизмы. Использование встроенных механизмов InterBase имеет следующие преимущества:

  • InterBase позволяет осуществлять резервное копирование БД параллельно с работой других пользователей. В начале копирования InterBase делает "мгновенный снимок" базы данных, с которым и работает утилита копирования. Все изменения в БД, сделанные после начала копирования, не попадут в резервную копию.
  • Во время резервного копирования InterBase считывает каждую запись из таблиц, параллельно занимаясь "сборкой мусора", поэтому в резервной копии не останется устаревших версий записей.
  • Оставшиеся данные переупаковываются, то есть, резервная копия не будет содержать тех "дырок", что были в базе данных. Можно сказать, что данные дефрагментируются.
  • Индексы пересчитываются, что приводит к оптимизации работы базы данных.
  • Созданная резервная копия может быть использована для миграции базы на другие серверы ( InterBase новых версий, Firebird или Yaffil ), а также при восстановлении позволяет исправить некоторые параметры БД, например, размер страниц.

Таким образом, резервное копирование нужно осуществлять исключительно средствами InterBase.

Резервную копию можно сделать разными способами: с помощью утилиты командной строки, с помощью IBConsole, а также программно (рассмотрим в следующей лекции). Испробуем вначале самый простой вариант - утилиту IBConsole.

Backup с помощью IBConsole

Убедитесь, что сервер InterBase запущен, и загрузите IBConsole. Вначале откройте раздел локального сервера, в котором хранится наша БД First.gdb. То есть, вы должны войти в локальный сервер, указав пароль пользователя SYSDBA. Не имеет значения, открыта ли сама база First, копирование можно проводить как при работающей, так и при закрытой БД. Выберите команду меню "Database -> Maintenance -> Backup/Restore -> Backup". В разделе Database в поле Alias выберите псевдоним нашей БД " first ". В разделе Backup File(s) в поле Server укажите " Local Server ", а в поле Alias также укажите " first ". В нижнем разделе нужно вписать адрес и имя создаваемой резервной копии (в качестве имени я использовал текущую дату, у вас имя может быть другим), как на рисунке ниже. Когда вы в следующий раз будете делать резервное копирование, то адрес и имя резервной копии заполнятся автоматически, как только вы выберите алиас " first " в разделе Backup File(s). В этом случае вы сможете оставить имя файла и адрес без изменений, или же изменить их. Как видите, backup -файлам традиционно дают расширение *.gbk:

Настройки резервного копирования

Рис. 26.1 . Настройки резервного копирования

В правой части окна можно ничего не менять, подробнее о параметрах резервного копирования мы поговорим ниже. Нажмите кнопку "ОК", и резервное копирование начнется, оно может занять некоторое время. По окончании копирования выйдет сообщение " Database backup completed". Теперь можете закрыть все окна и открыть папку с базой first.gdb. Там же должен появиться файл с резервной копией 03012010.gbk. Сравните размеры этих файлов и убедитесь, что backup -файл в десятки раз меньше. Далее полученную копию можно размножить уже обычным образом, перенести ее на другой ПК или (и) переименовать ее. При создании резервной копии можно указать любое имя файла. Мы указали текущую дату. Такой прием позволяет хранить много копий в одном месте, и всегда можно найти самую свежую из них.

Backup с помощью утилиты командной строки

Как для создания резервной копии, так и для восстановления БД InterBase предлагает утилиту командной строки gbak, которая неявно вызывалась утилитой IBConsole и в предыдущем примере. Если вы еще не забыли, утилиты InterBase хранятся в папке BIN там же, где установлен InterBase. Утилита gbak является наиболее универсальным и гибким инструментом, позволяя задавать множество параметров. При миграции БД с одной версии InterBase к другой, действует правило: можно восстанавливать резервные копии более старых версий InterBase, но не наоборот. То есть, если ваша резервная копия сделана на InterBase версии 6.5, ее без проблем можно перенести в 7.1 или выше. При попытке сделать обратную миграцию, вы можете столкнуться с массой проблем. Также gbak можно использовать для миграции между InterBase, Firebird или Yaffil, все клоны всех версий также содержат эту утилиту.

Синтаксис утилиты простой:

gbak <параметры> <файл_оригинал> <файл_копия>

Параметры gbak для резервного копирования отражены в следующей таблице:

Таблица 26.1 . Параметры gbak для резервного копирования
Параметр Описание
-b[ackup_database] Выполнить резервное копирование. Обязательный параметр для создания резервной копии.
-co[nvert] Конвертирует внешние файлы, если они есть, во внутренние таблицы.
-e[xpand] Копирование БД без сжатия. Нежелательный параметр при обычном копировании.
-fa[ctor] n Устаревший параметр. Устанавливает коэффициент блокирования n для ленточных устройств.
-g[arbage_collect] Параметр запрещает сборку мусора. Обычно не используется, но может быть применен при попытке ремонта БД.
-ig[nore] Запрет на сверку с контрольными суммами. Можно применить, если резервное копирование аварийно завершилось из-за ошибок контрольных сумм.
-l[imbo] Запрет на завершение повисших limbo -транзакций (см. "Транзакции" ). Не используйте для регулярного копирования!
-m[eta_data] Копировать только метаданные. В результате получим пустую БД с таблицами, индексами, генераторами, триггерами и хранимыми процедурами, но без данных.
-nt Параметр делает копию непереносимой на другие серверы ( InterBase / Firebird / Yaffil ). По умолчанию используется обратный параметр - t.
-ol[d_descriptions] Параметр сохраняет только метаданные в старых форматах InterBase.
-pas[sword] <пароль> Обязательный параметр с паролем пользователя, который делает резервную копию.
-ro[le] <имя_роли> Параметр с именем роли, если пользователь хочет зайти в контексте роли.
-se[rvice] <сервис> Параметр создает копию на том же ПК, где находится рабочая БД, то есть, на сервере. При этом вызывается Service Manager серверного ПК. Имеет смысл, если вы запускаете резервное копирование на сервере удаленно, через сеть.
-t[ransportable] Параметр по умолчанию, создает копию, переносимую на другие серверы.
-user <имя_пользователя> Обязательный параметр с именем пользователя, который делает резервную копию.
-v[erify] Включает подробные сообщения о том, что делает gbak при копировании.
-y <файл> Задает файл для вывода отчета о копировании. Если файл задан, а - v не был использован, то при удачном копировании файл будет пустым, иначе он будет содержать отчет об ошибках. Если такой файл уже есть, копирование не удастся.
-z Показывает версию утилиты gbak.

Загрузите окно cmd, сделайте текущей папку

c:\program files\borland\interbase\bin

Если у вас InterBase установлен по другому адресу, то следует указать ваш адрес.

Обычную копию можно сделать командой (выполните эти примеры, в окне cmd их придется вводить вручную):

gbak -user sysdba -pas masterkey -b c:\databases\first.gdb c:\databases\first.gbk

Копию с выводом информации на экран:

gbak -user sysdba -pas masterkey -b -v c:\databases\first.gdb c:\databases\first2.gbk

Копию пустой БД (только метаданные):

gbak -user sysdba -pas masterkey -b -m  c:\databases\first.gdb c:\databases\empty_first.gbk
< Лекция 25 || Лекция 26: 123 || Лекция 27 >
Евгений Медведев
Евгений Медведев

В лекции №2 вставляю модуль данных. При попытке заменить name на  fDM выдает ошибку: "The project already contains a form or module named fDM!". Что делать? 

Анна Зеленина
Анна Зеленина

При вводе типов успешно сохраняется только 1я строчка. При попытке ввести второй тип вылезает сообщение об ошибке "project mymenu.exe raised exception class EOleException with message 'Microsoft Драйвер ODBC Paradox В операции должен использоваться обновляемый запрос'. 

Денис Попов
Денис Попов
Россия, Оренбург, Оренбургский государственный университет, 2015
Рустам Кадыров
Рустам Кадыров
Россия, Тирлян, Тирлянская школа №5, 2003