Восстановление базы данных из AI-архивов
Для восстановления используйте тестовую базу данных sports. Но для начала в целях чистоты эксперимента перезапустите на ней After-imaging.
Остановите базу данных:
proshut ./sports -by
Деактивируйте After-imaging командой PROUTIL AIMAGE END:
proutil ./sports -C aimage end
Очистите каталоги с AI-архивами:
rm -f aiarch1/*
Сформируйте полную резервную копию базы данных:
probkup ./sports ./backup/sports-full.bak
Активируйте After-Imaging:
proutil ./sports -C aimage begin
Активируйте AI File Management:
proutil ./sports -C aiarchiver enable
Запустите базу данных с параметрами <-aiarcdir> и <-aiarcinterval>:
proserve ./sports -aiarcdir ./aiarch1 -aiarcinterval 120
Теперь приступим непосредственно к выполнению практического примера.
Восстановите полную резервную копию базы данных sports в новую базу данных sports2:
prorest ./sports2 ./backup/sports-full.bak
Подключитесь к оригинальной базе данных sports и выполните некоторые изменения данных.
Войдите в редактор Procedure Editor:
mpro ./sports
Выполните следующий ABL-код:
Листинг: Изменение наименования клиента
FIND LAST CUSTOMER EXCLUSIVE-LOCK. CUSTOMER.NAME = "ТЕСТИРОВАНИЕ ROLL-FORWARD".
Подождите две минуты, чтобы сформировался архив AI-экстента, или выполните принудительное переключение командами RFUTIL AIMAGE NEW или RFUTIL AIARCHIVER NEXTEXTENT.
Затем тnвыполните еще одно изменение с помощью следующего ABL-кода:
Листинг: Удаление всех заказов клиента 2106
FOR EACH ORDER WHERE ORDER.CUSTNUM = 2106 EXCLUSIVE-LOCK. FOR EACH ORDERLINE OF ORDER EXCLUSIVE-LOCK. DELETE ORDERLINE. END. DELETE ORDER. END.
Подождите еще две минуты, чтобы сформировался очередной архивный файл AI-экстента.
Следующий этап – это накат полученных AI-архивов на восстановленную полную резервную копию.
Используя команду RFUTIL ROLL FORWARD накатите все AI-архивы на восстановленную базу данных sports2 с помощью простого скрипта, представленного ниже:
cd ./aiarch1 for ai in `ls -1`; do rfutil ../sports2 -C roll forward -a $ai; done
Если вы всё сделали правильно, то после наката каждого AI-файла на экран будет выводиться приблизительно следующее сообщение:
After-image dates for this after-image file: (1633) Last AIMAGE BEGIN Tue Jul 14 13:18:22 2009 (1640) Last AIMAGE NEW Tue Jul 14 13:43:25 2009 (1641) This is aimage file number 12 since the last AIMAGE BEGIN. (1642) This file was last opened for output on Tue Jul 14 13:43:25 2009. (1643) 21 notes were processed. (1634) 0 in-flight transactions. (3785) 1 transactions were started. (1635) 1 transactions were completed. (11138) At the end of the .ai file, 0 transactions were still active. (1636)
Параллельно эта же информация будет записана в лог базы данных:
T-1121424 I RFUTIL : (451) Roll forward session begin for valeriy on /dev/pts/12. T-1121424 I RFUTIL : (5326) Begin Physical Redo Phase at 0 . T-1121424 I RFUTIL : (7161) Physical Redo Phase Completed at blk 1 off 5977 upd 0. T-1121424 I RFUTIL : (13547) At end of Physical redo, transaction table size is 5940. T-1121424 I RFUTIL : (660) Beginning roll forward of after-image file /dsk3/users/valeriy/lecAI/db2/ai/dsk3~bank~users~valeriy~lecAI~db1~sports.20090714.131822.00000012.sports.a6. T-1121424 I RFUTIL : (1633) After-image dates for this after-image file: T-1121424 I RFUTIL : (1640) Last AIMAGE BEGIN Tue Jul 14 13:18:22 2009 T-1121424 I RFUTIL : (1641) Last AIMAGE NEW Tue Jul 14 13:43:25 2009 T-1121424 I RFUTIL : (1642) This is aimage file number 12 since the last AIMAGE BEGIN. T-1121424 I RFUTIL : (1643) This file was last opened for output on Tue Jul 14 13:43:25 2009. T-1121424 I RFUTIL : (1634) 21 notes were processed. T-1121424 I RFUTIL : (3785) 0 in-flight transactions. T-1121424 I RFUTIL : (1635) 1 transactions were started. T-1121424 I RFUTIL : (11138) 1 transactions were completed. T-1121424 I RFUTIL : (1636) At the end of the .ai file, 0 transactions were still active. T-1121424 I RFUTIL : (662) Roll forward completed. T-1121424 I RFUTIL : (334) rfutil -C roll forward session end.
Здесь мы использовали команду “rfutil ../sports2 -C roll forward -a <имя файла>” для поочередного наката AI-архивов. Для успешного выполнения этой команды важен порядок файлов, который должен соответствовать порядку их создания.
Следующий пример демонстрирует накат всех файлов одной командой ROLL FORWARD с применением списка AI-архивов с помощью параметра -ailist.
Для начала с помощью бэкапа создадим новую базу данных sports3:
prorest ./sports3 ./backup/sports-full.bak
Затем сформируем файл со списком AI-архивов:
ls -1 ./aiarch1/ > ailist.txt
openedge~117~wrk~testdb~sports.20250529.140826.00000001.sports.a1 openedge~117~wrk~testdb~sports.20250529.140826.00000002.sports.a2 openedge~117~wrk~testdb~sports.20250529.140826.00000003.sports.a3 openedge~117~wrk~testdb~sports.20250529.140826.00000004.sports.a4 openedge~117~wrk~testdb~sports.20250529.140826.00000005.sports.a5 openedge~117~wrk~testdb~sports.20250529.140826.00000006.sports.a6 openedge~117~wrk~testdb~sports.20250529.140826.00000007.sports.a1 openedge~117~wrk~testdb~sports.20250529.140826.00000008.sports.a2 openedge~117~wrk~testdb~sports.20250529.140826.00000009.sports.a3 openedge~117~wrk~testdb~sports.20250529.140826.00000010.sports.a4 openedge~117~wrk~testdb~sports.20250529.140826.00000011.sports.a5 openedge~117~wrk~testdb~sports.20250529.140826.00000012.sports.a6 openedge~117~wrk~testdb~sports.20250529.140826.00000013.sports.a1
Выполним накат AI-архивов на базу данных sports3:
cd aiarch1/ rfutil ../sports3 -C roll forward -ailist ../ailist.txt
На экран будут выведена следующая информация:
***Beginning processing of After-image extent /openedge/117/wrk/testdb/aiarch1/openedge~117~wrk~testdb~sports.20250529.140826.00000001.sports.a1 (17047) After-image dates for this after-image file: (1633) Last AIMAGE BEGIN Thu May 29 14:08:26 2025 (1640) This is aimage file number 1 since the last AIMAGE BEGIN. (1642) This file was last opened for output on Thu May 29 14:08:58 2025. (1643) 14:38:15: 10% of aimage file processed (1 notes processed)... (17060) 1 notes were processed. (1634) 0 in-flight transactions. (3785) 0 transactions were started. (1635) 0 transactions were completed. (11138) At the end of the .ai file, 0 transactions were still active. (1636) ***Finished processing of After-image extent /openedge/117/wrk/testdb/aiarch1/openedge~117~wrk~testdb~sports.20250529.140826.00000001.sports.a1 (17048) ***Beginning processing of After-image extent /openedge/117/wrk/testdb/aiarch1/openedge~117~wrk~testdb~sports.20250529.140826.00000002.sports.a2 (17047) After-image dates for this after-image file: (1633) Last AIMAGE BEGIN Thu May 29 14:08:26 2025 (1640) Last AIMAGE NEW Thu May 29 14:11:00 2025 (1641) This is aimage file number 2 since the last AIMAGE BEGIN. (1642) This file was last opened for output on Thu May 29 14:11:00 2025. (1643) 14:38:15: 10% of aimage file processed (2 notes processed)... (17060) 14:38:15: 20% of aimage file processed (3 notes processed)... (17060) 14:38:15: 30% of aimage file processed (4 notes processed)... (17060) 14:38:15: 40% of aimage file processed (5 notes processed)... (17060) 14:38:15: 50% of aimage file processed (6 notes processed)... (17060) 14:38:15: 60% of aimage file processed (7 notes processed)... (17060) 8 notes were processed. (1634) 0 in-flight transactions. (3785) 1 transactions were started. (1635) 1 transactions were completed. (11138) At the end of the .ai file, 0 transactions were still active. (1636) ***Finished processing of After-image extent /openedge/117/wrk/testdb/aiarch1/openedge~117~wrk~testdb~sports.20250529.140826.00000002.sports.a2 (17048)
Какой способ использовать для наката AI-архивов, одиночный с параметром -а или списком с параметром -ailist, решать вам.