[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일 경우 다른 세션에 대한 추적을 위해 PID와 OS 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.
|
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 |
'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 |