$ cat run_any_sql_10sec.ksh 										
#!/bin/ksh                                                        
                                                                  
SQL_FILE=$1                                                       
TMP_FILE=/tmp/$$.out                                              
TMP_FILE_ALL=/tmp/$$.all.out                                      
                                                                  
for i in {1..10000}                                               
do                                                                
${ORACLE_HOME}/bin/sqlplus -s -l /nolog << EOF > ${TMP_FILE}      
Connect / as sysdba                                               
SET SERVEROUT ON ECHO ON                                          
COL SEGMENT_NAME FOR A30                                          
COL TABLE_NAME FOR A30                                            
COL COLUMN_NAME FOR A30                                           
COL OWNER FOR A10                                                 
COL SQL_TEXT FOR A45                                              
COL INDEX_NAME FOR A30                                            
select to_char(sysdate,'DD-MON-YYYY HH24:MI:SS') from dual;       
start ${SQL_FILE};                                                
EXIT;                                                             
EOF                                                               
cat ${TMP_FILE}  >> ${TMP_FILE_ALL}                               
cat ${TMP_FILE}                                                   
sleep 10                                                          
done                                                              
 
 
chmod 754 run_any_sql 
./run_any_sql waits.sql  
 
##########
waits.sql
 
set linesize 300 
select inst_id, event, count(*), avg(Wait_time), max(wait_time) 
  from gv$session_wait  
  where event not in (  
'HS message to agent',  
'SQL*Net break/reset to client', 
'SQL*Net message from client', 
'SQL*Net message to client', 
'jobq slave wait', 
'pipe get', 
'pmon timer', 
'queue messages', 
'rdbms ipc message', 
'smon timer', 
'wait for unread message on broadcast channel', 
'wakeup time manager', 
'ASM background timer', 
'DIAG idle wait', 
'PX Deq: Execute Reply', 
'PX Deq: Execution Msg', 
'PX Deq: reap credit', 
'Streams AQ: qmn coordinator idle wait', 
'Streams AQ: qmn slave idle wait', 
'Streams AQ: waiting for messages in the queue', 
'Streams AQ: waiting for time management or cleanup tasks', 
'class slave wait' 
) 
and wait_class<>'Idle' 
group by inst_id, event 
order by 1,3;  
 
########
 
rowlocks.sql
 
col obj for a85 
col ses_cnt for 9999 
col info for a35 
set lines 160 
set trimspool on 
 
