查詢資料庫裡執行大於2s的語句

hurp_oracle發表於2014-11-13
使用該過程可以定期查詢出資料庫裡執行大於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  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  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部落格 ” ,連結:http://blog.itpub.net/29446986/viewspace-1331273/,如需轉載,請註明出處,否則將追究法律責任。

相關文章