Управление After-Image экстентами
Как уже упоминалось ранее, статус AI-экстентов может принимать различные значения. Рассмотрим порядок смены этих статусов:
- EMPTY – AI-экстент пустой и доступен для использования;
- BUSY – AI-экстент, которые заполняется в текущий момент;
- FULL – во время переключения AI-экстентов, статус текущего экстента (BUSY) меняется на заполненный (FULL), а следующий пустой экстент (EMPTY) становится текущим (BUSY);
- LOCKED – статус используется, когда работает механизм OE Replication. Пока все AI-заметки не будут скопированы в базу TARGET из AI-экстента, он будет заблокирован (LOCKED). Как только копирование будет завершено, AI-экстент будет разблокирован и получит статус (FULL);
- ARCHIVED – во время работы OE Replication и AI File Management экстент AI, заблокированный и заархивированный механизмом AI File Management, получает статус ARCHIVED до завершения процесса репликации. После завершения репликации экстент будет помечен как пустой (EMPTY).
Существует три способа для определения статуса AI-экстента.
RFUTIL AIMAGE EXTENT LIST
Эта команда показывает всю информацию о каждом из AI-экстентов, в том числе и их статусы:
rfutil db-name -C aimage extent list
Команда не выдаст ни каких данных, если After-imaging не активирован.
PROMON
C помощью утилиты PROMON можно просмотреть информацию о статусе AI-экстентов на экране «Status:AI Extents» (R&D -> 1 -> 15) который представлен на рисунке
Этот экран основан на данных, полученных из предыдущего примера, когда мы рассматривали мониторинг с помощью RFUTIL. Здесь мы можем получить информацию только о статусе и местоположении AI-экстентов. Поскольку в примере размер экстентов фиксирован, то отображается именно этот размер, а не реальные размеры экстентов, как это было видно в RFUTIL AIMAGE EXTENT LIST в поле Used. Но обычно в случае необходимости именно к этому методу прибегает администратор для быстрого определения состояния AI-экстентов.
RFUTIL AIMAGE QUERY
Параметр AIMAGE QUERY в утилите RFUTIL предназначен для определения статуса конкретного AI-экстента. Результаты большинства запросов представлены в виде числовых значений или текстовых строк, что облегчает их интеграцию и обработку в программных скриптах.
Используйте следующую команду для осуществления запроса:
rfutil db-name -C aimage query query-option by search-option search-value
где
– query-option, указывает на то, какую информацию необходимо получить об AI-экстенте. Возможные значения приведены в таблице 4:
query-option | Возвращаемое значение |
---|---|
EXTNUM | Номер экстента |
STATUS | Статус экстента: EMPTY, FULL, LOCKED, BUSY |
TYPE | Тип экстента, т.е. фиксированный или переменный |
SIZE | Размер экстента в блоках по 1-му килобайту |
USED | Количество использованных блоков по 1-му килобайт |
NAME | Имя экстента (включая полный путь к нему) |
SEQUENCE | Порядковый номер экстента |
STARTDATE | Дата и время начала записи в экстент |
ALL | Вся выше перечисленная информация |
– search-option, определяет по каким признакам идентифицировать экстент в запросе. Используется в связке с параметром search-value, смотри таблицу 5.
Search-option | Search-value |
---|---|
EXTNUM | Целочисленное значение. В имени файла dbname.an, EXTNUM это n |
NAME | Символьная строка, содержащая имя экстента. Можно использовать:
|
SEQUENCE | Целочисленное значение. Порядковый номер AI-экстента. |
RFUTIL AIMAGE EXTENT FULL
Параметр AIMAGE EXTENT FULL отображает имя самого старого заполненного AI-экстента, обозначаемого как FULL. Данная информация позволяет осуществлять архивирование AI-экстентов в строгом порядке их заполнения. В случае наличия нескольких заполненных экстентов с меткой FULL, команда AIMAGE EXTENT FULL возвращает имя наиболее старого из них.
Если выполнить следующую команду на базе данных sports, то информация о самом старшем FULL-экстенте будет выглядеть так:
rfutil ./sports -C aimage extent full /dsk3/users/valeriy/lecAI/db1/sports.a1
Переключение экстентов
Процесс переключения AI-экстентов активируется в следующих ситуациях:
- Заполнение текущего экстента: При достижении максимального объёма данных в текущем AI-экстенте фиксированного размера.
- Истечение времени заполнения: Если для экстента установлено ограничение по времени заполнения в механизме AI File Management.
- Начало формирования online резервной копии: Перед началом создания резервной копии система переключается на следующий доступный AI-экстент.
После восстановления базы данных из резервной копии процесс накатывания AI-архивов возобновляется с того AI-экстента, на который было выполнено переключение, то есть с первого AI-архива, созданного после формирования резервной копии.
Для обеспечения корректного переключения экстентов перед началом создания online резервной копии необходимо удостовериться в наличии следующего по порядку AI-экстента со статусом EMPTY.
Экстенты фиксированного размера имеют заранее определённый объём, что позволяет системе автоматически определять момент их заполнения. В отличие от них, экстенты переменного размера не имеют ограничений по объёму данных. Это приводит к тому, что движок базы данных не может самостоятельно определить момент их заполнения.
Если не используется утилита RFUTIL AIMAGE NEW, экстент переменного размера будет заполняться до достижения одного из следующих условий:
- Достижение ограничения по размеру файла, установленного операционной системой.
- Достижение предела в 2 ГБ адресного пространства для OpenEdge (если не активирована поддержка больших файлов).
- Полное заполнение дискового пространства.
При достижении одного из этих условий система автоматически переключается на следующий доступный экстент со статусом EMPTY, если таковой имеется.
Если следующий экстент также заполнен (статус FULL), работа базы данных приостанавливается. Для предотвращения этой ситуации можно использовать параметр запуска базы данных After-image Stall (-aistall). При использовании этого параметра можно заархивировать старший заполненный экстент, пометить его как пустой (EMPTY) и автоматически переключить экстенты, восстанавливая активность базы данных. Также можно отключить функцию After-imaging с помощью команды RFUTIL AIMAGE AIOFF.
Важно отметить, что использование параметров -aistall и RFUTIL AIMAGE AIOFF возможно только в многопользовательском режиме.
При приостановке активности базы данных в её лог-файл записывается следующее сообщение: “Can’t switch to after-image extent filename it is full. Backup ai extent and mark it as empty (3774)”. Для возобновления работы базы данных необходимо заархивировать и пометить как пустой экстент, необходимый для переключения.
Также существует возможность вручную инициировать переключение AI-экстентов без ожидания их полного заполнения. Для этого используется команда “rfutil db-name -C aimage new”, которая изменяет статус текущего экстента на FULL, а следующего — на BUSY.
Архивирование экстентов
План выполнения архивации AI-экстентов зависит от конкретной стратегии резервного копирования базы данных в компании. Здесь будут приведены обобщенные правила, которые можно использовать в составе общего плана.
Используйте для хранения архивов AI-экстентов отдельный диск или даже отдельную машину. Это обезопасит архивы в случае повреждения промышленной системы и позволит восстановить базу данных. В противном случае вместе с машиной вы рискуете потерять все архивы экстентов и не сможете выполнить восстановление.
При одновременном резервном копировании AI-экстентов и базы данных имейте в виду, что архивы AI-экстентов базируются на предыдущей копии базы, а не на текущей.
Рассматривайте архивы AI-экстентов, как возможность восстановления базы данных на любой момент времени. Архивы должны базироваться на последней резервной копии. Нельзя исключать из плана резервного копирования и восстановления необходимость в формировании резервных копий базы данных, или сокращать частоту их формирования. Встречались случаи, когда некоторые компании полностью отказывались от выполнения резервного копирования, надеясь только на архивы AI-экстентов – ТАК ДЕЛАТЬ НЕЛЬЗЯ! Это может привести к непоправимым последствиям.
Разработайте четкий план действий для восстановления базы данных с использованием AI-экстентов. Опишите когда, кто и как должен выполнять восстановление. Оптимальный интервал времени между архивированием экстентов 15-30 минут, в зависимости от важности данных и активности в базе. Помните, с одной стороны работать с одним большим AI-экстентом проще, например, при накате его на базу, с другой стороны файлы большого размера сложнее передавать по сети на машину для хранения, надежнее и быстрее предавать файлы меньших размеров.
Так же рассмотрите возможность передачи копии AI-экстента на машину для хранения сразу же после её формирования, либо через небольшое количество времени. Это позволит исключить потерю архивов в случае сбоя дисков, на которых они располагаются. Например, если копировать архивы AI-экстентов только один раз в день в момент формирования резервной копии базы данных, то в случае сбоя все изменения, которые были сделаны с момента формирования последней резервной копии, будут потеряны. А если вы будете копировать архивы с интервалом, скажем, 15 минут, то тогда вы рискуете 15 минутами работы. Выбор за вами…
Для копирования между машинами можно использовать любые утилиты операционной системы, предназначенные для копирования файлов, но с одним условием: необходимо быть уверенным, что они гарантируют целостность передаваемых файлов. Например, при копировании с использованием протокола FTP должна быть включена поддержка копирования бинарных файлов.
Уделите большое внимание формированию имени архива AI-экстента. Имя должно содержать следующие данные:
- дату и время формирования;
- имя базы данных;
- имя и тип файла;
- инициалы сотрудника, создавшего копию.
Информативное именование копии гарантирует быструю идентификацию, следовательно, не понадобится много времени для поиска необходимой копии для восстановления.
Храните копии в легкодоступном месте, по крайней мере, в течение недели.
Храните архивные копии на другом компьютере, лучше всего, даже в другом здании.
Извлечение AI-блоков из AI-экстента, позволит вам значительно уменьшить размер хранимого файла. Это очень удобно в случае, когда необходимо пересылать файлы на другой сервер, так как файлы меньшего размера копируются быстрее.
Используйте классификатор AIMAGE EXTRACT утилиты RFUTIL для выгрузки AI-блоков. Полный синтаксис команды следующий:
rfutil db-name -C aimage extract -a ai-extent -o output-file
Для тестовой базы sports можно попробовать выполнить следующую команду и посмотреть, что получится:
$rfutil ./sports -C aimage extract -a ./sports.a1 -o ./backup/a1.bak
Итоговый файл будет аналогичен исходному файлу за исключением некоторого «мусора», и его можно использовать для наката с помощью утилиты RFUTIL.
Примечание: подобное извлечение имеет смысл только для экстентов фиксированного размера. Для экстентов переменного размера эффект будет минимальным.
Для обеспечения повторного использования текущего AI-экстента его необходимо скопировать и пометить как пустой (EMPTY). Сменить статус экстента можно с помощью классификатора AIMAGE EXTENT EMPTY утилиты RFUTIL. После получения экстентом статуса EMPTY его содержимое может быть перезаписано.
Для выполнения процедуры используйте синтаксис следующей команды:
rfutil db-name -C aimage extent empty [ extent-number | extent-path ]
Если параметры extent-number или extent-path не будут указаны, то RFUTIL автоматически пометит самый старший заполненный (FULL) экстент как EMPTY.
Для определения необходимого экстента используйте RFUTIL AIMAGE LIST или RFUTIL AIMAGE EXTENT FULL.