Соcтавление списка таблиц и индексов для реорганизации в данном запросе происходит с использованием хранимых процедур reorgchk_tb_stats, reorgchk_ix_stats соответственно (эквивалент команды REORGCHK CURRENT STATISTICS).
При реорганизации таблиц внимание акцентируется на таблицах, содержащих поля типов BLOB,CLOB, LONG VARCHAR и тд и тп. Процесс реорганизации данных таблиц будет протекать только при указании опции LONGLOBDATA. В остальном, как обычно: оффлайн-реорганизация (то есть, отсутствие полного доступа к таблице), используется временное табличное пространство (в данном случае TEMP32) в целях избежания переполнения основного табличного пространства. При подготовке реорганизации индексов уделяется значение формул F4-F8 (в таблице SESSION.IX_STATS данные значения хранятся в полях F4-F8 соответственно). Разъяснение по этим формулам и их значениям описано в справочной документации по команде REORGCHK.
Вот и сам скрипт, генерирующий набор инструкций для реорганизации таблиц.
--сначала реорганизуем таблицы, содержащих BLOB и LONG-поля
call reorgchk_tb_stats('T', 'ALL');
---------------------------------------------------------
select 'reorg table '||trim(table_schema)||'.'||trim(table_name)||
' allow no access longlobdata use temp32;'
from session.tb_stats
join syscat.columns on table_schema=tabschema
and table_name=tabname
where reorg like '%*%' and (typename like 'LONG%' or typename like '%LOB%')
---------------------------------------------------------
union
---------------------------------------------------------
--затем все остальное
select 'reorg table '||trim(table_schema)||'.'||trim(table_name)||
' allow no access use temp32;'
from session.tb_stats
join syscat.columns on table_schema=tabschema
and table_name=tabname
where reorg like '%*%' and (typename not like 'LONG%' or typename not like '%LOB%');
А ниже скрипт, генерирующий набор инструкций для реорганизаций индексов
call reorgchk_ix_stats('T', 'ALL');
---------------------------------------------------------
select 'reorg table '||trim(table_schema)||'.'||trim(table_name)||
' index '||trim(table_schema)||'.'||trim(index_name)||
' indexscan allow no access uses temp32;'
from session.ix_stats where F5< 80 and F4 !=1
---------------------------------------------------------
union
---------------------------------------------------------
select 'reorg indexes all for table '||trim(table_schema)||'.'|| trim(table_name)||';'
from session.ix_stats where (F5 != -1 and F5<50) or F6 > 100
---------------------------------------------------------
union
---------------------------------------------------------
select 'reorg indexes all for table '||trim(table_schema)||'.'|| trim(table_name)||' cleanup only all;' from session.ix_stats where F7>20 or F8>20;
При реализации данного решения, основная идея была почерпнута у rpillai, и небольшие подробности были взяты в статье "Automatic table maintenance in DB2, Part 2: Automatic table and index reorganization in DB2 for Linux, UNIX, and Windows"