通過shell指令碼監控oracle session
最近資料庫碰到了連線緊張的問題,想通過一個指令碼對資料庫的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 <
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
以下是自己寫的指令碼。實現的效果如下。
對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 <
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-776143/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【shell】磁碟監控指令碼指令碼
- 透過shell指令碼監控日誌切換頻率指令碼
- Shell 系統資訊監控指令碼指令碼
- 監控磁碟使用率的shell指令碼指令碼
- shell指令碼:監控MySQL服務是否正常指令碼MySql
- Shell指令碼監控MySQL主從狀態指令碼MySql
- [ Shell ] 通過 Shell 指令碼匯出 CDL 網表指令碼
- shell指令碼監控啟動停止weblogic服務指令碼Web
- 通過shell指令碼防止埠掃描指令碼
- [ Shell ] 通過 Shell 指令碼匯出 GDSII/OASIS 檔案指令碼
- 使用Shell指令碼程式監控網站URL是否正常指令碼網站
- 通過shell指令碼 批量新增使用者指令碼
- 通過shell指令碼批量操作mysql資料庫指令碼MySql資料庫
- 分享實用監控指令碼:使用Shell檢查程式是否存在指令碼
- 利用 Shell 指令碼來監控 Linux 系統的記憶體指令碼Linux記憶體
- 用於自動監控磁碟使用情況的 Shell 指令碼指令碼
- 通過shell指令碼檢測MySQL服務資訊指令碼MySql
- 如何用bash shell 指令碼監控 Linux記憶體、磁碟和 CPU?指令碼Linux記憶體
- Zabbix透過Orabbix監控OracleOracle
- Linux通過Shell指令碼命令修改密碼不需要互動Linux指令碼密碼
- PostgreSQL之鎖監控指令碼SQL指令碼
- 通過 shell 指令碼完成 GitLab11.9.11 的一鍵安裝指令碼Gitlab
- 用 Linux Shell 指令碼來監控磁碟使用情況併傳送郵件Linux指令碼
- 監控系統告警指令碼集合指令碼
- 案例:通過shell指令碼實現mysql資料備份與清理指令碼MySql
- 通過ActionTrail監控AccessKey的使用AI
- shell指令碼指令碼
- 案例五:shell指令碼實現定時監控http服務的執行狀態指令碼HTTP
- 網路卡流量監控指令碼,python實現指令碼Python
- centos 監控web站點是否500 指令碼CentOSWeb指令碼
- shell指令碼案例指令碼
- 常用shell指令碼指令碼
- Linux Shell指令碼Linux指令碼
- rtop – 通過SSH監控遠端主機
- Probius+Prometheus通過API整合POD監控PrometheusAPI
- shell指令碼(6)-shell陣列指令碼陣列
- 通過shell指令碼和企業微信實現報警功能(完整版)指令碼
- 關於前端指令碼異常監控的思考前端指令碼
- shell 指令碼加密 | shc指令碼加密