select  
obj,  
count(*) as ses_cnt,  
min(sql_hash_value) hash,  
cmd ||' : '|| module "INFO" 
 from 
  (select decode(sign(row_wait_obj#), 1, 
                (select object_name from dba_objects where object_id=row_wait_obj# and data_object_id is not null) 
                ,-1, 'UNKNOWN', 'UNKNOWN') || ':' || event || ':' || p2 || ':' || p3 || ':' || 
                chr(bitand(p1, -16777216)/16777215) || chr(bitand(p1, 16711680)/65535) || ':''' || 
               decode(sign(row_wait_obj#), 1, dbms_rowid.rowid_create(1, (select data_object_id from dba_objects 
                                          where object_id = row_wait_obj# and data_object_id is not null), 
                                       row_wait_file#, row_wait_block#, row_wait_row#), 'No rowid') || '''' as obj, 
       decode(command, 2, 'INSERT', 6, 'UPDATE', 7, 'DELETE', 182, 'UPDATE INDEXES', 3, 'SELECT FOR UPDATE', command) as cmd, 
       sql_hash_value, 
       module 
  from 
  v$session 
  where 
  status = 'ACTIVE' and 
  lockwait is not null 
  ) 
group by obj, cmd||' : '||module 
order by 2; 
 
#########
 
locktree.sql
 
set lines 199 
col sql_id for a13 
col sid for a18 
col status for a10 
col obj_info for a90 
col wait_sec for 99999 
 
select 
sid, sql_id, seconds_in_wait wait_sec, 
decode(sign(row_wait_obj#), 1, 
                (select object_name from dba_objects where object_id=row_wait_obj# and data_object_id is not null) 
               ,-1, 'Null', 'Null') ||':'|| cmd ||':'|| event#||':'||nvl(substr(event, 1, 15), 'No Event') ||':'|| 
               nvl(p1,0)||':'||nvl(p2, 0) ||':'|| nvl(p3, 0) ||':'|| info "OBJ_INFO" 
from 
( 
 select 
 sid, sql_id, status, seconds_in_wait, 
 sid2, sid3, 
 max(seconds_in_wait) over (partition by sid2) ctime, 
 count(*) over (partition by sid2) cnt, 
 row_wait_obj#, 
 cmd, event, event#, p1, p2, p3, "INFO" 
 from 
 ( 
  select 
  lpad(' ', level-1)||sid sid, decode(sql_id, null, prev_sql_id, sql_id) sql_id, status, 
  seconds_in_wait, 
  blocking_session, 
  blocking_session_status, 
  connect_by_root sid sid2, 
  sys_connect_by_path(sid,':') sid3, 
  row_wait_obj#, 
  decode(command, 2, 'INSERT', 6, 'UPDATE', 7, 'DELETE', 182, 'UPDATE INDEXES', 3, 'SELECT FOR UPDATE', command) as cmd, 
  event, event#, 
  p1, 
  p2, 
  p3, 
  status||':'||machine||':'||substr(module, 1, 10) "INFO" 
  from v$session 
  where taddr is not null or blocking_session  <> 0 
  connect by prior sid=blocking_session 
  start with blocking_session is null 
 ) 
) 
where cnt > 1 
order by ctime desc, sid2,  length(sid3), seconds_in_wait desc; 
 
 
 
##########
 
blocking_sessions.sql
 
set linesize 300 
select B.USERNAME ||' ('||B.SID||','||B.SERIAL#||',@'||B.INST_ID||') is Currently '||B.STATUS||' for last '||B.LAST_CALL_ET||' Sec and it''s BLOCKING user '|| W.USERNAME|| ' ('|
|W.SID||','||W.SERIAL#||',@'||W.INST_ID||')' from 
(select INST_ID,SID,SERIAL#,USERNAME,STATUS,BLOCKING_INSTANCE,BLOCKING_SESSION, LAST_CALL_ET from gv$session where BLOCKING_SESSION >0) W, 
(select INST_ID,SID,SERIAL#,USERNAME,STATUS,LAST_CALL_ET from gv$session ) B 
where W.BLOCKING_INSTANCE=B.INST_ID and W.BLOCKING_SESSION=B.SID; 
 
############
 
active_sessions.sql
 
select 
(select 'Active Sessions in MY DB Inst 1 : '||count(*) from gv$session where status='ACTIVE' and INST_ID=1 and sql_id is not null ) as Active_Sessions 
from dual                  
union                      
select                     
(select 'Active Sessions in MY DB Inst 2 : '||count(*) from gv$session where status='ACTIVE' and INST_ID=2 and sql_id is not null ) as c2 
from dual                   
union                       
select                      
(select 'Active Sessions in MY DB Inst 3 : '||count(*) from gv$session where status='ACTIVE' and INST_ID=3 and sql_id is not null ) as c2 
from dual                   
union                       
select                      
(select 'Active Sessions in MY DB Inst 4 : '||count(*) from gv$session where status='ACTIVE' and INST_ID=4 and sql_id is not null ) as c2 
from dual; 
 
############
 
TOPSQL.sql
 
select sql_id,username,count(*) from v$session where type='USER' and status='ACTIVE' group by sql_id,username order by 3; 
 
##########
 
Userconnections.sql
 
 select USERNAME,status,count(*) from v$session where username not in ('SYSTEM','SYS') and username is not null group by USERNAME,status order by 2; 
 
##########
 
CPU ::
 
for ((;;)) do sar 2 30; sleep 10; done
 
##########
 
Memory 
 
free -m -s 5
 
#########