国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

全面介紹Oracle的診斷事件

2024-08-29 13:34:38
字體:
來源:轉載
供稿:網友

  Oracle為RDBMS提供了多種的診斷工具,診斷事件(Event)是其中一種常用、好用的方法,它使DBA可以方便的轉儲數據庫各種結構及跟蹤特定事件的發生。   一、Event的通常格式及分類 
 
  1、 通常格式如下:
  EVENT="<事件名稱><動作><跟蹤項目><范圍限定>"
  
  2、 Event分類
  診斷事件大體上可以分為四類:
  a. 轉儲類事件:它們主要用于轉儲Oracle的一些結構,例如轉儲一下控制文件、數據文件頭等內容。
  b. 捕捉類事件:它們用于捕捉一些Error事件的發生,例如捕捉一下ORA-04031發生時一些Rdbms信息,以判定是Bug還是其它原因引起的這方面的問題。
  c. 改變執行途徑類事件:它們用于改主一些Oracle內部代碼的執行途徑,例如設置10269將會使Smon進程不去合并那些Free的空間。
  d. 跟蹤類事件:這們用于獲取一些跟蹤信息以用于Sql調優等方面,最典型的便是10046了,將會對Sql進行跟蹤。

  3、 說明:
  a. 假如immediate放在第一個說明是無條件事件,即命令發出即轉儲到跟蹤文件。
  b. trace name位于第二、三項,除它們外的其它限定詞是供Oracle內部開發組用的。
  c. level通常位于1-10之間(10046有時用到12),10意味著轉儲事件所有的信息。例如當轉儲控制文件時,level1表示轉儲控制文件頭,而level 10表明轉儲控制文件全部內容。
  d. 轉儲所生成的trace文件在user_dump_dest初始化參數指定的位置。
跟蹤類別  事件名稱  動作 (Action)  Name  跟蹤項目  范圍限定  轉儲類事件 immediate Trace “name” blockdump  redohdr  file_hdrs  controlf  systemstate Level block#  Level 10  Level 10  Level 10  Level 10 捕捉類事件 Error number Trace “name” Error stack  PRocessstate  Heapdump Foreve  Off  Level nr 改變執行途徑類事件 Even code corresponding to path Trace “name” Context Forever or  Level 10 跟蹤類事件 10046 Trace “name” Context Forever  Level n  off     二、說一說設置的問題了   可以在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.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和硕县| 嘉义县| 靖西县| 翼城县| 泰兴市| 濉溪县| 昌都县| 康马县| 河池市| 临西县| 镇雄县| 龙南县| 彰化市| 达孜县| 阜阳市| 忻城县| 阿克陶县| 荔浦县| 思南县| 宁晋县| 伽师县| 平湖市| 临安市| 同江市| 元氏县| 神木县| 石河子市| 嘉善县| 永德县| 烟台市| 太原市| 苍溪县| 杭锦后旗| 邵东县| 外汇| 本溪市| 湘潭市| 承德市| 南和县| 江孜县| 沾益县|