Механизм After-Imaging в OpenEdge
Приложение 8 Использование PROSTRCT REORDER AI
Для демонстрации работы утилиты PROSTRCT REORDER AI необходимо заполнить все AI-экстенты (статус FULL). Для того чтобы иметь возможность заполнить все AI-экстенты без автоматического переключения, деактивируйте AI File Management.
rfutil sports -C aiarchiver disable
Здесь мы не будем использовать параметр <-aistall>, т.к. в демонстрационных целях он не нужен.
Структура AI-экстентов должна выглядеть так:
a ./sports.a1 f 2048 # a ./sports.a2 f 2048 # a ./sports.a3 f 2048 # a ./sports.a4 f 2048
Теперь запустите программу gen_ai.p в Procedure Editor, запуск необходимо осуществлять в цикле. Программа gen_ai.p описана в Листинге 3 (gen_ai.p) «Генерация изменения содержимого базы». Для этого:
- Зайдите в редактор:
mpro ./sports
- Выполните следующий ABL-код:
DEFINE VARIABLE I AS INTEGER NO-UNDO. REPEAT I = 1 TO 10: RUN ./src/gen_ai.p. END.
Из параллельной Unix-сессии с помощью команды RFUTIL AIMAGE EXTENT LIST понаблюдайте за заполнением экстентов.
Когда база данных из-за невозможности переключения экстентов будет остановлена, дважды выполните следующий скрипт (напомню, мы не использовали <-aistall>):
Листинг 4 switch_ai.sh
#!/bin/bash AIFILE=`$DLC/bin/rfutil ./sports -C aimage extent full | grep sports` AIBKP=$AIFILE TS=`date "+%y%m%d%H%M%S"` AIBKPNAME=ai`echo ${AIBKP}|tr '/' '~'`"-"$TS".bak" $DLC/bin/rfutil ./sports -C aimage extract -a $AIFILE -o ./aiarch1/$AIBKPNAME $DLC/bin/rfutil ./sports -C aimage empty
Этот скрипт заархивирует первый и второй экстенты и пометит их как EMPTY. Третий экстент так и должен остаться со статусом FULL. Запустите базу заново. Во время запуска произойдите переключение четвертого экстента в статус FULL, а первый экстент получит статус BUSY. Теперь опять запустите указанный выше ABL-код программы gen_ai.p. Дождитесь, когда база данных опять остановится. Теперь состояние AI-экстентов будет следующим:
Extent: 1 Status: Full Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a1 Size: 2040 Used: 2040 Start: Tue Jul 14 11:38:17 2009 Seqno: 5 Extent: 2 Status: Busy Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a2 Size: 2040 Used: Unknown (4778) Start: Tue Jul 14 11:40:03 2009 Seqno: 6 Extent: 3 Status: Full Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a3 Size: 2040 Used: 2040 Start: Tue Jul 14 11:34:31 2009 Seqno: 3 Extent: 4 Status: Full Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a4 Size: 2040 Used: 2040 Start: Tue Jul 14 11:34:32 2009 Seqno: 4
Видно, что второй экстент не может переключиться, поскольку третий имеет статус FULL. В данной ситуации мы эмитируем проблему, при которой по некоторым причинам не происходит переключения AI-экстентов и их архивации. Теперь задача заключается в устранении проблемы путем добавления нескольких дополнительных AI-экстентов и их реорганизации. Создайте структурный файл с описанием добавляемых AI-экстентов. Для демонстрации будет достаточно двух экстентов фиксированного размера по 10Мб. Итак, добавьте экстенты.
prostrct add sports add.st
Посмотрите теперь состояние AI-экстентов:
Extent: 1 Status: Full Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a1 Size: 2040 Used: 2040 Start: Tue Jul 14 11:55:52 2009 Seqno: 5 Extent: 2 Status: Busy Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a2 Size: 2040 Used: Unknown (4778) Start: Tue Jul 14 11:56:18 2009 Seqno: 6 Extent: 3 Status: Full Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a3 Size: 2040 Used: 2040 Start: Tue Jul 14 11:54:30 2009 Seqno: 3 Extent: 4 Status: Full Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a4 Size: 2040 Used: 2040 Start: Tue Jul 14 11:54:31 2009 Seqno: 4 Extent: 5 Status: Empty Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a5 Size: 10232 Used: 0 Start: N/A Seqno: 0 Extent: 6 Status: Empty Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a6 Size: 10232 Used: 0 Start: N/A Seqno: 0
Видно, что новые экстенты были добавлены последними, поэтому для продолжения работы необходимо, чтобы они расположились сразу после BUSY-экстента. Выполните реорганизацию:
$ prostrct reorder ai sports
Prostrct reorder ai may affect roll forward operations based on extent name. Do you want to continue? (y/n) (12235) y Prostrct organize ai finished successfully. (12184) Please update your .st file with prostrct list and get the latest AI extents states with rfutil utilities. (12186)
С помощью RFUTIL AIMAGE EXTENT LIST посмотрите, как теперь стали располагаться AI-экстенты:
Extent: 1 Status: Full Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a1 Size: 2040 Used: 2040 Start: Tue Jul 14 11:55:52 2009 Seqno: 5 Extent: 2 Status: Busy Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a2 Size: 2040 Used: Unknown (4778) Start: Tue Jul 14 11:56:18 2009 Seqno: 6 Extent: 3 Status: Empty Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a3 Size: 10232 Used: 0 Start: N/A Seqno: 0 Extent: 4 Status: Empty Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a4 Size: 10232 Used: 0 Start: N/A Seqno: 0 Extent: 5 Status: Full Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a5 Size: 2040 Used: 2040 Start: Tue Jul 14 11:54:30 2009 Seqno: 3 Extent: 6 Status: Full Type: Fixed Length Path: /dsk3/users/valeriy/lecAI/db1/sports.a6 Size: 2040 Used: 2040 Start: Tue Jul 14 11:54:31 2009 Seqno: 4
Новые экстенты были перемещены сразу за BUSY-экстентом, поэтому теперь переключение станет возможно. Запустите базу данных.
Собственно говоря, утилита PROSTRCT REORDER AI не имеет никакого смысла в offline без включенного механизма OpenEdge Replication, поскольку FULL-экстенты можно легко заархивировать и пометить как EMPTY с помощью RFUTIL AIMAGE EXTRACT и RFUTIL AIMAGE EMPTY. Смысл в PROSTRCT REORDER AI был бы при включенной репликации, когда база находится в online и экстенты имеют статус LOCKED вместо FULL, т.к. статус LOCKED не позволит отработать командам RFUTIL AIMAGE EXTRACT и RFUTIL AIMAGE EMPTY. К сожалению, работа PROSTRCT REORDER AI в online пока не предусмотрена.
Метка:After-Imaging