通過shell指令碼監控oracle session
阿新 • • 發佈:2022-05-04
最近資料庫碰到了連線緊張的問題,想通過一個指令碼對資料庫的session情況一目瞭然。 以下是自己寫的指令碼。實現的效果如下。 對session的總體情況,那些program主要在佔用,每個使用者所擁有的session(active,inactive,killed,sniped...)都能夠一目瞭然。
STATUS CNT -------- ---------- KILLED 553 SNIPED 2028 ACTIVE 44 INACTIVE 6097 ---------- sum 8722 . PROGRAM CNT STATUS ----------------------------------- ---------- -------- JDBC Thin Client 2316 INACTIVE program1@machine01 (TNS V1-V3) 659 INACTIVE program2@machine02 (TNS V1-V3) 572 INACTIVE program4@machine01 (TNS V1-V3) 462 SNIPED program3@machine01 (TNS V1-V3) 449 INACTIVE program4@machine02 (TNS V1-V3) 391 INACTIVE program1@machine01 (TNS V1-V3) 349 SNIPED JDBC Thin Client 342 SNIPED program2@machine01 (TNS V1-V3) 268 INACTIVE ---------- sum 5808 . USERNAME TOTAL_CNT ACTIVE INACTIVE KILLED SNIPED program1 program2 program3 --------------- ---------- ---------- ---------- ---------- ---------- ---------------- -------------- ----------- TESTUSER46 428 0 174 253 1 114 181 32 TESTUSER5 424 0 309 0 115 137 188 35 TESTUSER2 422 0 8 300 114 143 172 35 TESTUSER29 414 1 226 0 187 165 102 47 TESTUSER6 399 0 268 0 131 82 196 35 TESTUSER9 394 0 281 0 113 131 162 35 TESTUSER7 358 0 232 0 126 67 192 36 TESTUSER23 345 0 212 0 133 52 178 35 TESTUSER21 338 0 229 0 109 79 161 35 TESTUSER25 330 0 216 0 114 66 156 34 TSTAPP1 313 0 195 0 118 31 182 3 TESTUSER30 299 0 298 0 1 110 92 32 TESTUSER22 297 0 286 0 11 106 112 32 TSTAPP12 287 0 164 0 123 66 126 35 TESTUSER31 287 0 286 0 1 107 104 32 TESTUSER42 265 0 262 0 3 68 125 32 TESTUSER11 254 0 250 0 4 52 105 32 TESTUSER52 247 0 158 0 89 4 170 33 TSTAPP16 241 0 232 0 9 54 110 32 TSTAPP8 220 0 220 0 0 47 102 32 TSTAPP2 220 0 215 0 5 74 93 32 TESTUSER32 149 0 149 0 0 2 76 32 TESTUSER51 134 0 18 0 116 30 77 1 TESTUSER3 104 0 17 0 87 34 50 3 TESTUSER45 95 0 0 0 95 12 65 0 TESTUSER44 69 0 21 0 48 22 31 3 --附上指令碼內容: sqlplus -s $DB_CONN_STR@$SH_DB_SID <<EOF set feed off set verify off set line 132 set pages 200 col username format a15 col sql_id format a20 col sql_address format a20 col machine format a30 col osuser format a15 col logon_time format a10 col program format a35 break on report compute sum of cnt on report select status,count(*) cnt from v$session group by status; prompt . select program,cnt,status from (select program,count(*) cnt,status from v$session group by program,status order by cnt desc) where rownum<10; prompt . select username, sum(cnt) total_cnt, sum(decode(status,'ACTIVE', cnt,0)) ACTIVE, sum(decode(status,'INACTIVE', cnt,0)) INACTIVE, sum(decode(status,'KILLED', cnt,0)) KILLED, sum(decode(status,'SNIPED', cnt,0)) SNIPED, $issue_program1 "JDBC Thin Client", $issue_program2 "program1", $issue_program3 "program2" from (select program,username,status,count(*) cnt from V$SESSION group by program,username,status ) group by username having sum(cnt)>50 order by total_cnt desc; EOF exit