使用该过程可以定期查找出数据库里执行大于2s的语句
CREATE OR REPLACE procedure SYS.versiononline_larges2s_sql is
version_table varchar2(50);
TEMPCOUNT NUMBER;
T_TABLE VARCHAR2(100) := 'LARGE2S_TABLE02';
v_sql01 VARCHAR2(2000);
v_sql02 VARCHAR2(2000);
v_sql03 VARCHAR2(2000);
BEGIN
select COUNT(*)
into TEMPCOUNT
from dba_tables
where table_name = T_TABLE;
If TEMPCOUNT > 0 Then
v_sql01 := ' insert into ' || T_TABLE ||
' select *
from (SELECT A.SQL_ID,
A.sql_fulltext,
A.FIRST_LOAD_TIME,
A.ELAPSED_TIME,
A.ELAPSED_TIME / decode(A.EXECUTIONS, 0, 1, A.EXECUTIONS) EE,
A.EXECUTIONS,
B.MACHINE,
B.PROGRAM,
A.LAST_ACTIVE_TIME,
A.FORCE_MATCHING_SIGNATURE,
A.EXACT_MATCHING_SIGNATURE
FROM V$SQL A, V$ACTIVE_SESSION_HISTORY B
WHERE A.SQL_ID = B.SQL_ID
and B.machine in (''c4w28'',''tcsm1'')
and a.first_load_time between
TO_DATE(''20141105 09 :00 :00'',
''YYYYMMDD HH24 :MI :SS'') AND
TO_DATE(''20141115 17 :59 :00'',
''YYYYMMDD HH24 :MI :SS'')
AND A.LAST_ACTIVE_TIME BETWEEN
TO_DATE(''20141105 09 :00 :00'',
''YYYYMMDD HH24 :MI :SS'') AND
TO_DATE(''20141115 17 :59 :00'',
''YYYYMMDD HH24 :MI :SS'')
AND B.PROGRAM NOT LIKE ''sqlplus%''
and B.PROGRAM NOT LIKE ''plsqlde%''
AND B.PROGRAM NOT LIKE ''oracle@%''
and A.SQL_ID NOT IN (SELECT SQL_ID
FROM ' ||
T_TABLE || ')
order by EE DESC)
WHERE EE > 2000000 ';
EXECUTE IMMEDIATE v_sql01;
dbms_output.put_line(v_sql01);
COMMIT;
v_sql02:='delete sys.'||T_TABLE||' a where rowid<(select max(rowid) from sys.'||T_TABLE||' b where a.sql_id=b.sql_id)';
v_sql03:='delete sys.'||T_TABLE||' a where FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE';
EXECUTE IMMEDIATE v_sql02;
commit;
EXECUTE IMMEDIATE v_sql03;
COMMIT;
else
execute immediate 'create table sys.'||T_TABLE||' (sql_id VARCHAR2(13),sql_fulltext CLOB,first_load_time VARCHAR2(38),elapsed_time number,
ee number,executions number,machine VARCHAR2(64),program VARCHAR2(48),last_active_time DATE,FORCE_MATCHING_SIGNATURE number,EXACT_MATCHING_SIGNATURE number) tablespace users';
v_sql01 := ' insert into ' || T_TABLE ||
' select *
from (SELECT A.SQL_ID,
A.sql_fulltext,
A.FIRST_LOAD_TIME,
A.ELAPSED_TIME,
A.ELAPSED_TIME / decode(A.EXECUTIONS, 0, 1, A.EXECUTIONS) EE,
A.EXECUTIONS,
B.MACHINE,
B.PROGRAM,
A.LAST_ACTIVE_TIME,
A.FORCE_MATCHING_SIGNATURE,
A.EXACT_MATCHING_SIGNATURE
FROM V$SQL A, V$ACTIVE_SESSION_HISTORY B
WHERE A.SQL_ID = B.SQL_ID
and B.machine in (''c4w28'',''tcsm1'')
AND A.FIRST_LOAD_TIME BETWEEN
TO_DATE(''20141105 09 :00 :00'',
''YYYYMMDD HH24 :MI :SS'') AND
TO_DATE(''20141115 17 :59 :00'',
''YYYYMMDD HH24 :MI :SS'')
AND A.LAST_ACTIVE_TIME BETWEEN
TO_DATE(''20141105 09:00:00'',
''YYYYMMDD HH24:MI:SS'') AND
TO_DATE(''20141115 17 :59 :00'',
''YYYYMMDD HH24 :MI :SS'')
AND B.PROGRAM NOT LIKE ''sqlplus%''
and B.PROGRAM NOT LIKE ''plsqlde%''
AND B.PROGRAM NOT LIKE ''oracle@%'' and A.SQL_ID NOT IN (SELECT SQL_ID
FROM ' ||
T_TABLE || ')
order by EE DESC)
WHERE EE > 2000000';
EXECUTE IMMEDIATE v_sql01;
COMMIT;
v_sql02:='delete sys.'||T_TABLE||' a where rowid<(select max(rowid) from sys.'||T_TABLE||' b where a.sql_id=b.sql_id)';
v_sql03:='delete sys.'||T_TABLE||' a where FORCE_MATCHING_SIGNATURE != EXACT_MATCHING_SIGNATURE';
EXECUTE IMMEDIATE v_sql02;
commit;
EXECUTE IMMEDIATE v_sql03;
COMMIT;
end if;
end versiononline_larges2s_sql;
/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29446986/viewspace-1331273/
,如需转载,请注明出处,否则将追究法律责任。