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内の特定のメモリの値がどのように変化するかを確認するための用途に使用可能です。