Шрифт:
Интервал:
Закладка:
Установка режима - автоматический (с или без атрибута условная, CONDITIONAL) или ручной - определяет, что произойдет, если теневая копия станет недоступной.
Режим AUTO устанавливается по умолчанию. Он позволяет базе данных продолжить работу в случае, когда теневая копия станет недоступной, или наоборот, теневая копия будет целой, а диск с базой данных окажется поврежден.
* В момент, когда теневая копия станет недоступной, появится окно, чтобы проинформировать об этом администратора базы данных.
* Если ставшая недоступной теневая копия была создана с атрибутом CONDITIONAL, Firebird автоматически создает новую теневую копию, если это возможно.
* Если теневое копирование не является условным, то понадобится заново создать теневую копию вручную.
Режим MANUAL прекращает дальнейший доступ к базе данных в случае, когда теневая копия становится недоступной. Закройте ее, если продолжение теневого копирования является более важным, чем продолжение операций с базой данных.
Для восстановления соединения администратор должен удалить старый файл теневой копии, удалить на нее ссылки и создать новую теневую копию.
Условное теневое копированиеОдной из причин, по которой теневая копия становится недоступной, является ситуация, когда она принимает на себя функции главной базы данных в случае "гибели" аппаратуры существующей базы данных - как-никак это основная идея теневого копирования[40]!
! ! !
ВНИМАНИЕ! Атрибут CONDITIONAL должен также приводить к автоматическому созданию новой теневой копии, если существующая теневая копия становится операционной базой данных. Тем не менее практика показывает, что это происходит не всегда. Проверьте, работает ли это, как ожидалось, и будьте готовы использовать запасной вариант.
. ! .
Однофайловые теневые копии в сравнении с многофайловымиПо умолчанию теневая копия создается как "набор", содержащий один файл. Тем не менее набор теневой копии может включать в себя несколько файлов. Когда база данных- а следовательно, и ее теневая копия - увеличивается в размерах, теневая копия может быть переопределена и перегенерирована с большим количеством файлов, чтобы соответствовать требованиям увеличения пространства.
Создание теневой копии
Создание теневой копии не требует исключительного доступа; это также не влияет на пользователей, соединенных с базой данных. DDL-оператор CREATE SHADOW создает теневую копию базы данных, с которой вы соединены в настоящий момент.
Синтаксис:
CREATE SHADOW номер-набора [AUTO | MANUAL] [CONDITIONAL]
'спецификация-файла'
[LENGTH [=] целое [PAGE[S]]] [<вторичный-файл>];
<вторичный-файл> = FILE 'спецификация-файла'
[<информация-о-файле>] [<вторичный-файл>]
<информация-о-файле> =
{LENGTH [=] целое[PAGE[S]] | STARTING [AT [PAGE]]
целое} [<информация-о-файле>]
! ! !
СОВЕТ. Как и в операторе CREATE DATABASE, спецификация файлов для теневой копии всегда является зависимой от платформы.
. ! .
Однофайловая теневая копияПредположим, у нас имеется сервер на Linux, соединенный с базой данных employee.gdb, которая размещена в каталоге примеров в корневом каталоге Firebird. Мы решили выполнять теневое копирование базы данных в разделе с именем /shadows. Для создания однофайловой теневой копии мы используем оператор
CREATE SHADOW 1 '/shadows/employee.shd';
Номер набора теневой копии может быть любым целым. Размер страницы не включен, следовательно, атрибут PAGE_SIZE будет взят из спецификации самой базы данных.
Используем команду isql SHOW DATABASE, чтобы убедиться, что теневая копия сейчас существует:
SQL> SHOW DATABASE;
Database: /usr/local/firebird/examples/employee.gdb
Shadow 1: '/shadows/employee.shd' auto
PAGE_SIZE 4096
Number of DB pages allocated = 392
Sweep interval = 20000
. . .
Многофайловая теневая копияСинтаксис создания многофайловой теневой копии похож на синтаксис создания многофайловой базы данных: спецификация вторичного файла теневой копии "сцепляется" со спецификацией первичного файла с указанием спецификаций и ограничений размеров каждого файла.
В следующем примере предположим, что мы соединены с базой данных employee.gdb, расположенной в каталоге по умолчанию Win32. Мы собираемся создавать теневую копию из трех файлов на дисках F, H и J, которые являются разделами жесткого диска файловой системы сервера.
! ! !
СОВЕТ. Размеры вторичных файлов теневой копии не обязательно должны соответствовать размерам вторичных файлов базы данных.
. ! .
Первичный файл (employee1.shd) имеет длину 10 000 страниц базы данных, а первый вторичный файл (employee2.shd) 20 000 страниц базы данных. Как и в случае с базой данных, последний вторичный файл теневой копии при необходимости будет увеличиваться, пока не будет исчерпано дисковое пространство раздела или пока не будет достигнут предел размера для файловой системы.
CREATE SHADOW 25 'F:shadowsemployeel.shd' LENGTH 10000
FILE 'H:shadowsemployee2.shd' LENGTH 20000
FILE 'J:shadowsemployee3.shd' ;
Мы можем также указать начальные страницы вторичных файлов, вместо абсолютного размера первичного и не последних вторичных файлов:
CREATE SHADOW 25 'F:shadowsemployeel.shd'
FILE 'H:shadowsemployee2.shd' STARTING AT 10001
FILE 'J:shadowseraployee3.shd' STARTING AT 30001;
Вы можете проверить в isql:
SQL> SHOW DATABASE;
Database: C:Programfirebirdexamplesemployee.gdb
Owner: SYSDBA
Shadow 25: 'F:SHADOWSEMPLOYEEl.SHD' auto length 10000
file H:SHADOWSEMPLOYEE2.SHD starting 10001
file J:SHADOWSEMPLOYEE3.SHD starting 30001
PAGE_SIZE 1024
Number of DB pages allocated =462
Sweep interval = 20000
Ручной режимВ предыдущих примерах создавались теневые копии в режиме по умолчанию AUTO. Предположим, что теперь нам нужно, чтобы работа базы данных была остановлена каждый раз, когда работа с базой данных или ее теневой копией становится невозможной по различным причинам. В этом случае нам нужно создавать теневую копию в режиме MANUAL (см. предыдущие примечания в этом разделе). Для сообщения серверу Firebird, что мы хотим установить это правило, мы создаем теневую копию с использованием ключевого слова MANUAL в операторе CREATE SHADOW:
CREATE SHADOW 9 MANUAL '/shadows/employee.shd';
Теперь, если теневая копия будет использоваться как база данных, когда мы потеряем главный файл базы данных, или если теневая копия станет недоступной по разным причинам, администратор базы данных должен удалить старый файл теневой копии и создать новую теневую копию до того, как клиенты смогут восстановить соединения.
Условная теневая копияВо всех предыдущих примерах спецификация CREATE SHADOW оставляла базы данных без теневого копирования после того, как теневая копия становилась недоступной по причине отключения от базы данных или когда она "занимала место" активной базы данных при физической смерти оригинальной базы данных.
В случае теневой копии режима MANUAL это то, что нам нужно. Мы выбираем данный режим, потому что хотим, чтобы соединения с базой данных оставались заблокированными, пока мы вручную не создадим новую теневую копию.
В случае теневой копии режима дито соединения с базой данных могут быть восстановлены после сбоя, как только теневая копия заменит базу данных. С этого момента работа с теневой копией не будет вестись, пока администратор не создаст вручную новую теневую копию. Если теневая копия станет недоступной по разным причинам, администратор об этом не узнает. В другом же случае мы имеем окно, где сообщается об ошибке теневого копирования.
Как было описано ранее в этом разделе, мы можем улучшить эту ситуацию, включив ключевое слово CONDITIONAL В определение теневой копии режима AUTO. Результатом будет то, что когда старая теневая копия станет недоступной, сервер Firebird выполнит все необходимые вспомогательные действия и автоматически создаст новую теневую копию, например:
CREATE SHADOW 33 CONDITIONAL '/shadows/employee.shd';
Увеличение размера теневой копии
В некоторых случаях бывает необходимым увеличить размер и количество файлов в теневой копии. Просто удалите теневую копию (как описано в следующем разделе) и создайте новую.
Удаление теневой копии
Теневую копию нужно удалять в следующих ситуациях:
* это "ручная" теневая копия, которая по разным причинам была отключена от системы. Удаление ненужной теневой копии является необходимым для создания новой теневой копии и возобновления обслуживания базы данных;
* это безусловная автоматическая теневая копия, которая была отключена из-за некоторых системных событий. Ее нужно пересоздать для восстановления ее целостности;
* вам нужно изменить размеры файлов теневой копии, добавить больше файлов или установить новую теневую копию с другими атрибутами;
* теневое копирование больше не требуется. Удаление теневой копии означает отключение теневого копирования.
Удаление теневой копии удаляет не только физические файлы, но также и ссылки на нее из метаданных базы данных. Чтобы иметь право на выполнение этой команды, вы должны быть соединены с базой данных как пользователь, который создал теневую копию, пользователь SYSDBA или (в POSIX) пользователь с привилегиями операционной системы root.
- Delphi. Учимся на примерах - Сергей Парижский - Программирование
- Сделай видеоигру один и не свихнись - Слава Грис - Программирование / Руководства
- Психбольница в руках пациентов - Алан Купер - Программирование