ORACLE診斷事件
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.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/64429/viewspace-997322/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle診斷事件列表Oracle事件
- ORACLE診斷事件(zt)Oracle事件
- Oracle診斷事件列表(轉)Oracle事件
- oracle 事件診斷詳細Oracle事件
- Oracle所有診斷事件列表eventsOracle事件
- Oracle診斷事件例項(一)Oracle事件
- oracle 10053診斷事件Oracle事件
- ORACLE診斷事件的總結Oracle事件
- zt_oracle診斷事件event列表Oracle事件
- 診斷事件(1)事件
- oracle診斷事件及深入解析10053事件Oracle事件
- 等待事件快速定位診斷事件
- 等待事件效能診斷方法事件
- oracle 10046事件故障診斷一例Oracle事件
- ORACLE診斷案例Oracle
- Oracle故障診斷Oracle
- oracle小知識點16-診斷事件diagnostic eventsOracle事件
- oracle 12c 新增的診斷事件的初步嘗試Oracle事件
- 【event messages】使用PL/SQL獲取Oracle診斷事件列表SQLOracle事件
- oracle 效能診斷工具Oracle
- 基於等待事件的效能診斷事件
- oracle診斷工具-RDA使用Oracle
- oracle sqlt(sqltxplain) 診斷工具OracleSQLAI
- Oracle診斷工具RDA使用Oracle
- Oracle效能診斷藝術Oracle
- 基於等待事件的效能診斷(轉)事件
- 如何診斷等待事件 enq: HW - contention事件ENQ
- 轉_診斷latch:shared pool等待事件事件
- latch free 等待事件的診斷語句事件
- 9 Oracle Data Guard 故障診斷Oracle
- Oracle診斷案例-Sql_traceOracleSQL
- oracle之 redo過高診斷Oracle
- Oracle中診斷阻塞的sessionOracleSession
- 【Oracle】資料庫hang 診斷Oracle資料庫
- Oracle GoldenGate(OGG)診斷OracleGo
- Oracle效能診斷一例Oracle
- 【轉】oracle診斷工具-RDA使用Oracle
- Oracle配置資料庫診斷Oracle資料庫