ITPub博客

首页 > 应用开发 > IT综合 > 诊断事件(1)

诊断事件(1)

原创 IT综合 作者:jixuewen 时间:2007-11-16 14:25:36 0 删除 编辑
ORACLE有四种类型的内部事件: u 直接DUMP(Immediate dumps) u 设定条件DUMP(Conditional dumps) u Trace dumps u 通过事件设定修改数据库工作特性 每一个事件都有一个事件号,事件号跟ORACLE的错误信息的编码是一样的.如10046和ORA-10046。每一个事件都有一个Level,可以是以下几种形式: n 范围1到10 n 位标 0x01 0x02 0x04 0x08 0x10 n 标识 0=off,1=on n ID号 对象ID(object id),内存地址(memory address) 要注意的是,ORACLE内部事件在每一个版本之间都有一定的改变。有一些存在的事件可能在新版本的数据库中已经不可用了,有些事件号会由新的事件所替代掉.也要注意在当前的版本中message file不一定可以反映出所有事件的特征。很多事件会影响数据库的行为,设置事件是一种有风险的操作,某些事件极有可能导致数据库宕掉。在没有ORACLE技术支持的前提下,最好不要在实际运行系统上做事件操作.开发系统上如果要做事件操作最好先做个数据库的全备份. 事件可以在Instance一级激活,可以在配置文件中设置: event='event trace name context forever, level level'; 一次可以激活多个事件,可以用以下两种方式: l 用一个冒号隔开: event = "10248 trace name context forever, level 10:10249 trace name context forever, level 10" l 两个两个事件分开写 event="10248 trace name context forever, level 10" event="10249 trace name context forever, level 10" 事件也可以在Instance一级用ALTER SYSTEM命令来激活: ALTER SYSTEM SET EVENTS 'event trace name context forever, level level'; 在Instance一级用以下命令激活: ALTER SYSTEM SET EVENTS 'event trace name context off'; 事件也可以在Session一级用ALTER SESSION命令来激活: ALTER SESSION SET EVENTS 'event trace name context forever, level level'; 在Session一级用以下命令激活: ALTER SESSION SET EVENTS 'event trace name context off'; 事件也可以用ORADEBUG来激活, 在一个进程中实现激活: ORADEBUG EVENT event TRACE NAME CONTEXT FOREVER, LEVEL level 在某个进程中激活事件的命令如下: ORADEBUG SETORAPID 8(PID进程号) ORADEBUG EVENT event TRACE NAME CONTEXT FOREVER, LEVEL level 用以下命令激活: ORADEBUG EVENT event TRACE NAME CONTEXT OFF 下面命令可以用ORADEBUG在Session中实现事件激活: ORADEBUG SESSION_EVENT event TRACE NAME CONTEXT FOREVER, LEVEL level 在Session中实现激活: ORADEBUG SESSION_EVENT event TRACE NAME CONTEXT OFF Events也可以用DBMS_SYSTEM.SET_EV包来实现激活(在做之前要先从V$session视图中获得SID和Serial#)。用以下方式: EXECUTE DBMS_SYSTEM.SET_EV(SID,Serial#,event,level, '') 比如: EXECUTE dbms_system.set_ev (9,29,10046,8,''); 要去活则将level改为0,如: EXECUTE dbms_system.set_ev (9,29,10046,0,''); 有时候DBA需要在参数文件中设置事件,在文本的参数文件(PFILE)中设置事件很方便,只需要加入类似event='10325 trace name context forever, level 10'的文字就可以了。在SPFILE中也可以实现这样的功能。在SPFILE中添加事件的例子如下: ALTER SYSTEM SET EVENT='10325 trace name context forever, level 10', '10015 trace name context forever, level 1' COMMENT='Debug tracing of control and rollback' SCOPE=SPFILE; 要注意的是,事件的设置范围只能是SPFILE,不能在当前INSTANCE中设置。当数据库启动到NOMOUNT状态的时候,就可以设置事件。如果要重新设置或者清除设置,使用如下命令: ALTER SYSTEM RESET EVENT SCOPE=SPFILE ; 在UNIX系统下,系统信息文件$ORACLE_HOME/rdbms/mesg/oraus.msg里面可以查看到所有的诊断事件。使用下面的脚本也可以查看目前系统中哪些事件是被激活的: SET SERVEROUTPUT ON DECLARE l_level NUMBER; BEGIN FOR l_event IN 10000..10999 LOOP dbms_system.read_ev (l_event,l_level); IF l_level > 0 THEN dbms_output.put_line ('Event '||TO_CHAR (l_event)|| ' is set at level '||TO_CHAR (l_level)); END IF; END LOOP; END; /[@more@]http://www.oraclefans.cn/blog/showblog.jsp?rootid=5342

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/564597/viewspace-982600/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    95
  • 访问量
    1994319