@@header /* * * Author : Vishal Gupta * Purpose : Display top user from ASH * Parameters : 1 - Number of MINUTES (Default 5min)) * 2 - Top Row Count Default 10) * * Revision History: * =================== * Date Author Description * --------- ------------ ----------------------------------------- * 02-Apr-13 Vishal Gupta Created * */ /************************************ * INPUT PARAMETERS ************************************/ UNDEFINE MINUTES UNDEFINE TOPROWCOUNT UNDEFINE INST_ID DEFINE MINUTES="&&1" DEFINE TOPROWCOUNT="&&2" DEFINE INST_ID='&&3' set term off COLUMN _MINUTES NEW_VALUE MINUTES NOPRINT COLUMN _TOPROWCOUNT NEW_VALUE TOPROWCOUNT NOPRINT COLUMN _INST_ID NEW_VALUE INST_ID NOPRINT SELECT DECODE('&&MINUTES','','5','&&MINUTES') "_MINUTES" , DECODE('&&TOPROWCOUNT','','5','&&TOPROWCOUNT') "_TOPROWCOUNT" , DECODE('&&INST_ID','','%','&&INST_ID') "_INST_ID" from dual; set term on PROMPT ***************************************************************** PROMPT * ASH - Top &&TOPROWCOUNT Active Sesssions (Over Last &&MINUTES min) PROMPT * PROMPT * Input Parameters PROMPT * - Minutes = '&&MINUTES' PROMPT * - Top Row Count = '&&TOPROWCOUNT' PROMPT * - Instance ID = '&&INST_ID' PROMPT ***************************************************************** COLUMN inst_id HEADING "Instance|Number" FORMAT 9999999 COLUMN sid HEADING "SID" FORMAT a6 COLUMN session_serial# HEADING "Serial#" FORMAT 9999999 COLUMN username HEADING "UserName" FORMAT a30 COLUMN program HEADING "Program" FORMAT a15 TRUNC COLUMN machine HEADING "Machine" FORMAT a20 TRUNC COLUMN percent HEADING "Activity| (%age)" FORMAT 999.99 COLUMN session_count HEADING "Active|Session|Count" FORMAT 999,999 WITH ash as (SELECT /*+ NO_MERGE */ ash.inst_id , ash.session_id , ash.session_serial# , u.username , ash.program , ash.machine , count(1) session_count FROM gv$active_session_history ash , dba_users u WHERE ash.user_id = u.user_id AND ash.session_type <> 'BACKGROUND' AND ash.inst_id LIKE '&&INST_ID' AND ash.sample_time > systimestamp - (&&MINUTES/(24*60)) GROUP BY ash.inst_id , ash.session_id , ash.session_serial# , u.username , ash.program , ash.machine ) , ash_total as (SELECT /*+ NO_MERGE */ SUM(session_count) session_total FROM ash ) SELECT * FROM ( SELECT inst_id , session_id , session_serial# , username , program , machine , LPAD(TO_CHAR(ROUND((session_count/ash_total.session_total)* 100,2),'999.99'),6) percent , ash.session_count FROM ash , ash_total ORDER BY ROUND((session_count/ash_total.session_total)* 100,2) desc ) WHERE ROWNUM <= &&TOPROWCOUNT ; @@footer