11.未公开的Oracle数据库秘密笔记——ORADEBUG使用
ORADEBUG是诊断性能和挂起问题的有效工具。能够合适正确的IP地址,帮助实时应用集群实例间的通信。11g之前,ORADEBUG TRACEFILE_NAME是用来确定一个进程写入追踪文件名字的唯一途径。
该工具主要是给ORACLE支持人员使用的,所以很少有记载。但是该工具还是非常有用的。
ORADEBUG主要用于调式和跟踪。
主要如下:
l SQL能够追踪你自己的服务进程以及外部服务进程
l 确定一个进程正往哪个追踪文件写入
l 转储内部的ORACLE结构来诊断数据库挂起以及内存损坏情况
l 转储数据文件头部信息或撤销分割头部
l 确定DBMS实例使用哪些共享内存块和信号量
l 找出RAC实例使用那些互联地址和协议
l 修改SGA中的数据结构
1. 命令
sys@ORCL> ORADEBUG HELP
HELP [command] Describe one or all commands
SETMYPID Debug current process
SETOSPID <ospid> Set OS pid of process to debug
SETORAPID <orapid> ['force'] Set Oracle pid of process to debug
SETORAPNAME <orapname> Set Oracle process name to debug
SHORT_STACK Get abridged OS stack
CURRENT_SQL Get current SQL
DUMP <dump_name> <lvl>[addr] Invoke named dump
PDUMP [interval=<interval>] Invoke named dump periodically
[ndumps=<count>] <dump_name> <lvl> [addr]
DUMPSGA [bytes] Dump fixed SGA
DUMPLIST Print a list of available dumps
EVENT <text> Set trace event in process
SESSION_EVENT <text> Set trace event in session
DUMPVAR <p|s|uga> <name>[level] Print/dump a fixed PGA/SGA/UGAvariable
DUMPTYPE <address> <type><count> Print/dump an address withtype info
SETVAR <p|s|uga> <name><value> Modify a fixed PGA/SGA/UGAvariable
PEEK <addr> <len> [level] Print/Dump memory
POKE <addr> <len> <value> Modify memory
WAKEUP <orapid> Wake up Oracleprocess
SUSPEND Suspend execution
RESUME Resume execution
FLUSH Flush pending writes to trace file
CLOSE_TRACE Close trace file
TRACEFILE_NAME Get name of trace file
SETTRACEFILEID <identifier name> Set tracefile identifier
LKDEBUG Invoke global enqueue service debugger
NSDBX Invoke CGS name-service debugger
-G <Inst-List | def | all | cluster >Nodes involved
-R <Inst-List | def | all | cluster >Nodes involved (return output)
SETINST <instance# .. | all> Set instance list in double quotes
SGATOFILE <SGA dump dir> Dump SGA to file; dirname in double quotes
DMPCOWSGA <SGA dump dir> Dump & map SGAas COW; dirname in double quotes
MAPCOWSGA <SGA dump dir> Map SGA as COW; dirname in double quotes
HANGANALYZE [level] [syslevel] Analyze system hang
FFBEGIN Flash Freeze the Instance
FFDEREGISTER FF deregister instance fromcluster
FFTERMINST Call exit and terminate instance
FFRESUMEINST Resume the flash frozen instance
FFSTATUS Flash freeze status of instance
SKDSTTPCS <ifname> <ofname> Helps translate PCs to names
WATCH <address> <len><self|exist|all|target> Watch aregion of memory
DELETE <local|global|target> watchpoint<id> Delete a watchpoint
SHOW <local|global|target> watchpoints Show watchpoints
DIRECT_ACCESS <set/enable/disable command | selectquery> Fixed table access
IPC Dump ipc information
IPC_TRACE <module> <trace_flags><trace_level>
Modify IPC trace flags
IPC_CHECKSUM <light/medium/full>
Enable/DisableIPC Checksumming
UNLIMIT Unlimit the size of the trace file
CALL [-t count] <func>[arg1]...[argn] Invoke function witharguments
CORE Dump core without crashing process
PROCSTAT Dump process statistics
这个帮助文本非常详细。
2. 连接到一个进程
ORADEBUGSETMYPID
ORADEBUGSETORAPID pid
ORADEBUGSETOSPID spid
3. ORADEBUG IPC
ORADEBUG IPC能够用于找出一个ORACLE实例可能使用了哪些共享的内存块。如果使用信号量同步,信号量也会被跟踪到。
#ipcs –mb
列出共享内存块及其拥有者和大小。
转储IPC信息。
如下:
SQL>ORADEBUGSETMYPID
SQL>ORADEBUGIPC
SQL>ORADEBUGTRACEFILE_NAME
4. ORADEBUG SHORT_STACK
ERRORSTACK转储将结果存储在一个很大的跟踪文件里面。SHORT_STACK更适合于迅速找出一个服务进程位于调用路径中的哪一个步骤。
5. 诊断转储
运行ORADEBUG DUMPLIST可以列出各种转储的名字。
CONTROLF用于不同细节级别转储控制文件。
EVENTS转储不是真正的诊断转储,只是将激活的事件写入跟踪文件。
关于级别和范围,如下图1:
6. ERRORSTACK
一个程序的调用栈可以通过ERRORSTACK的诊断转储获得。
例如:ORADEBUG DUMP ERRORSTACK 1
7. HANGANALYZE
HANGANALYZE命令执行悬挂分析转储(hanganalysis dump).
8. MODIFIED_PARAMETERS
转储MODIFIED_PARAMETERS选项进行的转储,可以将通过ALTER SESSION或ALTER SYSTEM命令修改过的初始化参数保存到跟踪文件中。
9. PROCSTAT以及进程级别的操作系统统计
通过ORADEBUG PROCSTAT命令将进程级别的操作系统的统计结果转储到跟踪文件中。