oradebug神器

oradebug是SQL*PLUS工具,只要有SYSDBA权限就可以使用,不用做特别设置,但其功能很强大,是每个从事oracle工作人员必不可少的利器。

下面就介绍一些常用功能:

1:获得trace文件的名字和位置

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
PL/SQL Release 10.2.0.4.0 - Production
CORE    10.2.0.4.0      Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production

SQL> alter session set events 'immediate trace name controlf level 12';

Session altered.

SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/u01/oracle/admin/gdf/udump/gdf_ora_1961.trc
SQL> 

2:诊断转储

可以转储的类型:

SQL> oradebug dumplist
EVENTS
TRACE_BUFFER_ON
TRACE_BUFFER_OFF
HANGANALYZE
LATCHES
PROCESSSTATE
SYSTEMSTATE
INSTANTIATIONSTATE
REFRESH_OS_STATS
CROSSIC
CONTEXTAREA
HEAPDUMP
HEAPDUMP_ADDR
POKE_ADDRESS
POKE_LENGTH
POKE_VALUE
POKE_VALUE0
GLOBAL_AREA
MEMORY_LOG
REALFREEDUMP
FLUSH_JAVA_POOL
POOL_SIMULATOR
PGA_DETAIL_GET
PGA_DETAIL_DUMP
PGA_DETAIL_CANCEL
MODIFIED_PARAMETERS
EVENT_TSM_TEST
ERRORSTACK
CALLSTACK
HANGANALYZE_PROC
TEST_STACK_DUMP
TEST_GET_CALLER
RECORD_CALLSTACK
EXCEPTION_DUMP
BG_MESSAGES
ENQUEUES
KSTDUMPCURPROC
KSTDUMPALLPROCS
SIMULATE_EOV
KSFQP_LIMIT
KSKDUMPTRACE
DBSCHEDULER
LDAP_USER_DUMP
LDAP_KERNEL_DUMP
DUMP_ALL_OBJSTATS
DUMPGLOBALDATA
HANGANALYZE_GLOBAL
GES_STATE
OCR
CSS
CRS
SYSTEMSTATE_GLOBAL
CREATE_DUMMY_REQUEST
MMAN_ALLOC_MEMORY
MMAN_CREATE_REQUEST
MMAN_CREATE_IMM_REQUEST
DUMP_ALL_COMP_GRANULE_ADDRS
DUMP_ALL_COMP_GRANULES
DUMP_ALL_REQS
DUMP_TRANSFER_OPS
DUMP_ADV_SNAPSHOTS
ADJUST_SCN
NEXT_SCN_WRAP
CONTROLF
FLUSH_CACHE
FULL_DUMPS
BUFFERS
RECOVERY
SET_TSN_P1
BUFFER
PIN_BLOCKS
BC_SANITY_CHECK
PIN_RANDOM_BLOCKS
SET_NBLOCKS
CHECK_ROREUSE_SANITY
DUMP_PINNED_BUFFER_HISTORY
REDOLOGS
LOGHIST
ARCHIVE_ERROR
REDOHDR
LOGERROR
OPEN_FILES
DATA_ERR_ON
DATA_ERR_OFF
BLK0_FMTCHG
UPDATE_BLOCK0_FORMAT
TR_SET_BLOCK
TR_SET_ALL_BLOCKS
TR_SET_SIDE
TR_CRASH_AFTER_WRITE
TR_READ_ONE_SIDE
TR_CORRUPT_ONE_SIDE
TR_RESET_NORMAL
TEST_DB_ROBUSTNESS
LOCKS
GC_ELEMENTS
FILE_HDRS
KRB_CORRUPT_INTERVAL
KRB_CORRUPT_SIZE
KRB_CORRUPT_REPEAT
KRB_PIECE_FAIL
KRB_OPTIONS
KRB_FAIL_INPUT_FILENO
KRB_SIMULATE_NODE_AFFINITY
KRB_TRACE
KRB_BSET_DAYS
KRB_SET_TIME_SWITCH
KRBMRSR_LIMIT
KRBMROR_LIMIT
KRC_TRACE
KRA_OPTIONS
KRA_TRACE
FBTAIL
FBINC
FBHDR
FLASHBACK_GEN
DROP_SEGMENTS
KTPR_DEBUG
TREEDUMP
LONGF_CREATE
ROW_CACHE
LIBRARY_CACHE
CURSORDUMP
CURSORTRACE
CURSOR_STATS
SHARED_SERVER_STATE
JAVAINFO
KXFPCLEARSTATS
KXFPDUMPTRACE
KXFPBLATCHTEST
KXFXSLAVESTATE
KXFXCURSORSTATE
WORKAREATAB_DUMP
KUPPLATCHTEST
OBJECT_CACHE
SAVEPOINTS
RULESETDUMP
RULESETDUMP_ADDR
OLAP_DUMP
SELFTESTASM
IOERREMUL
ALRT_TEST
AWR_TEST
AWR_FLUSH_TABLE_ON
AWR_FLUSH_TABLE_OFF
ASHDUMP
MMON_TEST
SQL> 


