[oradebug 사용법 – 1]

ORADUBUG는 ORACLE에서 제공하는 디버깅을 위한 목적으로 만들어진 유틸리티로 

DB가 멈추거나 Hang 상태일 때 또는 ORA-600 에러가 발생했을 경우, 

특정 프로세스가 루핑을 도는 것 또는 멈춰있는 것 같이 보일 때 관리자 권한으로 실행하여 사용할 수 있다.

즉 프로세스, 세션, 메모리, SQL 등의 리소스를 덤프할 수있고, OS 디버거들과 비슷하게 오라클 레벨에서 CALL단위 디버깅 기능을 제공한다.

리소스를 개별로 덤프할 수 있으며 인스턴스를 덤프할 수 있으며 DB HANG 또는 크리티컬 장애 분석 시 사용된다. 

      
다른 유저 세션으로 SQL Tracing 설정
가능

      
프로세스 일시중단

      
공유메모리와 세마포어 정보검색

      
새로 생성된 트레이스파일 closing

      
내부 구조 조작 및 dump 기능

      
프로세스 시동

Oradebug
Commands  

      
Oradebug help를 통해 커맨드를 검색하여
활용

SQL> oradubug help

 

 

1.    
Oradebug setmypid

현재
프로세스로 디버그

SQL> oradebug setmypid

 

2.    
Oradebug setospid

디버그할 프로세스의 OS Process id 설정

SQL> oradebug setospid <pid>

 

Ex)

SQL> oradebug setospid 19592

Oracle pid: 18, Unix process pid: 19592, image:
oracle@apollo(TNS V1-V3)

 

3.    
Oradebug setospid

디버그할 Oracle Pid 설정

SQL> oradebug setorapid <orapid>

 

Ex)

SQL> oradebug setorapid 18  (use pid from the query above)

Unix process pid: 19592, image: oracle@apollo (TNS
V1-V3) or  using force option 

SQL> oradebug setorapid 18 force

Statement processed.

 

4.    
Oradebug event

프로세스의 Trace event 설정

SQL> oradebug event <text>

 

이벤트넘버는 $ORACLE_HOME/rdbms/mesg/oraus.msg에서 확인가능

Ex) 에벤트 넘버가 10046일 경우
다른 세션에 대한 추적을 위해 PIDOS PID
알고 있어야하며 이는 v$process view에서 추적할 수 있다.

 

SQL> oradebug setospid 10929

Oracle pid: 91, Unix process pid: 10929, image:
oracleorcl

SQLPLUS> oradebug EVENT 10046 trace name context
forever, level 12

Statement processed.

 


Trace Name

Level

Description

TRACE_ACALL

1

Trace all calls

TRACE_ECALL

2

Trace “enabled” calls

TRACE_AEXCP

4

Trace all exceptions

TRACE_EEXCP

8

Trace “enabled” exceptions

TRACE_CIRCULAR

16

Trace w/ circular buffer

TRACE_BIND_VARS

32

Trace bind variables

Level

Description

17

Trace all calls, using the buffer

22

Trace enabled calls and all exceptions
using the buffer

32

Trace bind variables, without using
the buffer

53

Yields the maximum level of tracing,
using the buffer

37

Yields the maximum level of tracing,
without using the buffer

 

5.    
Oradebug Session event

세션의 Trace event 설정

SQL> oradebug session_event <text>

 

Ex)

SQL>oradebug session_event 10046 trace name
context forever,level 12

Statement proceed.

SQL > oradebug session_event 10046 trace name
context off

Statement proceed.

 

 

6.    
Oradebug dumpvar

PGA/UGA/SGA를 덤프또는 프린트

SQL> oradebug dumpvar <p|s|uga>
<name> [level]

<p|s|uga>  
PGA,SGA or UGA

<name>   
Variable name

[level]     
Level

 

 

7.    
Orade setvar

PGA/UGA/SGA를 변경

SQL> oradebug setmypid

Statement processed.

 

SQL> oradebug dumpvar sga
kcfdfk

kfil kcfdfk_ [2000F6B0, 2000F6B4)
= 00000190

 

SQL> show parameter db_files;

 

NAME                                 TYPE          VALUE

————————————
———– ——————-

db_files                               integer          200

 

SQL> oradebug setvar sga kcfdfk
200

BEFORE: [2000F6B0, 2000F6B4) =
00000190

AFTER:  [2000F6B0, 2000F6B4)   = 000000C8

 

SQL> oradebug dumpvar sga
kcfdfk

kfil kcfdfk_ [2000F6B0, 2000F6B4)
= 000000C8

 

8.    
Oradebug peek

메모리 주소를 user dump 위치에 트레이스 파일로 덤프시켜주는 명령어

select fsv.KSMFSNAM,sga.*

 from x$ksmfsv fsv, x$ksmmem
sga

 where sga.addr=fsv.KSMFSADR

 and fsv.ksmfsnam like
‘kgl%’

SQL> /

KSMFSNAM   ADDR      INDX   
INST_ID KSMMM   VAL

—————————————- ———- ——–

kglt1_       200150F8     21566         1   
00000  11C

kgllat_      20015F64     22489          1     00

kglpnl_      2001602C     22539         1    
00

kglpal_      200160F4    22589           1     00

kglllt_       200161BC     22639          1     00

SQL> oradebug peek 536957176 4

[200150F8, 200150FC) = 0000011C

 

9.    
Oradebug poke

메모리 변경

SQL> oradebug help poke

POKE           <addr>
<len> <value>      Modify
memory

SQL> oradebug poke 536957176 4 668

BEFORE: [200150F8, 200150FC) = 0000011C

AFTER:  [200150F8, 200150FC)
= 0000029C

 

 select fsv.KSMFSNAM,sga.*

 from x$ksmfsv fsv, x$ksmmem
sga

 where sga.addr=fsv.KSMFSADR

 and fsv.ksmfsnam like
‘kgl%’

SQL> /

 

KSMFSNAM   ADDR          INDX    INST_ID     KSMMMVAL

————————————— ——– ———-

kglt1_      200150F8       21566           1     
0000029C

kgllat_      20015F64       22489          1       00

kglpnl_     2001602C     22539            1        00

kglpal_     200160F4      22589           1        00

kglllt_      200161BC     22639            1        00

 

10.    
Oradebug wakeup

프로세스 wake up해준다.

SQL> select pid

    from v$process p,
v$bgprocess b

    where b.paddr = p.addr

    and   name=’SMON’;

  PID

———-

   6

 

SQL> oradebug wakeup 6

 

By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다