2017.12.13
Oradebug
目次
oradebug
oradebugは、DBAのための最も強力なツールです。oradebugは、元のOracleをデバッグするための目的のために使用され、 適切に使用すると、Oracleを管理したり、内部のメカニズムをテストするのに大きな助けになります。 oradebugは必ずsysdba権限で実行する必要があります。 SQL> connect/ as sysdba SQL> oradebug help HELP[command] Describe one or all commands SETMYPID Debug current process SETOSPID Set OS pid of process to debug SETORAPID[ 'force'] Set Oracle pid of process to debug SHORT_STACK Dump abridged OS stack DUMP[addr] Invoke named dump DUMPSGA[bytes] Dump fixed SGA DUMPLIST Print a list of available dumps EVENT Set trace event in process SESSION_EVENT Set trace event in session ...
診断イベント実行
oradebugを利用して次のように特定のセッションにSQL Traceをかけることができます。
SQL> - まず希望のセッションのSPIDやPIDを求ます。 セッションのSPIDやPIDを利用して、特定のセッションに「Attach」します。 SQL> oradebug setospid ==> Oracle pid:17、Unix process pid:18639、image:oracle @ hpl2000 あるいは SQL> select pid、sid、s.username、s.program SQL> from v $ session s、v $ process p SQL> where s.paddr = p.addr; PID SID USERNAME PROGRAM --- ------ ----------- ----------------- 2 170 ORACLE.EXE(PMON) 3 169 ORACLE.EXE(PSP0) 4 168 ORACLE.EXE(MMAN) 5 167 ORACLE.EXE(DBW0) 6 166 ORACLE.EXE(LGWR) 7 165 ORACLE.EXE(CKPT) 8 164 ORACLE.EXE(SMON) 9 163 ORACLE.EXE(RECO) 10 162 ORACLE.EXE(CJQ0) 11 161 ORACLE.EXE(MMON) 12 160 ORACLE.EXE(MMNL) 16 159 SYS sqlplus.exe 18 154 ORACLE.EXE(QMNC) 19 153 ORACLE.EXE(q001) 20 148 OWI LitePlus.exe 21 150 ORACLE.EXE(q000) SQL> oradebug setorapid - Windows系では、setospidは動作しない可能性があります。 この場合には、setorapidを使用します。 SQL> oradebug unlimit - Traceファイルのサイズ制限を取り除きます。 - AttachしたプロセスのEventを設定します。 SQL> oradebug event 10046 trace name context forever、level 8 ... SQL> oradebug event 10046 trace name context off - Traceファイル名を調べる。このファイルをエディタで開いてTraceファイルを分析することができます。 SQL> oradebug tracefile_name ==> /home/oracle/admin/ORA102/udump/ora102_ora_18639.trc
ダンプ(Dump)実行
SGA、PGAは、library cache、row cache、buffers、enqueue、latch、heap、hanganalyzeなどのダンプ操作を実行することができます。これらのダンプファイルは、Oracleの内部構造を理解する大きな助けを与えて、オラクルの技術サポートで障害を診断するために広く使用されています。
・setmypidコマンドを使用すると、現在のセッションにAttachする。 SQL> oradebug setmypid
・library cache dump、Levelに10を与えているlibrary cacheの内容全体をダンプします。 SQL> oradebug dump library_cache10
・row cache dump SQL> oradebug dump row_cache10
・Buffer cache dump、Levelに10を与えるバッファキャッシュの内容全体をダンプします。 SQL> oradebug dump buffers1
Level値に基づいてbuffer cacheの次のような内容をダウンロードすることができます。
内容 | Header only | Brief Block | Full Block |
Block | 1 | 2 | 3 |
+lru | 4 | 5 | 6 |
+user/waiters | 8 | 9 | 10 |
・ enqueue dump SQL> oradebug dump enqueues10
・ latch dump SQL> oradebug dump latches10
・ Heap領域をdumpします。 SQL> oradebug dump heapdump2
Level値に応じて、次のようなHeap領域をダウンロードすることができます。
Heap | Level | Level with Contents |
Top PGA | 1 | 1025(=1024+1) |
Top SGA | 2 | 2050(=2048+1) |
Top UGA | 4 | 4100 |
Current Call | 8 | 8200 |
User Call | 16 | 16400 |
Large Pool | 32 | 32800 |
・ System Stateをdumpします。Oracleのパラメータ/統計/ SGA/セッション/プロセスなどの情報を ダウンロードすることがでます。システム全体の分析をするのに有用です。 SQL> oradebug dump systemstate10
・ Process Stateをdumpします。特定のプロセスのセッション/ PGA等の情報をダウンロードすることが できます。PGAの分析をするのに有用です。 SQL> oradebug setospid SQL> oradebug dump processstate10
特定のプロセスのCall Strack Traceを抽出することができます。 SQL> oradebug short_stack
・ _ksdxfstk+14<-_ ksdxcb+1481<-_ ssthreadsrgruncallback+428 DumpファイルとTraceファイルはUser Dump Directoryに記録されUSER_DUMP_DESTパラメータ値に 指定されています。次のコマンドを使用してだけ記録されたDumpファイル名を取得することができます。 SQL> oradebug tracefile_name
・ ファイルのサイズが非常に大きい場合には、結果が切り捨てられる場合がありますので、 以下のコマンドを使用して、サイズを無限に指定すればよいのです。 SQL> oradebug unlimit
プロセス制御
・ oradebugを利用して、特定のプロセスを一時停止/再開させることができます。 問題となるプロセスを制御したり、現在の状態を分析する目的で使用されます。 SQL> oradebug setospid
・ プロセスを一時停止 SQL> oradebug suspend ...
・ プロセスの再開 SQL> oradebug resume
上記のコマンドは、現在の待機セッションを一時停止させ、追加の分析をしたり、特定のタスクによってSGA内の特定のメモリの値がどのように変化するかを確認するための用途に使用可能です。