В любой нормальной организации резервное копирование БД (
Еще один важный момент: копии базы данных должны храниться не просто на другом разделе жесткого диска, а вообще на другом жестком диске, ведь диск с рабочей БД тоже может выйти из строя. Если копии будут храниться на нем, то они также будут потеряны. Лучше всего хранить резервные копии на другом ПК, и (или) записывать их на CD -носители. К примеру, во многих банках существует правило: делать три резервных копии и хранить их в разных местах, даже в разных зданиях (на случай пожара). Так что отнеситесь к этой лекции серьезно.
Проще всего было бы скопировать файл базы данных *.gdb на другое место, однако так делать не рекомендуется по разным причинам. Пользователи могут вносить данные в базу, следовательно, файл БД будет постоянно изменяться. Чтобы просто скопировать файл, придется отключить работу сервера, то есть, запретить пользователям работу с базой данных, что обычно не приветствуется персоналом организации. Кроме того, в лекции №18 мы говорили, что интенсивная работа с базой данных может привести к тому, что индексы становятся разбалансированными, значения в них располагаются, как попало, и использование индекса не ускоряет, а даже замедляет поиск данных. А в лекции №24 мы говорили о транзакциях, и знаем, что многие версии старых записей (мусор) обычно присутствуют в БД, возможно, есть и "повисшие" транзакции. Все эти проблемы не решаются простым копированием файла *.gdb, и остаются в такой копии.
Для создания нормальной резервной копии БД, в имеются собственные механизмы. Использование встроенных механизмов имеет следующие преимущества:
InterBase позволяет осуществлять резервное копирование БД параллельно с работой других пользователей. В начале копирования InterBase делает "мгновенный снимок" базы данных, с которым и работает утилита копирования. Все изменения в БД, сделанные после начала копирования, не попадут в резервную копию.InterBase считывает каждую запись из таблиц, параллельно занимаясь "сборкой мусора", поэтому в резервной копии не останется устаревших версий записей.InterBase новых версий, Firebird или Yaffil ), а также при восстановлении позволяет исправить некоторые параметры БД, например, размер страниц.Таким образом, резервное копирование нужно осуществлять исключительно средствами .
Резервную копию можно сделать разными способами: с помощью , а также программно (рассмотрим в следующей лекции). Испробуем вначале самый простой вариант - утилиту .
Убедитесь, что сервер запущен, и загрузите . Вначале откройте раздел локального сервера, в котором хранится наша БД First.gdb. То есть, вы должны войти в локальный сервер, указав пароль пользователя SYSDBA. Не имеет значения, открыта ли сама база First, копирование можно проводить как при работающей, так и при закрытой БД. Выберите команду меню "Database -> first ". В разделе Backup File(s) в поле Server укажите " Local Server ", а в поле Alias также укажите " first ". В нижнем разделе нужно вписать адрес и имя создаваемой резервной копии (в качестве имени я использовал текущую дату, у вас имя может быть другим), как на рисунке ниже. Когда вы в следующий раз будете делать резервное копирование, то адрес и имя резервной копии заполнятся автоматически, как только вы выберите алиас " first " в разделе Backup File(s). В этом случае вы сможете оставить имя файла и адрес без изменений, или же изменить их. Как видите, *.gbk:
(рис 26.1 ) Настройки резервного копированияВ правой части окна можно ничего не менять, подробнее о параметрах резервного копирования мы поговорим ниже. Нажмите кнопку "ОК", и резервное копирование начнется, оно может занять некоторое время. По окончании копирования выйдет сообщение " Database first.gdb. Там же должен появиться файл с резервной копией 03012010.gbk. Сравните размеры этих файлов и убедитесь, что
Как для создания резервной копии, так и для восстановления БД предлагает утилиту командной строки и в предыдущем примере. Если вы еще не забыли, утилиты BIN там же, где установлен . Утилита к другой, действует правило: можно восстанавливать резервные копии более старых версий , но не наоборот. То есть, если ваша резервная копия сделана на версии 6.5, ее без проблем можно перенести в 7.1 или выше. При попытке сделать обратную миграцию, вы можете столкнуться с массой проблем. Также , или , все клоны всех версий также содержат эту утилиту.
Синтаксис утилиты простой:
gbak <параметры> <файл_оригинал> <файл_копия>
Параметры
| Параметр | Описание |
|---|---|
| -b[ackup_database] | Выполнить резервное копирование. Обязательный параметр для создания резервной копии. |
| -co[nvert] | Конвертирует внешние файлы, если они есть, во внутренние таблицы. |
| -e[xpand] | Копирование БД без сжатия. Нежелательный параметр при обычном копировании. |
| -fa[ctor] n | Устаревший параметр. Устанавливает коэффициент блокирования n для ленточных устройств. |
| -g[arbage_collect] | Параметр запрещает сборку мусора. Обычно не используется, но может быть применен при попытке ремонта БД. |
| -ig[nore] | Запрет на сверку с контрольными суммами. Можно применить, если резервное копирование аварийно завершилось из-за ошибок контрольных сумм. |
| -l[imbo] | Запрет на завершение повисших limbo -транзакций (см. Лекцию 24). Не используйте для регулярного копирования! |
| -m[eta_data] | Копировать только метаданные. В результате получим пустую БД с таблицами, индексами, генераторами, триггерами и хранимыми процедурами, но без данных. |
| -nt | Параметр делает копию непереносимой на другие серверы ( / / ). По умолчанию используется обратный параметр - t. |
| -ol[d_descriptions] | Параметр сохраняет только метаданные в старых форматах . |
| -pas[sword] <пароль> | Обязательный параметр с паролем пользователя, который делает резервную копию. |
| -ro[le] <имя_роли> | Параметр с именем роли, если пользователь хочет зайти в контексте роли. |
| -se[rvice] <сервис> | Параметр создает копию на том же ПК, где находится рабочая БД, то есть, на сервере. При этом вызывается Service Manager серверного ПК. Имеет смысл, если вы запускаете резервное копирование на сервере удаленно, через сеть. |
| -t[ransportable] | Параметр по умолчанию, создает копию, переносимую на другие серверы. |
| -user <имя_пользователя> | Обязательный параметр с именем пользователя, который делает резервную копию. |
| -v[erify] | Включает подробные сообщения о том, что делает |
| -y <файл> | Задает файл для вывода отчета о копировании. Если файл задан, а - v не был использован, то при удачном копировании файл будет пустым, иначе он будет содержать отчет об ошибках. Если такой файл уже есть, копирование не удастся. |
| -z | Показывает версию утилиты |
Загрузите окно cmd, сделайте текущей папку
c:\program files\borland\interbase\bin
Если у вас установлен по другому адресу, то следует указать ваш адрес.
Обычную копию можно сделать командой (выполните эти примеры, в окне 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
Если резервное SQL -сервер, или при разрушении БД, что к счастью, случается нечасто. Оптимизацию желательно делать не реже, чем раз в месяц. Если же вы делаете восстановление с целью перехода, например от 6.5 на 7.1 или выше, то резервную копию нужно делать на старом сервере, а восстановление - уже на новом. Если база данных большая, то восстановление может занять какое то время.
Кроме того, если резервное копирование можно делать параллельно с работой других пользователей, то для восстановления нужен монопольный режим. Проще всего вынуть сетевой кабель из сервера, чтобы пользователи не могли продолжать работу с БД.
Откройте и войдите в локальный сервер (база данных first должна быть закрыта). Выберите меню " Database ->
(рис 26.2 ) Восстановление БД из резервной копииЕсли вы помните, в лекции № 15 мы создавали базу данных с размером страницы 4096. Это было сделано специально, чтобы в данной лекции продемонстрировать изменение размера страницы при восстановлении резервной копии на более подходящий размер 8192. Также в поле Overwrite (Писать поверх существующего файла) мы указали True, чтобы заменить старую БД. В реальной практике записывать восстанавливаемую БД поверх существующей рабочей версии ни в коем случае не рекомендуется. Что, если восстановление пройдет неудачно, а рабочую БД мы уже "затрем"? Поэтому рекомендуется восстанавливать базу данных в другую папку, и только в случае, если при восстановлении не выйдет ошибок, поместить ее вместо старой рабочей версии. Причем желательно на всякий случай сделать простую копию (Проводником Windows или другим файловым менеджером) и старой рабочей версии.
Теперь стоит только нажать "ОК", и восстановление базы начнется. Подробная информация о восстановлении будет выведена в отдельное окно. Закончится восстановление сообщением "Service ended at 03.01.2010 11:58:25" (у вас будут другие дата - время). После этого сообщения все окна Restore можно закрыть, а восстановленную БД - открыть и работать с ней.
Для восстановления базы данных из резервной копии также используется утилита
| Параметр | Описание |
|---|---|
| -bu[ffers] | Устанавливает размер буфера в страницах БД для восстановления. |
| -c[reate_database] | Выполнить восстановление БД. Обязательный параметр при восстановлении. |
| -i[nactive] | При восстановлении БД делает индексы неактивными. Применяется обычно при ремонте БД, если обычное восстановление прошло неуспешно из-за ошибок индексов. |
| -k[ill] | Не создавать |
| -m[ode] <доступ> | Задает доступ к восстанавливаемой БД. Может быть " read_write " (по умолчанию, чтение/запись) или " read_only " (только чтение). |
| -n[o_validity] | Не восстанавливать проверки ограничений. Применяется обычно при ремонте БД, если обычное восстановление прошло неуспешно из-за нарушений ограничений CHECK. |
| -o[ne_at_a_time] | Восстанавливать одну таблицу за раз. Применяется обычно при ремонте БД, если база содержит разрушенные данные. |
| -p[age_size] <значение> | Устанавливает для восстанавливаемой БД новый размер страниц. Значение может быть 1024, 2048, 4096 или 8192 (наиболее предпочтительный). |
| -pas[sword] <пароль> | Обязательный параметр с паролем пользователя, который делает восстановление. |
| -r[eplace_database] | Если указанная БД уже существует, она будет перезаписана при восстановлении. Если БД не существует, будет создан файл с указанным именем. |
| -se[rvice] <сервис> | Параметр восстанавливает БД на том же ПК, где находится резервная копия (на сервере). При этом вызывается Service Manager серверного ПК. Используется, если восстановление запускается с удаленного ПК. |
| -use_[all_space] | Параметр заставляет страницы восстанавливаемой БД заполняться на 100%, вместо 80% по умолчанию. Полезен только при восстановлении БД с параметром "-m read_only" (только для чтения), так как рабочим БД требуется место для хранения версий строк. |
| -user <имя_пользователя> | Обязательный параметр с именем пользователя, который делает восстановление. |
| -v[erify] | Включает подробные сообщения о том, что делает |
| -y <файл> | Задает файл для вывода отчета о восстановлении. Если файл задан, а -v не был использован, то при удачном восстановлении файл будет пустым, иначе содержать отчет об ошибках. Если такой файл уже есть, восстановление не удастся. |
| -z | Показывает версию утилиты |
Обычное восстановление утилитой first.gdb на другое место):
gbak -user sysdba -pas masterkey -c -v c:\databases\03012010.gbk c:\databases\first.gdb
Восстановление может занять некоторое время. Когда восстановление закончится, вы увидите мигающий курсор после адреса папки BIN. Как видите, синтаксис восстановления отличается от резервного копирования: вначале указывается резервная копия, из которой мы желаем восстановить базу данных, затем указывается файл создаваемой БД.
Если при восстановлении БД мы хотим изменить размер страниц, укажем их в параметре - p:
gbak -user sysdba -pas masterkey -c -p 8192 -v c:\databases\03012010.gbk c:\databases\first.gdb
Сервер имеет механизм теневого ( Shadow - файлы являются дополнительным средством безопасности данных, но никак не панацеей от всех возможных бед.
Создание и удаление DDL (часть SQL ), которые можно вводить разными способами, например, с помощью . Для примера создадим first.gdb. Эту копию мы поместим по адресу D:\DataBases\ , однако если у вас на компьютере нет диска D:, то просто создайте другую папку, например, C:\DataBases2\ и соответственно меняйте адрес в примерах ниже на собственный. На момент создания
Запустите сервер , если он не работает, и загрузите . Войдите в локальный сервер пользователем SYSDBA (также на создание SYSDBA ). Далее откройте базу данных first.
Итак, нажмем кнопку " SQL ", открывающую окно , и в окне запросов введем следующий оператор:
CREATE SHADOW 1 AUTO 'D:\DATABASES\First.shd';
Затем нажмем кнопку " Execute Query ", чтобы выполнить запрос. Вы можете открыть указанную папку Проводником или любым файловым менеджером, и убедиться, что файл с теневой копией создан. Чтобы полноценно связать , или хотя бы прервать контакт с базой данных ( ). Как только это случится,
Удалить при подключенной БД командой
DROP SHADOW 1;
При этом в базе данных удаляются все ссылки на
Разберем синтаксис создания и удаления Shadow -копий.
CREATE SHADOW <номер> [AUTO | MANUAL] [CONDITIONAL] 'спецификация-файла' [LENGTH [=] <целое> [PAGE[S]]] [<вторичный-файл>];
Здесь:
<номер> - любое целое число, идентификатор
[ AUTO ] - автоматический режим, устанавливается по умолчанию. Этот режим позволяет базе данных работать в случае, если заменит ее теневой копией и восстановит соединение. В таком случае выводится окно с сообщением, чтобы проинформировать администратора о случившемся.
[ MANUAL ] - ручной режим. При выборе этого режима, если вдруг
[ CONDITIONAL ] - этот режим является дополнением к [ AUTO ], и подразумевает, что при разрушении базы данных автоматически заменит базу данных теневой копией и восстановит соединение. Но если при режиме [ AUTO ] администратору придется заново создавать новую сделает это сам. Режим AUTO CONDITIONAL является наиболее предпочтительным для создания бесперебойной работы системы.
'спецификация-файла' описывает адрес и имя файла *.shd
[ LENGTH ] - необязательный параметр, который используется при создании многофайловой
Синтаксис удаления
DROP SHADOW <номер>
Где номером является идентификатор CONDITIONAL -
CREATE SHADOW 3 CONDITIONAL 'd:\DataBases\first.shd';
Затем прервем соединение с базой данных, и вновь соединимся с ней, чтобы наполнить копию данными. Теперь выделим в базу данных first и выберем команду меню "Database -> View Metadata". Откроется окно, показывающее, как создавалась БД:
(рис 26.3 ) Метаданные базы firstКак видно из рисунка, в числе прочего указано и создание
Создание многофайловой
CREATE SHADOW 4 CONDITIONAL 'd:\DataBases\first1.shd' LENGTH 15000 FILE 'e:\DataBases\first2.shd' LENGTH 15000 FILE 'f:\DataBases\first3.shd';
В этом случае создастся три файла. Первый файл будет наполняться, пока его размер не достигнет 15 тысяч страниц БД, затем начнет наполняться второй файл
Эта утилита является одним из основных инструментов
Синтаксис утилиты очень простой:
gfix [параметры] <база данных>;
Все параметры утилиты приведены в следующей таблице:
| Параметр | Описание |
|---|---|
| -ac[tivate] <теневая копия> | Параметр предназначен для активации |
| -at[tach] n | Дополнительный параметр к - . Предназначен для запрета новых соединений с БД. n указывает количество секунд, через которое произойдет отключение БД. Отключение отменится, если к этому времени еще останутся активные соединения. |
| -b[uffers] n | Устанавливает новый размер кэша (буфера) БД в страницах. n - количество страниц. По умолчанию, |
| -ca[che] n | Параметр зарезервирован для будущих версий и не используется. |
| -c[ommit] {ID| all} | Завершает подтверждением зависшую транзакцию с идентификатором ID, или все зависшие транзакции ( all ) |
| -force n | Дополнительный параметр к - . Предназначен для принудительного закрытия базы данных. n указывает количество секунд, через которое произойдет закрытие. Если остались |
| -f[ull] | Используется вместе с - v для проверки структур записей и таблиц; освобождает неназначенные фрагменты записей. |
| -h[ousekeeping] n | Изменяет интервал транзакций для автоматической чистки n устанавливает новый интервал. Если n=0, автоматическая чистка запрещена. |
| -i[gnore] | Игнорировать ошибки контрольных сумм при проверке или чистке. |
| -k[ill] <база данных> | Удаляет все неиспользуемые |
| -l[ist] | Показывает ID всех зависших транзакций. Также показывает, что произойдет при наличии зависших limbo -транзакций и использования опции - t. |
| -m[end] | Помечает разрушенные записи как неиспользуемые. |
| -mo[de] {read_write | read_only} | Устанавливает режим БД. Может быть read_write (чтение-запись, по умолчанию), или read_only (только чтение). |
| -n[o_update] | Используется вместе с - v для проверки разрушенных или неразмещенных структур. Если таковые есть, они отобразятся в сообщении, но не будут исправлены. |
| -o[nline] | Открывает закрытую после - базу данных. |
| -pa[ssword] <пароль> | Пароль пользователя SYSDBA или владельца базы данных для работы с |
| -p[rompt] | Используется вместе с - l. Выводит подсказки при восстановлении транзакций. |
| -r[ollback] {ID | all} | Завершает откатом зависшую транзакцию с идентификатором ID, или все зависшие транзакции ( all ) |
| - |
Запускает принудительную чистку БД. |
| -s[ql_dialect] n | Изменяет диалект базы данных. n может быть 1 или 3. |
| -sh[ut] | Закрывает базу данных. Используется с одним из дополнительных параметров - attach, - force или - tran. |
| -t[wo_phase] {ID | all} | Автоматическое двухфазное восстановление limbo транзакции с номером ID, или всех транзакций ( all ). |
| -tr[an] n | Дополнительный параметр к - . Предназначен для запрета запуска новых транзакций. n указывает количество секунд, через которое произойдет отключение БД. Отключение отменится, если к этому времени еще останутся |
| -use {full | reserve} | Включает 100% заполнение страниц БД ( full ) или 80% заполнение по умолчанию ( reserve ). 100%-е заполнение имеет смысл для баз только для чтения. |
| -user <имя пользователя> | Имя администратора или владельца базы данных для работы с |
| -v[alidate] | Определяет и показывает неназначенные страницы БД. То есть, созданные, но не назначенные для каких либо структур данных. |
| -w[rite] {sync | async} | Переключает режимы синхронной / асинхронной записи |
| -z | Выводит версию и утилиты |
Чистка
gfix -sweep c:\databases\first.gdb -user sysdba -pa masterkey
Чистка базы данных происходит автоматически через определенное количество (по умолчанию 20 000) транзакций. Расчет интервала делается из старейшей транзакции, зарегистрированной в области TIP (Инвентарная страница транзакций), и из старейшей активной транзакции. Когда инвентарный номер старейшей активной транзакции окажется больше на указанный интервал, чем инвентарный номер старейшей зарегистрированной в TIP транзакции, произойдет автоматический запуск чистки. Изменить интервал на 10 000, например, можно так:
gfix -h 10000 c:\databases\first.gdb -user sysdba -pa masterkey
Если же вместо 10 000 указать 0, автоматическая чистка для данной БД вообще будет отменена. Как уже говорилось, чистка не требует монопольного доступа к базе данных, однако если БД очень большая, и много пользователей интенсивно с ней работают, чистка может заметно замедлить работу с БД. В этом случае, перед чисткой рекомендуется вначале отключить базу данных.
Отключение базы данных делается командой - с одним из трех дополнительных параметров. Чтобы безусловно отключить базу данных через 10 минут, выполните команду:
gfix -sh -force 600 c:\databases\first.gdb -user sysdba -pa masterkey
Однако такой радикальный способ рекомендуется использовать с осторожностью: пользователи, которые на этот момент продолжали работу с БД, потеряют результаты своей работы. Вначале вместо " -force " лучше попробовать более "мягкие" дополнительные параметры " -attach " или " -tran ".
После того, как база данных закрыта, и с ней выполнены все необходимые действия, ее нужно открыть командой
gfix -o c:\databases\first.gdb -user sysdba -pa masterkey
использует
gfix -b 300 c:\databases\first.gdb -user sysdba -pa masterkey
Другим способом установить размер кэша по умолчанию для всех вновь создаваемых БД, является изменение конфигурационного файла ibconfig, который находится в папке . По умолчанию, это
c:\program files\borland\interbase\ibconfig
Это обычный текстовый файл, в котором все параметры закомментированы (первым символом идет "#"). Нужно снять комментарий, и установить новое значение нужного параметра. То есть, вместо
#DATABASE_CACHE_PAGES 75
указать
DATABASE_CACHE_PAGES 300
Однако более предпочтительным способом для этих целей является утилита
База данных может работать в одном из двух режимов доступа: только для чтения, или для чтения / записи (по умолчанию). Если вам понадобилось запретить пользователям модифицирование данных, вы можете поменять режим командой:
gfix -mo read_only c:\databases\first.gdb -user sysdba -pa masterkey
Операции изменения режима занимают время! Не забудьте потом вернуть режим read_write, иначе пользователи не смогут вносить изменения в БД.
Режимы возлагает это на операционную систему: физическое сохранение изменений происходит позже - когда переполнится буфер, или когда ОС решит, что компьютер долго простаивает. Отключение UPS ). Ведь может случиться, что физической записи на диск не происходит целый день, а при сбое системы или отключении питания потеряются результаты всей работы! Отключенный режим немного увеличивает скорость работы с БД, однако данные становятся менее защищенными.
По умолчанию, все БД работают с включенным
gfix -w async c:\databases\first.gdb -user sysdba -pa masterkey
Команда
gfix -v c:\databases\first.gdb -user sysdba -pa masterkey
выведет на экран все неназначенные страницы, которые являются мусором. Если на экран ничего не вышло, значит, таких страниц в БД нет.
Если база данных разрушилась, можно вместо нее активировать
gfix - ac d:\databases\first.shd -user sysdba -pa masterkey
К счастью, сервер - достаточно надежная система, ваша база данных может работать годами без необходимости ремонта. Систематическое резервное копирование также гарантирует вас от всяких неожиданных неприятностей. Если все же когда-нибудь придется ремонтировать базу данных, воспользуйтесь следующими рекомендациями:
i, чтобы игнорировать эти ошибки.gfix -mend -full -ignore <база данных> <пользователь> <пароль>
i.gbak -b -v -i <база данных> <резервная копия> <пользователь> <пароль>
g (не собирать мусор). Если разрушения связаны с повисшими limbo -транзакциями, то - limbo.gbak -create -v <резервная копия> <база данных> <пользователь> <пароль>
Как правило, такой порядок действий позволяет восстановить разрушенную БД. Если же этого не случилось, попробуйте использовать другие переключатели. Например, - inactive у утилиты one_at_a_time будет восстанавливать по одной записи за раз, что позволит восстановить целые таблицы, и пропустить поврежденные.
Если вы грамотно спроектируете вашу базу данных и организуете систематическое резервное копирование, то возможно, вам никогда и не придется прибегать к ремонту БД. Но знать, как это делается, необходимо каждому программисту и администратору баз данных.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.