Добавление экстентов в офлайн
Если у вас есть возможность остановить базу данных, то добавить новые экстенты можно в офлайн. Для этого применяется команда prostrct add.
Как вы уже знаете, рекомендуется, чтобы последний экстент в области хранения всегда был переменного размера, это обеспечить защиту базы данных от неожиданного переполнения области хранения. При добавлении экстента в офлайн рекомендуется удалить последний экстент переменного размера, а затем добавить один экстент фиксированного размера и один экстент переменного размера.
Если в экстенте переменного размера уже хранятся данные, т.е. переменный экстент уже начал заполняться, то вы не должны его удалять! В этом случае необходимо просто добавить один экстент фиксированного размера и один переменного размера. При этом СУБД OpenEdge автоматически увеличит размер текущего экстента переменного размера, сделав его кратным 16 в большую сторону, и зафиксирует этот размер. Только после этого будут добавлены новые экстенты.
Для добавления экстентов в офлайн необходимо:
1. Создать структурный файл (.st) с описанием новых экстентов. Процесс создания структурного файла для добавления экстентов в офлайн такой же, как процесс добавления экстентов в онлайн.
2. Проверить структурный файл командой prostrct add -validate.
3. Остановить базу данных, если она в онлайн.
4. Выполнить усечение файла Before-Image командой proutil truncate bi.
Во время усечения файла Before-Image СУБД OpenEdge:
- Выполняет процесс Crash Recovery.
- Дожидается, когда операционная системы успешно сбросит кэш.
- Используя информацию из BI-файла обновляет базу данных и AI-файлы.
- Проверяет, что изменённые данные успешно записаны на диск.
- Выполняет усечение BI-файла до его исходного размера.
- Устанавливает указатель на начало файла Before-Image.
После завершения процесса усечения BI-файл становится меньше, а база данных будет находиться в согласованном состоянии и готова к добавлению новых экстентов.
Синтаксис команды усечения файла Before-Image:
proutil <db-name> -C truncate bi
5. Удалить последний экстент переменного размера, если он ещё не начал заполняться, командой prostrct remove. После усечения BI-файла необходимо удалить последний экстент переменного размера в области хранения, в которую предполагается добавление новых экстентов.
Вы не сможете навредить базе данных удалением переменного экстента, частично заполненного данными, так как СУБД OpenEdge не позволит этого сделать и выдаст соответствующее сообщение.
В процессе удаления экстента помните о следующем:
- За один раз можно удалить только последний экстент в области хранения. Например, если область имеет три экстента (.d1, .d2 и .d3), то будет удалён только экстент .d
- Удалить можно только пустой экстент, т.е. экстент, не содержащий данные.
- Будьте осторожны, после удаления экстента переменного размера сразу добавьте новые экстенты фиксированного и переменного размера. Так как после удаления переменного экстента в области останется последний экстент фиксированного размера, и если вы не добавите новые экстенты до старта базы данных, то фиксированный экстент может быстро заполниться и СУБД OpenEdge выполнит аварийный останов базы данных.
Синтаксис команды для удаления экстента:
prostrct remove <db-name> <extent-token> <area-name>
6. Добавить экстенты командой prostrct add.
7. Проверить добавление экстентов командой prostrct list.