ORACLE 跟蹤工具

zhengbao_jun發表於2014-05-27
二、說一說設定的問題了

  可以在init.ora中設定所需的事件,這將對所有會話期開啟的會話進行跟蹤,也可以用alter session set event 等方法設定事件跟蹤,這將開啟正在進行會話的事件跟蹤。
  
  1、 在init.ora中設定跟蹤事件的方法
  a. 語法
  EVENT=”event 語法|,level n|:event 語法|,level n|…”
  b. 舉例
  event=”10231 trace name context forever,level 10’
  c. 可以這樣設定多個事件:
  EVENT="
  10231 trace name context forever, level 10:
  10232 trace name context forever, level 10"
  
  2、 通過Alter session/system set events這種方法
  舉個例子大家就明白了
  Example:
  Alter session set events ‘immediate trace name controlf level 10’;
  Alter session set events ‘immediate trace name blockdump level 112511416’; (*)
  在oracle8x及之上的版本也有這樣的語句:
  Alter system dump datafile 13 block 15;實現的功能與(*)是類似的。
  
  3、 使用DBMS_SYSTEM.SET_EV的方法
  a. 過和定義如下
  DBMS_SYSTEM.SET_EV(
  SI Binary_integer,
  SE Binary_integer,
  EV Binary_integer,
  LE Binary_integer,
  NM Binary_integer);
  
  SI: 即v$session中的sid
  SE:即v$session中的serial#
  EV:要設定的事件
  LE:要設定事件的級別
  NM:名稱
  b. 舉個例子,以10046為例
  SQL> EXECUTE SYS.DBMS_SYSTEM.SET_EV(sid,serial#,10046,12,'');
  
  4、 使用Oradebug來設定診斷事件的方法
  同樣舉個例子大家就明白了:
  a. 找到spid
  SQL>select username, sid, serial#, paddr from v$session where username='qiuyb';
  
  USERNAME SID SERIAL# PADDR
  --------------------------------------------------------
  HRB3 265 910 C000000084435AD8
  
  SQL>SELECT ADDR,PID,SPID FROM V$PROCESS WHERE ADDR= C000000084435AD8';
  ADDR PID SPID
  ------------------------------------------
  C000000084435AD8 91 4835
  
  b. 設定事件,以10046為例
  sqlplus /nolog
  SQL>connect / as sysdba;
  SQL>oradebug setospid 4835
  SQL>oradebug unlimit   --不限制轉儲檔案的大小
  SQL> oradebug event 10046 trace name context forever,level 12 --設定事件進行sql跟蹤
  
  SQL> oradebug event 10046 trace name context off --關閉跟蹤
  
  注意不要用oradug去跟蹤oracle的smon,pmon等幾個程式,操作不當可能會殺掉這幾個後臺進和引起宕庫。

  三、你可能的問題  

  1、 我如何知道在系統中設定了哪些event?
  回答:
  a. 如果你的事件是在init.ora中設定的可以用
  SQL>show parameter event;
  來檢視
  b. Michael R.Ault給的SQL
  serveroutput on size 1000000
  declare
  event_level number;
  begin
  for i in 10000..10999 loop
  sys.dbms_system.read_ev(i,event_level);
  if (event_level > 0) then
  dbms_output.put_line('Event '||to_char(i)||' set at level '||
  to_char(event_level));
  end if;
  end loop;
  end;
  /
  
  2、 在oracle9i中使用spfile的那種如何設定診斷事件呢?
  回答:
  簡單,Alter system命令就可以完成
  alter system set event='10046 trace name context forever, level 12' scope=spfile;
  重啟一下就生效了。
  
  3、 壞了,我的9i設定完診斷事件,起不來了,報ORA-02194錯怎麼辦?
  回答:
  那你一定是在使用Alter system時把某一項寫錯了,比如把context寫成了conetxt了,可以做如下的解決:
  a.由spfile生成pfile
  SQL>create pfile from spfile;
  File created.
  
  b.編輯pfile以修正錯誤
  Change... *.event='10046 trace name conetxt forever, level 12'
  -to- *.event='10046 trace name context forever, level 12'
  c.用pfile啟動
  SQL>startup pfile=/.....
  d.重新生成 SPFILE.
  SQL>create spfile from pfile;
  File created.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/235507/viewspace-1170995/,如需轉載,請註明出處,否則將追究法律責任。

相關文章