dump oracle events(轉)
轉自:http://chenzs19850728.blog.163.com/blog/static/7629609200812475646182/
我們經常會發現某些人會問如下面的這些問題:
“這個oracle塊裡面到底是怎麼存這些資料的?”
“死鎖發生的時候,我怎麼知道是哪幾個物件發生的死鎖?”
“oracle是怎麼執行這個操作的?”
“oracle的library cache是什麼個樣子?”
……
這個時候,可能就有人會如下的回答這樣的問題:
“你dump一下這個塊吧!”
“你可以設定60事件跟蹤一下吧。”
“你做一個10046事件跟蹤一下吧。”
“你可以dump一下記憶體的library cache啊。”
……
等等如上問題,其實都只是需要dump某個oracle的event的問題。dump是一個動詞,它代表一種操作,說的簡單一點,拿記憶體舉例,就是原封不動的把某一片記憶體給展現出來;拿跟蹤舉例,就是它原始的展示了oracle處理某個問題的過程等等。很顯然,各位這裡就有幾個關鍵問題出現了。第一當然就是event,它是什麼樣子的?一共有哪些event?知道了這些event過後,那麼第二我們就會問,如果來dump這些oracle的event?再之後就是,dump出來的東西以後,我們怎麼來看懂這些東西?或者說這些東西是什麼個含義?本文會回答第一和第二個問題,至於第三個問題,各位看官需要程式研究metalink,相信會有不少收穫的。
首先,我們就來說說event,它是什麼樣子的?
event的定義
event的定義很簡單,可以簡單的如下面這個圖表示:
即event = event_name + action。這裡分別來解釋一下它的兩個組成要素。
首先,這裡的event name是一個event的名字或者是event的程式碼。如果event name不是“immediate”,那麼oracle解析器會在event name table中找到這個event。關於immediate event,它是一個特殊的event,它顯示一個立即的無條件的event,它不會等待其他人去提交它而立即執行。
其次,這裡的action是什麼樣子呢?如下:
也就是說action是由一個action keyword和一個或者多個qualifier(值)組成。於是,我也需要來解釋一下這兩個部分。
這裡的action keyword是如下三個值:
crash:它會引起一個oracle crash,一般是為了測試recovery的時候才用它。
debugger:呼叫一個系統的debugger。(invokes a system debugger if any)
trace:is context specific or named context-independent ones。
因此,我們不打算討論crash和debugger的情況,這兩個值一般是oracle的核心開發人員使用。我們這裡只討論trace的情況。
當action keyword是“trace”的時候,這裡的qulifier的可如下指定:
這裡有必要解釋一下
英文的表達是這樣的:
這裡的“context”,你可以理解成它是一種特殊的
這裡的3個trace qualifiers含義分別是:
“forever”:表示這個trace一旦設定,每當這個event發生的時候,就啟用這個trace。
“off”:表示對這個event關閉這個trace。
“level
綜上所述,event可大概的如下表示為:
event_name CRASH ....
event_name DEBUGGER ....
event_name TRACE NAME trace_name|CONTEXT [ FOREVER|OFF|LEVEL
這個裡面“|”表示“或者”,“[]”表示出現一次或者多次。
上面已經清楚的介紹了event的結構,回答了event是什麼?它是什麼樣子?的問題。
那麼在oracle中一共有哪些event呢?oracle中的event有很多個,具體有哪些,在unix或者類unix系統中,可在檔案“$ORACLE_HOME/rdbms/mesg/oraus.msg”中檢視。在大體上面,event可以分為四類,,並且如何來設定這四類event呢?下面就來說說這個問題。
[@more@] event的分類和dumporacle中的event根據它們的用途,可以分為如下四類,分別是:
1. immediate dump
2. on-error dump
3. change behavior
4. trace
這四類event,分別對應下面四種不同的用途:
1. dump diagnostic information on request
2. dump diagnostic information when an error occurs
3. change database behavior
4. produce trace diagnostics as the database runs
那麼,如何設定這四類event呢?或者說如果dump這四類event呢?可以有四種方法來dump:
1、 在parameter file中使用event initialization parameter
2、 alter session|system set events
3、 sys.dbms_system.set_ev()
4、 oradebug
下面來分別解釋一下這四類event。
immediate dumps
這類event都是根據要求隨時dump相應的內容到一個trace file中。常見的immediate dumps包括有:檔案頭部的dump(如controlf,redohdr,file_hdrs),系統狀態的dump(systemstate),程式的狀態的dump(processtate)。
這類dump,很顯然不能在parameter file中使用event initialization parameter。其他三種方法都可以使用,其中alter session最常用:
1. alter session set events ‘immediate trace name
2. oradebug dump
3. sys.dbms_system.set_ev(sid,serial#,65535,
這裡的
舉例如下:
1. alter session set events ‘immediate trace name controlf level 10’;
2. execute sys.dbms_system.set_ev(7,10,65535,10,’controlf’);
3. oradebug setospid 4081;
oradebug dump controlf 10;
on-error dumps
這類dump和immdiate dumps很類似,只不過它發生的時間是前面的錯誤event發生的時候。event name就是oracle的ORA-nnn錯誤程式碼,如死鎖的錯誤程式碼是ORA-00060
常見的一種on-error dump是dump出出錯時候的程式的呼叫棧,trace name是errorstack。下面我就對這種常見的on-error dump的level說明一下:
level description
0 error stack only
1 error stack and function call stack (if implemented)
2 as 1 plus process state
3 as 2 plus the context area (all cursors and current cursor highlighted).
這類event該如何dump能,它可以使用下面的三種方法:
1. 在parameter file中設定event = “
2. alter session set events ‘
3. 在繫結一個程式以後,oradebug session_event
舉例如下:
如當死鎖發生的時候,dump出的呼叫棧資訊的event是:
1. 在parameter file中設定event = “60 trace name errorstack level 1”;這樣每當死鎖發生的時候,它的相關資訊就被dump到相應的trace file中。
2. alter session set events ‘60 trace name errorstack level 1’;
3. > oradebug setospid 4018;
> oradebug unlimit;
> oradebug dump errorstack 1;
change behavior dumps
當這類事件發生的時候,你可以透過dump做如下的操作:
1. change the oracle server’s behavior
2. enable hidden features
3. work around problems
4. perform specialized tuning
這類事件的dump設定一般都是在parameter file中設定:
event = “
如阻止SMON合併空閒空間事件如下設定:
event = “10269 trace name context forever,level 10”。
trace events dumps
這類event的dump,就是dump出event的trace內容,方便解決與跟蹤問題。這類event的常用的dump設定方法是在parameter file中或者使用alter session:
1. event = “
2. alter session|system set events ‘
如alter session set events ‘10046 trace name context forever,level 12’;
下面對各類event的dump設定語法做一個總結,如下表:
uses of diagnostic dumps and events |
event name |
trace name |
immediate dump |
IMMEDIATE |
|
on-error dump |
error# |
ERRORSTACK |
change behavior |
event# |
CONTEXT |
trace |
event# |
CONTEXT |
這裡需要注意的一點是,不要給這個表格的表象所矇蔽,如on-error dump的trace name就只能是ERRORSTACK,它只是大多數的情況下是這個trace name(大部分的情況下,我們把一種trace name稱為一種dump),實際上on-error dump也可以和其他的dump相聯絡在一起,如event = '60 trace name processstate level 10',這個就是說在60錯誤事件(即死鎖)發生的時候,以級別10去dump這個process的state。因此event='event_name TRACE NAME dump_name,level'是說明當某個event發生的時候,以級別level去dump某個trace name(即某種dump)。這點是一定要注意的。
oracle是如何處理各種event的呢?或者說是按照什麼順利來處理那麼多的設定的event呢?請看下圖:
此圖反應了oracle的執行event的內部順序,從途中可以看到先執行session event,後執行process event。那麼什麼是session event,什麼又是process event呢?
Pocess events are initialized at process startup with the “event” initialization parameter.即在parameter file中設定的那些event。
Session events are modified dynamically with an ALTER SESSION or ALTER SYSTEM command.即使用alter session 或者alter system設定的那些event。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7312700/viewspace-1016641/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE EVENTS(轉)Oracle
- 轉:Oracle常用dump命令Oracle
- Oracle 常用dump命令 - 轉Oracle
- Oracle常用dump命令(轉)Oracle
- Oracle:dump轉儲檔案Oracle
- oracle eventsOracle
- 轉載-Oracle 常用的dump命令Oracle
- (轉)Oracle常用dump命令介紹Oracle
- (轉)oracle dump block格式說明OracleBloC
- ORACLE中的DUMP轉儲方法Oracle
- Oracle 常用 Dump 命令收集(轉帖)Oracle
- Oracle中DUMP轉儲方法 收藏Oracle
- Oracle中DUMP的轉儲方法Oracle
- oracle10g_alter session set events 'immediate trace name controlf level 8'dumpOracleSession
- oracle set eventsOracle
- 使用events DUMP buffer cache中指定的資料塊
- Oracle常用dump命令介紹[轉貼]Oracle
- alter session set events語句dump 控制檔案頭資訊示例Session
- oracle dump blockOracleBloC
- ORACLE BLOCK DUMPOracleBloC
- ORACLE dump kshOracle
- oracle dump 命令Oracle
- Oracle RAC Wait EventsOracleAI
- oracle dump詳解Oracle
- oracle dump 函式Oracle函式
- oracle dump commandOracle
- Oracle dump函式Oracle函式
- Oracle常用dump命令Oracle
- Oracle 常用dump命令Oracle
- In Oracle,How to use dumpOracle
- Oracle Enqueues Wait Events 二OracleENQAI
- Oracle Enqueues Wait Events 一OracleENQAI
- Oracle Enqueues Wait Events 三OracleENQAI
- Oracle跟蹤事件 -- set eventsOracle事件
- 幾個ORACLE wait eventsOracleAI
- Oracle 跟蹤檔案和檔案轉儲(dump)Oracle
- alter session set events語句dump REDO日誌檔案頭資訊示例Session
- Oracle所有診斷事件列表eventsOracle事件