1.解读DSI——DSI301

1.解读DSI——DSI301

1     DSI3*的全部课程

DSI培训至少需要在RDBMS上工作了12个月以上。

DSI301:高级服务技术技能

DSI302:数据管理(主要回滚操作)

DSI303:数据库备份和恢复(REDO机制)

DSI304:查询管理(如何解释和修改执行计划)

DSI305:数据库调优

DSI306:大型数据库

DSI307:分布式和复制架构

DSI308:讨论oracle 7和oracle 8i的并行服务

2     DSI301

l  如何提供过事件来诊断ORACLE问题,

l  描述hang,loop,crash诊断进程。

l  理解,定位,诊断堆错误。

是DSI302~308的基础。

l  DUMP数据块

l  处理块崩溃

l  处理回滚段崩溃

l  如何使用DUL(Data Unloader Utility)

3     源码阅读

DSI301的第一部分是源码阅读。

之前ORACLE员工是可以得到源码进行阅读学习的,要求工作6月以上然后获得主管同意即可。现在貌似不行了。真是可惜了。

代码里面你可以得到你想要的任何东西。

这里就列下常用的文件转换

kt 表示kerneltransaction

kd kernel data

       kckernel cache

       kskernel services

       ktukernel transaction undo

       ksekernel service error

错误信息:

Oracle 错误:ORA-nnn

Oracle 内部错误:ORA-600

       ORA-600: internal error code

       例如:2845,193,20,5255等

4     使用事件

诊断dump和事件可以分为四类

l  Immediate dump

l  On-error dump

l  Change behavior

l  Trace

可以通过如下使用事件:

l  事件初始化参数

l  ALTER SESSION SET EVENTS或ALTER SYSTEM SET EVENTS

l  Sys.dbms_system.set_ev()

l  Oradebug工具

其中altersession set events ‘<event name> <action>’

事件是复杂问题的辅助,对于那些问题必须创建trace文件。

Trace真是的个大话题,这里展开会扰乱总体布局,就含泪飘过了。

4.1     Immediate dumps

是最常用的immediatedump事件

Alter session set events ‘immediate tracename <dump> level <level>’

Immediate dump 不能被参数文件激活。可以使用ORADEBUG或dbms_system.set_ev()

4.2     On-Error dumps

类似immediatedump,只不过只有在错误发生的时候才进行DUMP。

最常用的是ERRORSTACK,错误堆栈。可以DUMP发生错误时候的调用堆栈。

使用例如

Event=”<error> trace name errorstacklevel <level>”

Error可以使任何的ORA错误。

使用ORADEBUG如下

Oradebug event <error> trace nameerrorstack level <level>

DUMP ORA-60的话,设置如下:

Event=”60 trace name errorstack level 1”

4.3     Change Behavior

可以改变ORACLE动作,使能隐藏特性,指定优化。

4.4     Trace events

Trace events产生一个诊断的trace

Trace events收集附加的信息便于理解和解决

不同的event code表示不同的事情

例如10015表示undo segment recovery

10046等于设置sql_trace=true

总结如下图1

4.5     Oracle Event事件工作原理

进程启动的时候有初始化的event参数,可以被alter session或alter ssytem命令进行修改。

有两组事件,会话事件和进程事件。

进程事件在进程启动时候通过初始化参数设定,会话事件可以动态进行设置。

先查询会话事件再查询进程事件。

如下图2

5     诊断

如果ORACLE实例异常终端,ORACLE会产生大量诊断信息。大多数情况下,TRACE文件足够定位问题了。当用户进程异常死掉后,RDBMS会产生一个TRACE文件,如:

ora_<process_id>.trc

也可以使用工具在进程正常的时候来产生trace文件。

当存在可用的trace文件(包含调用堆栈)的时候,core files不能提供更多的信息了。

当trace文件丢失后,可以通过core files来产生调用堆栈。

5.1     Alter.log

每个实例产生一个alert.log文件。

       包含:后台进程和前台进程的诊断数据;错误和指向trace文件的详细信息,数据库启动开始的信息。

       路径在background_dump_dest 指定的位置。

5.2     TRACE FILE

每个服务进程碰到异常后,会写诊断数据到TRACE文件

TRACE文件的头包含以下信息:

操作系统版本,数据块版本是安装选项,实例名字,进程ID。

在TRACE文件中,最重要的是堆栈的TRACE,堆栈TRACE是调用的顺序,结合代码可就可以理解问题。

5.3     应用日志文件

应用日志文件会记录异常,例如SQLPLUS会话的SPOOL文件,EXPORT/IMPORT的日志文件。

CORE FIEL是进程的内存DUMP,使用DEBUGGER工具例如ADB可以从中抽取堆栈TRACE。

5.4     系统日志文件

从OS层面捕获系统日志文件。如果发生硬件或OS问题会很有用。

以上四点虽然具体针对的是ORACLE数据库问题定位,但是展开来也是有“普世”意义的,先看ORACLE本身的ALERT,然后查看TRACE,不过都没问题那看是不是应用引起的,如果不是应用那是不是操作系统呢?这样一层一层,抓住问题的本质,就是方法论哦。

其他的大型应用也可以从这个角度出发。

6     关于hang

进程在等一个永远不会发生的事情,就会HANG住。

要发现这个事件,可以使用:

l  多个状态DUMP

l  v$session_wait,v$lock,v$latch,v$latchholder

可以发现HANG住的原因。

HANG住时候不会消耗CPU资源。

查看有用的列:

Sid,seq#,event,wait,seconds,state

7     Loop

进程循环不停止。

要发现这个事件,可以使用:

l  多个状态DUMP

l  v$session_wait,v$lock,v$latch,v$latchholder

如果一个进程没有HUNG也没有LOOP,那么就需要调优了。

分析BSTTAT/ESTAT和TKPROF输出时一个很好地起点。

8     状态对象

状态对象是SGA中的结构,例如:后台和前台进程,会话,LATCH和ENQUEUES等。

PMON会清除失败的资源。

9     数据字典对象

数据字典视图对诊断hang或loop很有用

V$session_wait,v$session_event,v$latch,v$latchholder,v$latchname,v$sysstat,v$lock

$process,v$session,v$transaction,x$kcbfwait(bufferwaits),x$ksqst(enqueues)

查看v$session_wait例子如下:

Select sid,seq#,eventwait_time,seconds_in_wait,state from v$session_wait;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值