oracle實用工具:oradebug
oradebug主要是給Oracle支援人員使用的,儘管很早便有,但oracle官網很少有記載。他是個sql*plus命令列工具,有sysdba的許可權就可以登入,無需特別設定。他可以被用於:
1)追蹤程式,或者是你的,或者是外部的
2)確定程式往哪個trc檔案寫
3)轉儲:資料檔案頭、內部oracle結構等
4)掛起程式,暫時的
5)確定例項使用了哪些共享記憶體塊和訊號量
6)找出RAC例項使用了哪些互聯地址和協議
7)修改SGA中的資料結構
2、 oradebug使用步驟
1)啟動sql*plus並以sysdba身份登入
2)連線到一個程式
3)設定一個事件或者進行診斷轉儲
4)檢索trc檔名
5)與連線到的程式斷開
3、 oradebug命令介紹
4、 連線到一個程式
在oradebug命令執行之前,你必須加入一個目標程式。這個目標程式有如下3種情況:
命令 |
目的 |
oradebug setmypid |
連線到為你的sql*plus提供服務的程式 |
oradebug setorapid pid |
連線到一個外部服務程式,且pid=v$process.pid |
oradebug setospid spid |
連線到一個外部服務程式,且spid=v$process.pid |
1)、 setmypid
sys@ORCL> oradebug setmypid
Statement processed.
sys@ORCL> oradebug unlimit
Statement processed.
sys@ORCL> oradebug event 10046 trace name context forever,level 8
Statement processed.
sys@ORCL> select * from hr.departments where department_id=10;
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
10 Administration 200 1700
sys@ORCL> oradebug tracefile_name
/u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
sys@ORCL> oradebug event 10046 trace name context off
Statement processed.
2)、setospid(spid操作)
sys@ORCL> host top
top - 15:14:20 up 47 min, 2 users, load average: 0.22, 0.20, 0.26
Tasks: 171 total, 2 running, 168 sleeping, 0 stopped, 1 zombie
Cpu(s): 1.3%us, 1.3%sy, 0.0%ni, 97.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 678912k total, 671192k used, 7720k free, 16672k buffers
Swap: 0k total, 0k used, 0k free, 401584k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5874 oracle 15 0 2444 1084 828 R 1.6 0.2 0:00.47 top
4781 root 15 0 53900 11m 6076 S 0.7 1.7 1:00.13 Xorg
5168 oracle 16 0 491m 17m 15m S 0.3 2.6 0:02.41 oracle
sys@ORCL> oradebug setospid 5168
Oracle pid: 7, Unix process pid: 5168, image: oracle@localhost.localdomain (CKPT)
3)、setorapid(pid操作)
sys@ORCL> select sid from v$mystat where rownum=1;
SID
----------
159
sys@ORCL> select pid,spid from v$process p,v$session s where s.sid=159 and s.paddr=p.addr;
PID SPID
---------- ------------
15 5234
sys@ORCL> oradebug setorapid 15
Statement processed.
sys@ORCL> oradebug tracefile_name
/u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
sys@ORCL> oradebug event 10046 trace name context off
Statement processed.
注意,在OEM的top session也可以等價實現上述效果,即:確定哪些會話消耗了較多的資源
5、 oradebug IPC
檢視共享資訊的記憶體的命令是ipcs [-m|-s|-q]。預設會列出共享記憶體、訊號量,佇列資訊,-m列出共享記憶體,-s列出共享訊號量,-q列出共享佇列
sys@ORCL> host ipcs -m | grep ora
0xbe3bb918 5439503 oracle 640 419438592 20
sys@ORCL> oradebug setmypid
Statement processed.
sys@ORCL> oradebug ipc
Information written to trace file.
sys@ORCL> oradebug tracefile_name
/u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
sys@ORCL> oradebug event 10046 trace name context off
Statement processed.
當一臺電腦的資源有限時,失敗的例項佔用共享記憶體和訊號量會導致資源緊張,從而使得新的oracle例項無法啟動。
清除命令是ipcrm [-m|-s|-q] id。
-m 刪除共享記憶體,-s刪除共享訊號量,-q刪除共享佇列
如:ipcrm -m 5439503
6、 oradebug SHORT_STACK
如果一個程式掛起,那麼程式呼叫棧就可以顯示它在呼叫路徑中的哪一步掛起
sys@ORCL> oradebug setospid 5180
Oracle pid: 13, Unix process pid: 5180, image: oracle@localhost.localdomain (D000)
sys@ORCL> oradebug short_stack
ksdxfstk()+19<-ksdxcb()+1321<-sspuser()+81<-__kernel_vsyscall()+2<-ntevpque()+112<-ntevque()+606<-nsevwait()+821<-ksnwait()+111<-ksliwat()+770<-kslwaitns()+29<-
kskthbwt()+370<-kslwait()+57<-kmdmai()+1797<-kmmrdp()+432<-opirip()+1191<-opidrv()+864<-sou2o()+113<-opimai_real()+353<-main()+111<-__libc_start_main()+220
sys@ORCL> oradebug event 10046 trace name context off
Statement processed.
當前的呼叫步驟在輸出的頂部
7、 診斷轉儲
可轉儲型別如下:
sys@ORCL> oradebug dumplist
EVENTS
TRACE_BUFFER_ON
TRACE_BUFFER_OFF
HANGANALYZE
LATCHES
PROCESSSTATE
SYSTEMSTATE
INSTANTIATIONSTATE
.........
下面舉例兩個:
1)、controlf
sys@ORCL> oradebug setmypidStatement processed.
sys@ORCL> oradebug dump controlf 10
Statement processed.
sys@ORCL> oradebug tracefile_name
/u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
2)、events
這不是真正的轉儲,events只是將啟用的事件寫入trc檔案。如果你不能確定一個會話、程式或者例項中哪個事件是活動的,下面有一種很好的方式去查詢:
sys@ORCL> alter session set events '10046 trace name context forever,level 8';
Session altered.
sys@ORCL> alter session set events '4031 trace name heapdump level 3';
Session altered.
sys@ORCL> oradebug setmypid
Statement processed.
sys@ORCL> oradebug dump events 1
Statement processed.
sys@ORCL> oradebug tracefile_name
/u01/app/oracle/admin/orcl/udump/orcl_ora_5234.trc
sys@ORCL> oradebug event 10046 trace name context off
Statement processed.
oradebug dump events的級別和範圍:
級別
事件範圍
使用的命令
1
會話
alter session
2
程式
oradebug event
4
例項
alter system
8、 小結
oradebug對於解決問題和診斷效能是必不可少的工具。本文只是講述了一些最常見的命令,還有更多的功能,比如RAC環境下呼叫全域性佇列服務偵錯程式的
oradebug lkdebug命令。
=====補充=====================================================
Oradebug命令它可以啟動用停止跟蹤任何會話,最常用的就是它可以直接透過命令輸出生成trace檔案的名稱(帶路徑的),省去不少麻煩,系統HANG住用它做分析也比較好用!
1> oradebug有哪些可用命令?
以sysdba身份登陸資料庫,透過oradebug help可以看到oradebug常用命令
sqlplus / as sysdba
oradebug help
2> 跟蹤當前會話資訊
oradebug setmypid --跟蹤當前會話
oradebug setospid --跟蹤系統程式
oradebug setorapid --跟蹤ORACLE程式
oradebug unlimit --取消trace檔案大小限制
oradebug tracefile_name --檢視trace檔名及位置
3> 用oradebug做session級10046或10053
oradebug setmypid
oradebug unlimit
oradebug session_event 10046 trace name context forever ,level 4 --啟用會話級10046
oradebug session_event 10046 trace name context off --關閉10046事件
oradebug tracefile_name --檢視tracefile檔案位置及檔名
4> 用oradebug做oracle process級10046
oradebug setorapid
oradebug unlimit
oradebug event 10046 trace name context forever ,level 4
oradebug event 10046 trace name context off
oradebug tracefile_name
5> oradebug系統hang住原因分析
如果系統HANG住,只要sys使用者可以登陸,那麼用oradebug做原因分析是非常有用的
oradebug setmypid
oradebug unlimit
oradebug setinst all --RAC環境
oradebug hanganalyze 3 -- 級別一般指定為3足夠了
oradebug -g def dump systemstate 10 --RAC環境
oradebug tracefile_name
使用oradebug 命令 -- —針對rac的用法
ORADEBUG setmypid
oradebug unlimit
ORADEBUG setinst all
ORADEBUG -g def hanganalyze 3
oradebug close_trace
oradebug tracefile_name
對於單例項,我們通常進行如下操作即可:
oradebug setmypid
oradebug unlimit
oradebug hanganalyze 3
oradebug close_trace
oradebug tracefile_name
6> 獲取某程式的狀態資訊
oradebug setospid 22180
oradebug dump processstate 10
oradebug tracefile_name
7> 獲取程式錯誤資訊狀態
oradebug setospid 22180
oradebug dump errorstack 3
8> 追蹤造成錯誤資訊的原因,如ORA-04031
oradebug event 4031 trace name errorstack level 3
實驗oradebug session級別的10046事件跟蹤:
——設定當前會話pid;
SYS@ORA11GR2>oradebug setmypid
Statement processed.
——開啟10046事件跟蹤:
SYS@ORA11GR2>oradebug session_event 10046 trace name context forever,level 12;
Statement processed.
SYS@ORA11GR2>
——進行操作以生成trace檔案:
SYS@ORA11GR2>create table t1 as select * from user_objects;
Table created.
SYS@ORA11GR2>select count(*) from t1;
COUNT(*)
----------
37793
——關閉10046事件:
SYS@ORA11GR2>oradebug session_event 10046 trace name context off;
Statement processed.
——檢視跟蹤問位置:
SYS@ORA11GR2>oradebug tracefile_name
/u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_ora_30254.trc
SYS@ORA11GR2>
SYS@ORA11GR2>!ls /u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_ora_30254.trc
/u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace/ORA11GR2_ora_30254.trc
驗證:
[oracle@wang trace]$ pwd
/u01/app/oracle/diag/rdbms/ora11gr2/ORA11GR2/trace
[oracle@wang trace]$ ls –lrt
-rw-r----- 1 oracle oinstall 91 Oct 15 23:10 ORA11GR2_mmon_27426.trm
-rw-r----- 1 oracle oinstall 1172 Oct 15 23:10 ORA11GR2_mmon_27426.trc
-rw-r----- 1 oracle oinstall 2344 Oct 15 23:11 ORA11GR2_ora_30254.trm
-rw-r----- 1 oracle oinstall 895526 Oct 15 23:11 ORA11GR2_ora_30254.trc
[oracle@wang trace]$
——利用tkprof工具格式化trace檔案:
[oracle@wang trace]$ tkprof ORA11GR2_ora_30254.trc 2311
TKPROF: Release 11.2.0.4.0 - Development on Sat Oct 15 23:15:21 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
驗證:
[oracle@wang trace]$ ls 2311.prf
2311.prf
[oracle@wang trace]$
——檢視生成的trace檔案:
[oracle@wang trace]$ cat 2311.prf
省略………………………..
*******************************************************************************
SQL ID: f9cw1jf3v3nvk Plan Hash: 1647312333
create table t1 as select
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.02 0.01 0 0 0 0
Execute 1 0.21 0.25 0 1371 758 37793
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.23 0.27 0 1371 758 37793
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYS
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
0 0 0 LOAD AS SELECT (cr=1559 pr=0 pw=514 time=255298 us)
37793 37793 37793 VIEW USER_OBJECTS (cr=1350 pr=0 pw=0 time=187371 us cost=312 size=538650 card=2835)
37793 37793 37793 UNION-ALL (cr=1350 pr=0 pw=0 time=177792 us)
0 0 0 TABLE ACCESS BY INDEX ROWID SUM$ (cr=0 pr=0 pw=0 time=0 us cost=1 size=9 card=1)
0 0 0 INDEX UNIQUE SCAN I_SUM$_1 (cr=0 pr=0 pw=0 time=0 us cost=0 size=0 card=1)(object id 1035)
0 0 0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us cost=3 size=30 card=1)
0 0 0 INDEX RANGE SCAN I_OBJ1 (cr=0 pr=0 pw=0 time=0 us cost=2 size=0 card=1)(object id 36)
37793 37793 37793 FILTER (cr=1349 pr=0 pw=0 time=108189 us)
37793 37793 37793 HASH JOIN (cr=1078 pr=0 pw=0 time=39878 us cost=295 size=317894 card=2999)
92 92 92 INDEX FULL SCAN I_USER2 (cr=1 pr=0 pw=0 time=10 us cost=1 size=2024 card=92)(object id 47)
37793 37793 37793 TABLE ACCESS FULL OBJ$ (cr=1077 pr=0 pw=0 time=22663 us cost=294 size=251916 card=2999)
1251 1251 1251 TABLE ACCESS BY INDEX ROWID IND$ (cr=271 pr=0 pw=0 time=4705 us cost=2 size=8 card=1)
1251 1251 1251 INDEX UNIQUE SCAN I_IND1 (cr=52 pr=0 pw=0 time=1233 us cost=1 size=0 card=1)(object id 41)
0 0 0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us cost=2 size=29 card=1)
0 0 0 INDEX SKIP SCAN I_USER2 (cr=0 pr=0 pw=0 time=0 us cost=1 size=20 card=1)(object id 47)
0 0 0 INDEX RANGE SCAN I_OBJ4 (cr=0 pr=0 pw=0 time=0 us cost=1 size=9 card=1)(object id 39)
0 0 0 TABLE ACCESS BY INDEX ROWID LINK$ (cr=1 pr=0 pw=0 time=19 us cost=0 size=88 card=1)
0 0 0 INDEX RANGE SCAN I_LINK1 (cr=1 pr=0 pw=0 time=18 us cost=0 size=0 card=1)(object id 138)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
Disk file operations I/O 2 0.00 0.00
direct path write 18 0.00 0.00
direct path sync 1 0.04 0.04
log file sync 1 0.00 0.00
SQL*Net message to client 1 0.00 0.00
SQL*Net message from client 1 0.00 0.00
**************************************************************************************************************************************************************
SQL ID: 5bc0v4my7dvr5 Plan Hash: 3724264953
select count(*)
from
t1
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 1 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 2 0.00 0.00 120 518 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 4 0.00 0.00 120 519 0 1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: SYS
Number of plan statistics captured: 1
Rows (1st) Rows (avg) Rows (max) Row Source Operation
---------- ---------- ---------- ---------------------------------------------------
1 1 1 SORT AGGREGATE (cr=518 pr=120 pw=0 time=4122 us)
37793 37793 37793 TABLE ACCESS FULL T1 (cr=518 pr=120 pw=0 time=7913 us cost=141 size=0 card=37628)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 2 0.00 0.00
db file scattered read 20 0.00 0.00
db file sequential read 1 0.00 0.00
SQL*Net message from client 2 0.00 0.00
***********************************************************************
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2141713/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE EVENT && ORADEBUGOracle
- Oracle oradebug命令Oracle
- oradebug工具使用系列一
- oradebug分析oracle hangOracle
- (轉)Oracle EVENT && ORADEBUGOracle
- Oracle Debug ---- oradebugOracle
- oracle實驗記錄 (使用hanganlyze&oradebug)Oracle
- oracle oradebug使用詳解Oracle
- 使用Oradebug修改Oracle SCNOracle
- oracle之 oradebug 命令用法Oracle
- Oracle oradebug命令詳解Oracle
- 用oradebug掛起程式
- Oracle oradebug 命令 使用說明Oracle
- Oracle oradebug命令使用說明Oracle
- 在10g中使用oradebug trace工具
- 使用oradebug dump hanganalyze分析oracle hang系列一Oracle
- 使用oradebug dump hanganalyze 分析oracle hang系列二Oracle
- 使用oradebug dump hanganalyze 分析oracle hang系列三Oracle
- 用oradebug short_stack及strace -p分析oracle程式是否dead或出現故障Oracle
- [oradebug命令學習1]Using ORADEBUG Utility
- grep 工具實用頁
- oradebug分析oracle hang或慢_sqlplus_prelimOracleSQL
- oradebug詳解
- 基於oracle 10.2.0.1 rac使用oradebug dump hanganalyze 分析oracle hang系列四Oracle
- 基於oracle 10.2.0.1 rac使用oradebug dump hanganalyze 分析oracle hang系列五Oracle
- 基於oracle 10.2.0.1 rac使用oradebug dump hanganalyze 分析oracle hang系列六Oracle
- 前端實用小工具前端
- ORACLE 的載入工具SQLLDR應用OracleSQL
- 【體系結構】Oracle資料提交與事務隔離實驗 oradebug掛起lgwr程式Oracle
- 超實用壓力測試工具-ab工具
- oradebug命令詳解
- ORADEBUG使用詳解
- ipcs / oradebug ipc / sysresv
- [oradebug命令學習2]How to Use Oradebug to Get Trace File Name and Location
- Oracle Audit 應用實踐Oracle
- zt_oradebug詳解
- 使用oradebug掛起程式
- 在oracle10g及oracle11g使用oradebug生成systemstate dump檔案系列二Oracle