Механизм After-Imaging в OpenEdge
Приложение 1 Создание базы данных с добавлением AI-экстентов
В этом практическом занятии рассмотрены два примера создания AI-экстентов. Первый, когда AI-экстенты добавляются в момент создания базы данных. Второй, когда AI-экстенты добавляются в уже существующую базу.
1.1 Создание новой базы данных с AI-экстентами
Перед созданием новой базы данных необходимо подготовить структурный файл, который будет содержать AI-экстенты.
Для этого:
-
- Перейдите в каталог, в котором хотите поместить будущую базу данных.Создайте в этом каталоге структурный файл с именем db-name.st, где db-name – это имя базы данных. Опишите в созданном файле все необходимые области хранения данных (если имеется готовый ST-файл, то перейдите к следующему шагу).Добавьте строки с описанием AI-экстентов как здесь показано:
a . f 2048 # a . f 2048 # a . f 2048
- Перейдите в каталог, в котором хотите поместить будущую базу данных.Создайте в этом каталоге структурный файл с именем db-name.st, где db-name – это имя базы данных. Опишите в созданном файле все необходимые области хранения данных (если имеется готовый ST-файл, то перейдите к следующему шагу).Добавьте строки с описанием AI-экстентов как здесь показано:
Вместо точки можно указать конкретное местоположение AI-экстентов. В данном случае создаются AI-экстенты фиксированного размера (размер 2048 взят исключительно для демонстрационных целей). Если необходимо создать экстенты переменного размера, то нужно убрать параметры <f 2048>.
-
- Приступите к созданию базы. Для нашего примера воспользуйтесь базой $DLC/sports2000, скопированной в свой каталог:
$ procopy $DLC/sports2000 ./sports
На экран будут выведены следующие сообщения:
Procopy session begin for valeriy on /dev/pts/40. (451) Formatting extents: size area name path name 8 Primary Recovery Area /lecAI/db1/sports.b1 00:00:00 16 Schema Area /lecAI/db1/sports.d1 00:00:00 80 Employee /lecAI/db1/sports_7.d1 00:00:00 16 Employee /lecAI/db1/sports_7.d2 00:00:00 160 Inventory /lecAI/db1/sports_8.d1 00:00:00 16 Inventory /lecAI/db1/sports_8.d2 00:00:00 80 Cust_Data /lecAI/db1/sports_9.d1 00:00:00 16 Cust_Data /lecAI/db1/sports_9.d2 00:00:00 80 Cust_Index /lecAI/db1/sports_10.d1 00:00:00 16 Cust_Index /lecAI/db1/sports_10.d2 00:00:00 320 Order /lecAI/db1/sports_11.d1 00:00:00 16 Order /lecAI/db1/sports_11.d2 00:00:00 80 Misc /lecAI/db1/sports_12.d1 00:00:00 16 Misc /lecAI/db1/sports_12.d2 00:00:00 512 After Image Area 1 /lecAI/db1/sports.a1 00:00:00 512 After Image Area 2 /lecAI/db1/sports.a2 00:00:00 512 After Image Area 3 /lecAI/db1/sports.a3 00:00:00 Copying /users/valeriy/101C/sports2000 to ./sports... (6715) Start writing data blocks. (6718) 14:39:27 10 Percent complete. 14:39:27 20 Percent complete. 14:39:27 30 Percent complete. 14:39:27 40 Percent complete. 14:39:27 50 Percent complete. 14:39:27 60 Percent complete. 14:39:27 70 Percent complete. 14:39:27 80 Percent complete. 14:39:27 90 Percent complete. 14:39:27 100 Percent complete. 1347 blocks copied. (6720) ...Copy complete. (6722) Database copied from /users/valeriy/101C/sports2000. (1365) Procopy session end. (334)
- После создания базы данных выполните обновление структурного файла командой PROSTRCT LIST:
$ prostrct list sports
Area Name: Control Area, Type 6, Block Size 4096, Extents 1, Records/Block 32, Cluster Size 1 Ext # 1, Type VARIABLE, Size 32 KByte, Name: /lecAI/db1/sports.db Area Name: Primary Recovery Area, Type 3, Block Size 8192, Extents 1 Ext # 1, Type VARIABLE, Size 2176 KByte, Name: /lecAI/db1/sports.b1 Area Name: Schema Area, Type 6, Block Size 4096, Extents 1, Records/Block 32, Cluster Size 1 Ext # 1, Type VARIABLE, Size 1216 KByte, Name: /lecAI/db1/sports.d1 Area Name: Employee, Type 6, Block Size 4096, Extents 2, Records/Block 32, Cluster Size 1 Ext # 1, Type FIXED , Size 320 KByte, Name: /lecAI/db1/sports_7.d1 Ext # 2, Type VARIABLE, Size 64 KByte, Name: /lecAI/db1/sports_7.d2 Area Name: Inventory, Type 6, Block Size 4096, Extents 2, Records/Block 32, Cluster Size 1 Ext # 1, Type FIXED , Size 640 KByte, Name: /lecAI/db1/sports_8.d1 Ext # 2, Type VARIABLE, Size 640 KByte, Name: /lecAI/db1/sports_8.d2 Area Name: Cust_Data, Type 6, Block Size 4096, Extents 2, Records/Block 32, Cluster Size 1 Ext # 1, Type FIXED , Size 320 KByte, Name: /lecAI/db1/sports_9.d1 Ext # 2, Type VARIABLE, Size 64 KByte, Name: /lecAI/db1/sports_9.d2 Area Name: Cust_Index, Type 6, Block Size 4096, Extents 2, Records/Block 32, Cluster Size 1 Ext # 1, Type FIXED , Size 320 KByte, Name: /lecAI/db1/sports_10.d1 Ext # 2, Type VARIABLE, Size 64 KByte, Name: /lecAI/db1/sports_10.d2 Area Name: Order, Type 6, Block Size 4096, Extents 2, Records/Block 32, Cluster Size 1 Ext # 1, Type FIXED , Size 1280 KByte, Name: /lecAI/db1/sports_11.d1 Ext # 2, Type VARIABLE, Size 1344 KByte, Name: /lecAI/db1/sports_11.d2 Area Name: Misc, Type 6, Block Size 4096, Extents 2, Records/Block 32, Cluster Size 1 Ext # 1, Type FIXED , Size 320 KByte, Name: /lecAI/db1/sports_12.d1 Ext # 2, Type VARIABLE, Size 64 KByte, Name: /lecAI/db1/sports_12.d2 Area Name: After Image Area 1, Type 7, Block Size 8192, Extents 1 Ext # 1, Type FIXED , Size 2048 KByte , Name: /lecAI/db1/sports.a1 Area Name: After Image Area 2, Type 7, Block Size 8192, Extents 1 Ext # 1, Type FIXED , Size 2048 KByte, Name: /lecAI/db1/sports.a2 Area Name: After Image Area 3, Type 7, Block Size 8192, Extents 1 Ext # 1, Type FIXED , Size 2048 KByte, Name: /lecAI/db1/sports.a3
- Приступите к созданию базы. Для нашего примера воспользуйтесь базой $DLC/sports2000, скопированной в свой каталог:
Обратите внимание на размер последних AI-экстентов, который равен двум мегабайтам (Size 2048 KByte), т.е. именно такой, каким мы его указали в ST-файле. Если бы мы использовали экстенты переменного размера, то мы бы увидели следующую картину:
Area Name: After Image Area 1, Type 7, Block Size 8192, Extents 1 Ext # 1, Type VARIABLE, Size 128 KByte, Name: /lecAI/db1/sports.a1 Area Name: After Image Area 2, Type 7, Block Size 8192, Extents 1 Ext # 1, Type VARIABLE, Size 128 KByte, Name: /lecAI/db1/sports.a2 Area Name: After Image Area 3, Type 7, Block Size 8192, Extents 1 Ext # 1, Type VARIABLE, Size 128 KByte, Name: /lecAI/db1/sports.a3
Размер 128 килобайт (Size 128 Kbyte) – это стандартное начальное значение для экстентов переменного размера.
- Удалите базу данных sports с помощью следующей команды:
$ prodel ./sports
1.2 Добавление AI-экстентов к существующей базе данных
Для добавления AI-экстентов к существующей базе данных необходимо:
- Очистите каталог от всего «мусора», оставшегося от предыдущего примера, включая ST-файл, командой:
$ rm -f ./*.*
- Скопируйте в этот каталог базу $DLC/sports2000:
$ procopy $DLC/sports2000 ./sports
Теперь у нас есть новая база данных, готовая для эксперимента. Представим себе, что это промышленная база и нам нужно добавить в нее AI-экстенты. У нас есть два пути: сделать это в offline или в online. Рассмотрим оба варианта.
Для обоих вариантов создайте структурный файл, с именем add.st, и опишите в нем строки с информацией об AI-экстентах:
a . f 2048 # a . f 2048 # a . f 2048
Если добавление экстентов будет выполняться в offline, то выполните следующие команды:
-
- проверьте правильность формата файла add.st:
prostrct add ./sports ./add.st -validate
-
- если формат верный, то выполните:
prostrct add ./sports ./add.st
-
- обновите структурный файл:
prostrct list sports
Внимание! Всегда после изменения структуры базы данных выполняйте обновление структурного файла db-name.st с помощью команды PROSTRCT LIST.
Если добавление AI-экстентов нужно выполнить в online, то запустите базу данных sports, предположим, что она работает уже давно::
proserve ./sports
Воспользовавшись тем же структурным файлом add.st добавьте AI-экстенты в online следующими командами:
-
- проверьте правильность формата файла add.st
prostrct addonline ./sports ./add.st -validate
-
- если формат верный, то выполните
prostrct addonline ./sports ./add.st
-
- обновите структурный файл
prostrct list sports
Теперь у вас есть база данных с шестью AI-экстентами фиксированного размера по два мегабайта каждый.
Метка:After-Imaging