由于可转储类型太多,鉴于篇幅,现举例常用的几个,其他类似。

a:controlf

SQL> oradebug setmypid
Statement processed.
SQL> oradebug dump controlf 12
Statement processed.
SQL> oradebug tracefile_name
/u01/oracle/admin/gdf/udump/gdf_ora_1961.trc

效果与以下语句一样

alter session set events 'immediate trace name controlf level 12';


b:redo log header

SQL> oradebug setmypid
Statement processed.
SQL> oradebug dump redohdr 10
Statement processed.
SQL> oradebug tracefile_name
/u01/oracle/admin/gdf/udump/gdf_ora_2198.trc
SQL> !

效果同以下语句一样:

alter session set events 'immediate trace name redohdr level 10'

其他类似。

下面举一个具体的案例来说明oradebug的功能:

追踪SMON:

[oracle@edhatGRA ~]$ ps -ef | grep smon
oracle    1947     1  0 17:31 ?        00:00:01 ora_smon_gdf
oracle    2300  2222  0 19:01 pts/0    00:00:00 grep smon
[oracle@edhatGRA ~]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.4.0 - Production on Sun May 5 19:01:23 2013

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

SQL> conn / as sysdba
Connected.
SQL> oradebug setospid 1947
Oracle pid: 8, Unix process pid: 1947, image: oracle@edhatGRA (SMON)
SQL> oradebug event 10500 trace name context forever,level 10
Statement processed.
SQL> oradebug tracefile_name
/u01/oracle/admin/gdf/bdump/gdf_smon_1947.trc
SQL> 

打开该文件

[oracle@edhatGRA ~]$ vi /u01/oracle/admin/gdf/bdump/gdf_smon_1947.trc
/u01/oracle/admin/gdf/bdump/gdf_smon_1947.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORACLE_HOME = /u01/oracle/10g
System name:    Linux
Node name:      edhatGRA
Release:        2.6.32-71.el6.i686
Version:        #1 SMP Wed Sep 1 01:26:34 EDT 2010
Machine:        i686
Instance name: gdf
Redo thread mounted by this instance: 1
Oracle process number: 8
Unix process pid: 1947, image: oracle@edhatGRA (SMON)

*** 2013-05-05 19:02:19.833
*** SERVICE NAME:(SYS$BACKGROUND) 2013-05-05 19:02:19.832
*** SESSION ID:(164.1) 2013-05-05 19:02:19.832
Received ORADEBUG command 'event 10500 trace name context forever,level 10' from process Unix process pid: 2304, image:
*** 2013-05-05 19:02:19.833
SMON: system monitor process posted
*** 2013-05-05 19:02:19.833
SMON: Posted too frequently, trans recovery disabled.
Received ORADEBUG command 'tracefile_name' from process Unix process pid: 2304, image:
*** 2013-05-05 19:02:29.420
SMON: system monitor process posted
*** 2013-05-05 19:02:29.420
SMON: Posted too frequently, trans recovery disabled.

结合oracle的事件,oradebug可发挥强大功能,为你解决问题,深入理解oracle内部原理,提供有益的帮助。

3:总结

oradebug对于学习oracle,解决问题,诊断问题是必不可少的工具,本文只是oradebug的入门,更多功能请参阅相关文档。本人提供一些链接:

a:http://www.dba-oracle.com/t_oradebug_tips.htm

b:   http://www.juliandyke.com/Diagnostics/Tools/ORADEBUG/ORADEBUG.html

c:http://www.orafaq.com/wiki/Oradebug








 

 

posted @ 2013-05-05 22:11  javawebsoa  Views(406)  Comments(0Edit  收藏  举报