[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

 


사업자 정보 표시
(주)블루원 | 김홍태 | 서울특별시 용산구 원효로 4가 135 금홍 2빌딩 | 사업자 등록번호 : 106-86-76684 | TEL : 02-3272-7200 | Mail : support_ora@blueone.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기

'DB - ORACLE > Oracle DB Admin ' 카테고리의 다른 글

ORACLE RMAN 의 개요  (0) 2015.11.06
Oracle Flashback 정리  (0) 2015.11.04
Oracle Enqueue 의 종류별 설명  (0) 2015.09.07
Create Table 테이블 생성문의 Storage Option 설명  (0) 2015.09.03
오라클 Block Structure  (0) 2015.09.03

+ Recent posts