Не думаю, что ILO поможет (она делает больше, чем просто устанавливает модуль и действие и регистрирует время где-нибудь?), Поскольку Cade Roux придется модифицировать каждый пакет и функцию в базе данных.
Один из вариантов - включить трассировку в базе данных,
ALTER SYSTEM SET sql_trace = true SCOPE=MEMORY;
и используйте команду script, чтобы получить уникальный список всех имен выполненных пакетов, хотя ПРЕДУПРЕЖДЕНИЕ - это сгенерирует много выходных данных и очень быстро заполнит дисковое пространство - возможно, вы захотите создать файл из процедур, выполняемых каждый день, а затем удалите файлы trc и затем объедините результаты вместе, чтобы определить, какие из них используются.
Кроме того, вам необходимо убедиться, что размер файла трассировки не ограничен, что может помешать его записи в журнал всего, а также что у вас достаточно места на диске, и, поскольку вы не заинтересованы во времени выполнения, вы также можете отключить timed_statistics, чтобы уменьшить сумма регистрации.
alter system set max_dump_file_size=unlimited;
alter system set timed_statistics=false;
Если я посмотрю на необработанные файлы трассировки, созданные из трассировки Oracle, каждый вызов процедуры вызова пакета для конкретного приложения выглядит следующим образом
=====================
PARSING IN CURSOR #2 len=69 dep=0 uid=102 oct=47 lid=102 tim=1316845390611021 hv=273704950
ad='b0d4c728' sqlid='01qnrr4850tzq'
BEGIN REIM_MATCH_SQL.INIT_SUMMARY_MATCH(:1, :2, :3, :4, :5, :6); END;
END OF STMT
PARSE #2:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,plh=0,tim=1316845390611021
так что вы можете использовать grep для получения списка вызовов пакетов, подобных этому, в каталоге (возможно, вам придется немного подправить вывод в зависимости от используемой ОС, если вывод tkprof отличается)
find . -name "*.trc" -exec grep "BEGIN " {} \; | cut -d" " -f4 | cut -d"(" -f1 | sort -u > ~/called_procedures.txt
Это не работает с функциями, так как их можно вызывать в середине операторов SQL, но я думаю, что для процедур все должно быть в порядке. Это создаст файл в вашем домашнем каталоге, содержащий уникальный список вызовов процедур, которые выполнялись с тех пор, как вы включили трассировку.
Я выполнил это в каталоге, содержащем 9818 файлов трассировки общим объемом 19 ГБ на диске, и это заняло 10 минут на тестовом компьютере под управлением Oracle Enterprise Linux 5 с 2 ядрами и 12 ГБ памяти - эти файлы трассировки только из повторных тестовых прогонов одной программы, чтобы вы могли представить, как быстро они будут созданы, если вы создаете все для рабочей машины.
Затем вы можете получить список всех пакетов / процедур в базе данных из sqlplus для конкретной схемы, которая вас интересует
set heading off
set trimspool on
set pagesize 0
set feedback off
spool all_procedures.txt
SELECT DISTINCT p.object_name||'.'||p.procedure_name
FROM all_procedures p
JOIN all_objects o ON (o.owner = p.owner AND o.object_name = p.object_name AND o.object_type =
where p.owner='&owner'
order by 1
spool off
и, наконец, проведите различие между ними, чтобы получить список кандидатов
diff all_procedures.txt called_procedures.txt
Не забудьте отключить трассировку, когда закончите
ALTER SYSTEM SET sql_trace = false SCOPE=MEMORY;
Кроме того, вы должны быть осторожны с процедурами, которые могут выполняться только в определенные периоды, такие как конец месяца или конец года - они могут показаться неиспользуемыми, но вы не можете быть уверены, если каждый бизнес-процесс не будет завершен в то время, когда вы ведем мониторинг.
Надеюсь, это поможет.