在之前的HangAnalyze 中有使用oradebug命令,在这篇文章里,我们主要是重点看一下这个oradebug命令:

Oracle HANGANALYZE 功能诊断 DB hanging

http://www.cndba.cn/Dave/article/1562

一.  Oradebug 命令 帮助文档

SYS@dave2(db2)> oradebug help

Command

Arguments

Description

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

DUMP

<dump_name> <lvl> [addr]

Invoke named dump

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/UGA variable

SETVAR

<p|s|uga> <name> <value>

Modify a fixed PGA/SGA/UGA variable

PEEK

<addr> <len> [level]

Print/Dump memory

POKE

<addr> <len> <value>

Modify memory

WAKEUP

<orapid>

Wake up Oracle process

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

LKDEBUG

 

Invoke global enqueue service debugger

NSDBX

 

Invoke CGS name-service debugger

-G

<Inst-List | def | all>

Parallel oradebug command prefix

-R

<Inst-List | def | all>

Parallel oradebug prefix (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 SGA as COW; dirname in double quotes

MAPCOWSGA

<SGA dump dir>

Map SGA as COW; dirname in double quotes

HANGANALYZE

[level]

Analyze system hang

FFBEGIN

 

Flash Freeze the Instance

FFDEREGISTER

 

FF deregister instance from cluster

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 a region of memory

DELETE

<local|global|target> watchpoint <id>

Delete a watchpoint

SHOW

<local|global|target> watchpoints

Show watchpoints

CORE

 

Dump core without crashing process

UNLIMIT

 

Unlimit the size of the trace file

PROCSTAT

 

Dump process statistics

CALL

<func> [arg1] ... [argn]

Invoke function with arguments

1.1 TRACEFILE_NAME command

This command prints the name of the current trace file e.g.

SQL>oradebug tracefile_name

For example

/export/home/admin/SS92003/udump/ss92003_ora_14917.trc

This command does not work on Windows 2000 (Oracle 9.2)

1.2 UNLIMIT command

In Oracle 8.1.5 and below the maximum size of the trace file is restricted by default. This means that large dumps (LIBRARY_CACHE, BUFFERS) may fail.

To remove the limitation on the size of the trace file use

SQL>oradebug unlimit

In Oracle 8.1.6 and above the maximum size of the trace file defaults to UNLIMITED

1.3 FLUSH command

To flush the current contents of the trace buffer to the trace file use

SQL>oradebug flush

1.4 CLOSE_TRACE command

To close the current trace file use

SQL>oradebug close_trace

二.  追踪进程

如果是系统的进程ID,可以使用oradebug setospid id.

如果是根据Oracle ID,可以使用oradebug setorapid id 来追踪。

2.1 查询进程ID

可以查询Linux系统的pid或是oracle自己的pid:

SYS@dave2(db2)> select a.username,a.sid ,a.serial#,b.spid  from v$session a,v$process b where a.paddr=b.addr;

USERNAME    SID    SERIAL# SPID

---------- ---------- ---------- ------------

SYS               159       1702 27028

查询spid

SYS@dave2(db2)> select pid,spid,username from v$process;

PID SPID         USERNAME

---------- ------------ ----------

18 27028        oracle

v$process 下的pid 是Oracle 的ID。spid 是系统的ID。

2.2 设定追踪

SYS@dave2(db2)> oradebug setospid 27028  -- 根据系统ID

Oracle pid: 18, Unix process pid: 27028, image: oracledave2@db2

或者使用,他们是一样的:

SYS@dave2(db2)> oradebug setorapid 18   --根据Oracle ID

Unix process pid: 27028, image: oracledave2@db2

2.3  dump 相关文件信息

指定为SID 之后,就可以使用dump 将相关的信息,这些dump 内容很多。 可以使用dumplist 把所有的dump 可列出来。

具体使用,可以参考:

http://psoug.org/reference/oradebug.html

SYS@dave2(db2)> 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

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

SYS@dave2(db2)>

在这些dump选项中,大部分都有2,4,6,8,10,12等几个跟踪级别。在使用的时候要根据具体的情况来选择级别,不同级别的影响不一样。

2.3.1 获得系统状态

如果为了获取全面一点的信息,可以使用Level 10。

SYS@dave2(db2)> oradebug setospid 27028

Oracle pid: 18, Unix process pid: 27028, image: oracledave2@db2

SYS@dave2(db2)> oradebug unlimit

Statement processed.

SYS@dave2(db2)> oradebug dump systemstate 10

Statement processed.

SYS@dave2(db2)> oradebug TRACEFILE_NAME

/u01/app/oracle/admin/dave2/udump/dave2_ora_27028.trc

SYS@dave2(db2)> oradebug close_trace

Statement processed.

[oracle@db2 ~]$ tail -50 /u01/app/oracle/admin/dave2/udump/dave2_ora_27028.trc

last process to post me: none

last post sent: 0 0 0

last post sent-location: No post

last process posted by me: none

(latch info) wait_event=0 bits=0

Process Group: DEFAULT, pseudo proc: 0x2e24c604

O/S info: user: , term: , ospid:

OSD pid info: Unix process pid: 0, image: PSEUDO

Dump of memory from 0x2E207970 to 0x2E207AF4

2E207970 00000000 00000000 00000000 00000000  [................]

Repeat 23 times

2E207AF0 00000000                             [....]

NO DETACHED BRANCHES.

NO DETACHED NETWORK CONNECTIONS.

CLEANUP STATE OBJECTS:

----------------------------------------

SO: 0x2e03465c, type: 1, owner: (nil), flag: INIT/-/-/0x00

(cleanup state object) description: instance enqueue anchor state

latch: 0x2000502c

----------------------------------------

SO: 0x2e3b9bc0, type: 5, owner: 0x2e03465c, flag: INIT/-/-/0x00

(enqueue) TA-00000006-00000001        DID: 0001-000F-0000000D

lv: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  flag: 0x2

res: 2d8362f4, mode: X, prv: 2d8362fc, own: 0, sess: 0

----------------------------------------

SO: 0x2e0346a0, type: 1, owner: (nil), flag: INIT/-/-/0x00

(cleanup state object) description: switchable channel handle anch

latch: 0x200059cc

----------------------------------------

SO: 0x2d87ac7c, type: 11, owner: 0x2e0346a0, flag: INIT/-/-/0x00

(broadcast handle) flag: (c2) ACTIVE SUBSCRIBER, owner: (nil),

event: 1, last message event: 1,

last message waited event: 1, messages read: 0

channel: (0x2d8827f0) KPON channel

scope: 2, event: 1, last mesage event: 0,

publishers/subscribers: 0/1,

messages published: 0

----------------------------------------

SO: 0x2e0346e4, type: 1, owner: (nil), flag: INIT/-/-/0x00

(cleanup state object) description: TT shared object cleanup SO

latch: 0x2000dc98

----------------------------------------

SO: 0x2e034728, type: 1, owner: (nil), flag: INIT/-/-/0x00

(cleanup state object) description: SS shared object cleanup SO

latch: 0x2000dfa4

END OF SYSTEM STATE

*** 2011-06-04 05:28:17.743

Received ORADEBUG command 'TRACEFILE_NAME' from process Unix process pid: 27042, image:

*** 2011-06-04 05:32:21.241

Received ORADEBUG command 'close_trace' from process Unix process pid: 27042, image:

[oracle@db2 ~]$

如果系统hung的时候,systemstate基本等同于hanganalyze,可以用于诊断system hung

关于hanganalyze 参考:

Oracle HANGANALYZE 功能诊断 DB hanging

http://www.cndba.cn/Dave/article/1562

2.3.2  获得某个进程状态

SYS@dave2(db2)> oradebug setospid 27028

Oracle pid: 18, Unix process pid: 27028, image: oracledave2@db2

-- 注意,这里必须是Oracle 的进程

SYS@dave2(db2)> oradebug dump processstate 10

Statement processed.

SYS@dave2(db2)> oradebug TRACEFILE_NAME

/u01/app/oracle/admin/dave2/udump/dave2_ora_27028.trc

SQL> oradebug setospid 3188

2.3.3 获得进程的错误信息状态

SYS@dave2(db2)> oradebug dump errorstack 3;

Statement processed.

SYS@dave2(db2)> oradebug TRACEFILE_NAME

/u01/app/oracle/admin/dave2/udump/dave2_ora_27028.trc

三.  Trace  SQL

3.1 Trace a session SQL

3.1.1 使用DBMS_SYSTEM包

SQL>select a.username,a.sid ,a.serial#,b.spid from v$session a,v$process b  where a.paddr=b.addr;

USERNAME                              SID    SERIAL# SPID
------------------------------ ---------- ---------- -------------------- ---------- ---------- -------
SCOTT                                 143          6    3260

--开启对该进程的trace,记录在trace文件中:

执行SQL> execute dbms_system.set_sql_trace_in_session(143,6,true);

--关闭追踪

执行SQL> execute dbms_system.set_sql_trace_in_session(143,6,false);

3.1.2使用oradebug

SQL> oradebug setospid 3260  --进程的spid

SQL> oradebug event 10046 trace name context forever,level 4

-- 取消追踪使用

SQL> oradebug event 10046 trace name context off

已处理的语句

3.1.3 Tracing errors use oradebug

例如要追踪能造成ORA-0094/952错误的会话,

SQL> oradebug event 942 trace name errorstack level 3

SQL> oradebug event 952 trace name errorstack level 3

四.  Events 事件

关于Events,  eygle 的blog有说明,参考:

http://www.eygle.com/digest/2008/04/oracle_internal_events_introdu.html

Events可以在Instance一级Enabled,主要是在init.ora文件中做操作:

event='event trace name context forever, level level';

一次可以Enable多个事件,可以用以下两种方式:

(1) 用一个冒号隔开

event = "10248 trace name context forever, level 10:10249 trace name context forever, level 10"

(2) 两个Events分开写

event="10248 trace name context forever, level 10"

event="10249 trace name context forever, level 10"

#一些版本的Oracle,event要一样的大小写

instance级别event:

enable:

SQL>alter system set events 'event trace name context forever, level level';

Disable:

SQL>alter system set events 'event trace name context off';

Session 级别Event:

--Enable:

SQL>alter session set events 'event trace name context forever, levellevel';

--Disable:

SQL>alter session set events 'event trace name context off';

Oradebug  Events:

--Process中Enable:

SQL>oradebug event event trace name context forever, level level

--进程中Enable:

SQL>oradebug setorapid 8(pid进程号)

SQL>oradebug event event trace name context forever, level level

--Disable:

SQL>oradebug event event trace name context off

Session Events:

--Enable:

SQL>oradebug session_event event trace name context forever, level level

--Disable:

SQL>oradebug session_event event trace name context off

使用DBMS_SYSTEM.SETEV包来实现Enable和Disable

先从V$session视图中获得SID和Serial#

--Enable:

SQL>execute dbms_system.set_ev(sid,serial#,event,level, '')

SQL>execute dbms_system.set_ev (9,29,10046,8,'');

--Disable则将level改为0

SQL> execute dbms_system.set_ev (9,29,10046,0,'');

五.  Other Data

From:

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

5.1 DUMP command

To perform a dump use

SQL>oradebug dump dumpname level

For example for a level 4 dump of the library cache use

SQL>oradebug setmypid

SQL>oradebug dump library_cache 4

5.2 EVENT command

To set an event in a process use

SQL>oradebug event event trace name context forever, level level

For example to set event 10046, level 12 in Oracle process 8 use

SQL>oradebug setorapid 8

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

5.3 SESSION_EVENT command

To set an event in a session use

SQL>oradebug session_event event trace name context forever, level level

For example

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

5.4 DUMP SGA

To dump the fixed SGA use

SQL>oradebug dumpsga

5.5 DUMPVAR

To dump an SGA variable use

SQL>oradebug dumpvar sga variable_name

e.g.

SQL>oradebug dumpvar sga kcbnhb

which returns the number of hash buckets in the buffer cache. The names of SGA variables can be found in X$KSMFSV.KSMFSNAM. Variables in this view are suffixed with an underscore e.g.  kcbnhb_

5.6 PEEK

To peek memory locations use

SQL>oradebug peek address length

where address can be decimal or hexadecimal and length is in bytes

For example

SQL>ORADEBUG PEEK 0x20005F0C 12

returns 12 bytes starting at location 0x20005f0c

5.7 POKE

To poke memory locations use

SQL>ORADEBUG POKE address length value

where address and value can be decimal or hexadecimal and length is in bytes

For Example

SQL>ORADEBUG POKE 0x20005F0C 4 0x46495845

SQL>ORADEBUG POKE 0x20005F10 4 0x44205349

SQL>ORADEBUG POKE 0x20005F14 2 0x5A45

-- WARNING Do not use the POKE command on a production system

5.8 IPC

To dump information about operating system shared memory and semaphores configuration use the command

SQL>ORADEBUG IPC

This command does not work on Windows NT or Windows 2000 (Oracle 9.2)

On Solaris, similar information can be obtained using the operating system command

ipcs -b

5.9 Dumping the SGA

In some versions it is possible to dump the entire SGA to a file

Freeze the instance using

SQL>oradebug ffbegin

Dump the SGA to a file using

SQL>oradebug sgatofile directory

Unfreeze the instance using

SQL>oradebug ffresumeinst

oradebug工具使用(转载)的更多相关文章

  1. vs2015添加ActiveX Control Test Container工具(转载)

    http://blog.csdn.net/lphbtm/article/details/8647565 vs2010 中添加 ActiveX Control Test Container工具(转载) ...

  2. oradebug工具使用3(转载)

    1 oradebug介绍 oradebug主要是给oracle支持人员使用的,尽管很早便有,但oracle官网很少有记载.他是个sql*plus命令行工具,有sysdba的权限就可以登入,无需特别设置 ...

  3. oradebug工具使用2(转载)

    oradebug的前身是在ORACLE 7时的ORADBX,它可以启动用停止跟踪任何会话,dump SGA和其它内存结构,唤醒ORACLE进程,如SMON.PMON进程,也可以通过进程号使进程挂起和恢 ...

  4. 用Python做自然语言处理必知的八个工具【转载】

    Python以其清晰简洁的语法.易用和可扩展性以及丰富庞大的库深受广大开发者喜爱.其内置的非常强大的机器学习代码库和数学库,使Python理所当然成为自然语言处理的开发利器. 那么使用Python进行 ...

  5. IT项目管理工具总结(转载)

    以前用过一个cs版的忘记叫啥名了,还用个禅道,感觉一般“5. 测试管理: 项目软件缺陷Bug状态跟踪”在公司内部自己测试或者试用期上线后后期维护阶段用的多,有的公司单独做个系统让用户提问题来修改,也是 ...

  6. Delphi--最强大的开发工具(欢迎转载)

    最强大的开发工具 Delphi 目录 --------------------------------------------------------------------------- 前言 De ...

  7. 电脑上不安装Oracle时,C# 调用oracle数据库,Oracle客户工具 【转载】

    http://www.cnblogs.com/jiekzou/p/5047850.html Oracle的安装包通常都比较大,安装又比较费时,而且如果安装过程中不幸出错,各种蛋疼,即便是安装过N遍的老 ...

  8. GitHub上整理的一些工具【转载】

    技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 ...

  9. Web界面的服务器监测工具(转载)

    企业服务器对于企业业务持续性意义重大,系统管理员需要密切关注企业服务器以确保一切正常运行.当发现问题的时候,他们需要知道问题开始出现时的状况,因此调查可以重点放在问题出现的时候,这就意味着定期记录信息 ...

随机推荐

  1. linux学习笔记27--监控命令ps和top,free

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  2. RxBinding -- 官网说明

    RxBinding -- 官网说明 新建 模板 小书匠 作用 组件 平台绑定 support-v4 绑定 appcompact-v7 绑定 design 库绑定 recyclerview-v7 绑定 ...

  3. VS2015调用Matlab2017a环境配置(转载)

    VS2015调用Matlab2017a环境配置 一定要在Debug+x64平台下进行配置,x64,x64,x64!!!* 1.配置环境变量 右键计算机—–>属性——>高级系统设置——> ...

  4. c# 中的UserControl是什么 用户控件和自定义控件有什么区别

    用户控件是许多控件的集成 自定义控件是自己写一个控件类,或者继承已有的控件类 复合控件是封装在公共容器内的 Windows 窗体控件的集合.这种控件有时称为“用户控件”.包含的控件称为“构成控件”. ...

  5. modbus学习

  6. Hadoop项目实战

    这个项目是流量经营项目,通过Hadoop的离线数据项目. 运营商通过HTTP日志,分析用户的上网行为数据,进行行为轨迹的增强. HTTP数据格式为: 流程: 系统架构: 技术选型: 这里只针对其中的一 ...

  7. thinkphp5 No input file specified.

    .htaccess文件中的 RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 在默认情况下会导致No input file specified. 修改成 Rewri ...

  8. k8s入门

    一个目标:容器操作:两地三中心:四层服务发现:五种Pod共享资源:六个CNI常用插件:七层负载均衡:八种隔离维度:九个网络模型原则:十类IP地址:百级产品线:千级物理机:万级容器:相如无亿,K8s有亿 ...

  9. mfc小工具开发之定时闹钟之---二十四小时时区和时间段

    1.凌晨0:00-6:00时显示凌晨,上午6:00-12:00显示上午,中午12:00-14:00显示中午,下午14:00-显示下午,晚上18:00-24:00显示晚上 2. 早上:6-8:上午8-1 ...

  10. Flash AS 2.0右键菜单问题

    这几天都在忙这个右键菜单,因为之前的右键菜单都不能用了,必须做新的. 可是又必须使用原来2.0的接口和方法,真是忙的焦头烂额. 之前2.0的东西太多又太杂. 我头一个右键菜单和二级菜单没有问题了,做第 ...