Листинг 1. Процедура query_sqlarea используется для мониторинга предложений.
create or replace procedure query_sqlarea (in_access_level number default 1000, in_order_by number default 1) is cursor cur_statements is select parsing_user_id,executions, sorts,command_type,disk_reads,sql_text, round(disk_reads/executions) ratio from sys.v_$sqlarea where disk_reads > in_access_level and executions > 0 order by decode(in_order_by,1,disk_reads/executions,2, parsing_user_id,3,executions,4,sorts,5,command_ type,6,sql_text,7,disk_reads) desc; nvl_title varchar2(100) := 'Query_sqlarea-as of '|| to_char(sysdate,'mm/dd/yy hh24:mi:ss')|| ' SQL Area Cached Statements w/ Block Reads > '|| to_char(in_access_level); begin /*********************************************************** Отображение sql-предложений, которые создают проблемы производительности Разработано на фирме TUSC Предупреждение: ни TUSC, ни автор не гарантируют, что этот исходный код свободен от неточностей. При обнаружении каких-либо ошибок, просьба сообщить в TUSC по телефону 630-960-2909. ***********************************************************/ htp.htmlOpen; htp.headOpen; htp.title(nvl_title); htp.headClose; htp.bodyOpen; htp.header(1,nvl_title); htp.hr; htp.formOpen('query_sqlarea'); htp.print('Min Block Reads: '||htf.formText('in_access_level' ,10,10,to_char(in_access_level))); htp.formHidden('in_order_by',to_char(in_order_by)); htp.formSubmit(NULL,'Set Access Level'); htp.formClose; htp.hr; htp.tableOpen('BORDER=1'); htp.tableRowOpen; htp.tableHeader(htf.anchor('query_sqlarea?in_access_level=' ||to_char(in_access_level)||'&'||'in_order_by=2','Id')); htp.tableHeader(htf.anchor('query_sqlarea?in_access_level='||to _char(in_access_level)||'&'||'in_order_by=3','Executions')); htp.tableHeader(htf.anchor('query_sqlarea?in_access_level='||to _char(in_access_level)||'&'||'in_order_by=4','Sorts')); htp.tableHeader(htf.anchor('query_sqlarea?in_access_level='||to _char(in_access_level)||'&'||'in_order_by=5','Cmd Type')); htp.tableHeader(htf.anchor('query_sqlarea?in_access_level='||to _char(in_access_level)||'&'||'in_order_by=7','Block Reads')); htp.tableHeader(htf.anchor('query_sqlarea?in_access_level='||to _char(in_access_level)||'&'||'in_order_by=1','Block Reads/Executions')); htp.tableHeader('Statement'); htp.tableRowClose; for rec_statements in cur_statements loop htp.tableRowOpen; htp.tableData(rec_statements.parsing_user_id); htp.tableData(rec_statements.executions); htp.tableData(rec_statements.sorts); htp.tableData(rec_statements.command_type); htp.tableData(rec_statements.disk_reads); htp.tableData(rec_statements.ratio); htp.tableData(rec_statements.sql_text); htp.tableRowClose; end loop; htp.tableClose; htp.bodyClose; htp.htmlClose; end; /