layer opcode oracle,ORACLE 事件追踪
ORACLE 事件跟蹤
跟蹤文件
Oracle跟蹤文件分為三種類型:
1:警告日志文件。記錄了數據庫啟動、運行、關閉時的活動情況。當數據庫出現問題時,首先要查看該文件,文件名為alert_sid.log
2:后臺跟蹤文件。記錄了oracle后臺進程的運行狀況,名稱為sid_processname_processid.trc,存儲目錄為BACKGROUND_dump_dest
3:用戶跟蹤文件。記錄了連接到數據庫的用戶進程的運行信息,名稱為SID_ORA_PROCESSID.TRC,存儲目錄為USER_DUMP_DEST.
在oracle11g中,這三種文件位于同一目錄下:
跟蹤事件
設置跟蹤事件,會導致oracle將與該事件有關的信息轉儲到跟蹤文件中。依據設置事件的方式,可以將跟蹤事件分為2類:PROCESS-EVENT(通過初始化參數文件設置的事件)、SESSION-EVENT(通過alter session set events或者alter system set events設置的時間)。要使PROCESS-EVENT事件生效,必須重新啟動數據庫實例,PROCESS-EVENT事件會影響連接到數據庫的每一個用戶進程。在參數文件中設置多個事件可以采用“:”分隔符,如event="event1:event2:event3"。也可以依次設置多個event,如:
event="event1"
event="event2" (注意,在event1和event2之間不要存在其他參數,否則只有最后的event即event2生效)。
對不同的跟蹤事件,oracle會產生不同的行為,根據行為的不同,我們大致可以將跟蹤事件分為4類:
1.轉儲oracle中的某部分內容,如數據塊、控制文件內容等。轉儲活動會在收到跟蹤事件命令的同時執行。這類事件不可以通過參數文件進行設置。
2.跟蹤錯誤信息。設置這類事件,oracle會將特定錯誤的堆棧信息轉儲到跟蹤文件中。
3.更改oracle的執行路徑。這類事件會影響oracle代碼段的執行路徑,例如10269事件,會促使smon進程停止對free-space的合并操作。
4.跟蹤進程的相關信息。例如10046事件和10053事件。該類事件會將進程上下文中的特定信息轉儲到跟蹤文件中。
語法格式
altersystem|sessionsetevents?‘[eventnumber|immediate]trace?name?eventname[forever][,level?levelnumber]:??…….’
通過:符號,可以連續設置多個事件,也可以通過連續使用alter session set events來設置多個事件。
格式說明:eventnumber指觸發dump的事件號,事件號可以是Oracle錯誤號或oralce內部事件號,內部事件號在10000到10999之間,不能與immediate關鍵字同用;immediate關鍵字表示命令發出后,立即將指定的結構dump到跟蹤文件中,這個關鍵字只用在alter
session語句中,并且不能與eventnumber、forever關鍵字同用。trace name是關鍵字。eventname指事件名稱(見后面),即要進行dump的實際結構名。若eventname為context,則指根據內部事件號進行跟蹤。forever關鍵字表示事件在實例或會話的周期內保持有效狀態,不能與immediate同用。level為事件級別關鍵字。但在dump錯誤棧(errorstack)時不存在級別。levelnumber表示事件級別號,一般從1到10,1表示只dump結構頭部信息,10表示dump結構的所有信息。
對于alter session設置的事件,僅僅只對當前session有效。對于alter system 設置的事件,除對當前session有效外,對新登錄的session同樣有效,但是對于alter system命令執行之前打開的session是無效的。
IMMEDIATE相關的事件
一.Memory?Dumps
1).Global?Area
Alter?SESSION?SET?EVENTS?'immediate?trace?name?global_area?level?n';
1?包含PGA
2?包含SGA
4?包含UGA
8?包含indrect?memory
2).Library?Cache
Alter?SESSION?SET?EVENTS?'immediate?trace?name?library_cache?level?n';
1?library?cache統計信息
2?包含hash?table?histogram
3?包含object?handle
4?包含object結構(Heap?0)
3).Row?Cache
Alter?SESSION?SET?EVENTS?'immediate?trace?name?row_cache?level?n';
1?row?cache統計信息
2?包含hash?table?histogram
8?包含object結構
4).Buffers
Alter?SESSION?SET?EVENTS?'immediate?trace?name?buffers?level?n';
1?buffer?header
2?level?1?+?block?header
3?level?2?+?block?contents
4?level?1?+?hash?chain
5?level?2?+?hash?chain
6?level?3?+?hash?chain
8?level?4?+?users/waiters
9?level?5?+?users/waiters
10?level?6?+?users/waiters
5).Buffer
Alter?SESSION?SET?EVENTS?'immediate?trace?name?buffer?level?n';
n為某個指定block的rdba,該命令可以轉儲某個block在buffer中的所有版本。
6).Heap
Alter?SESSION?SET?EVENTS?'immediate?trace?name?heapdump?level?level';
1?PGA摘要
2?SGA摘要
4?UGA摘要
8?Current?call(CGA)摘要
16?User?call(CGA)摘要
32?Large?call(LGA)摘要
1025?PGA內容
2050?SGA內容
4100?UGA內容
8200?Current?call內容
16400?User?call內容
32800?Large?call內容
7).Sub?Heap
oracle?9.0.1版本之前
Alter?SESSION?SET?EVENTS?'immediate?trace?name?heapdump_addr?level?n';
若n為subheap的地址,轉儲的是subheap的摘要信息
若n為subheap的地址+1,轉儲的則是subheap的內容
oracle?9.2.0版本之后
Alter?SESSION?SET?EVENTS?'immediate?trace?name?heapdump_addr?level?n,?addr?m';
其中m為subheap的地址
n為1轉儲subheap的摘要,n為2轉儲subheap的內容
8).Process?State
Alter?SESSION?SET?EVENTS?'immediate?trace?name?processstate?level?n';
9).System?State
Alter?SESSION?SET?EVENTS?'immediate?trace?name?systemstate?level?n';
10).Error?State
Alter?SESSION?SET?EVENTS?'immediate?trace?name?errorstack?level?n';
0?Error?stack
1?level?0?+?function?call?stack
2?level?1?+?process?state
3?level?2?+?context?area
11).Hang?Analysis
Alter?SESSION?SET?EVENTS?'immediate?trace?name?hanganalyze?level?n';
12).Work?Area
Alter?SESSION?SET?EVENTS?'immediate?trace?name?workareatab_dump?level?n';
1?SGA信息
2?Workarea?Table摘要信息
3?Workarea?Table詳細信息
13).Latches
Alter?SESSION?SET?EVENTS?'immediate?trace?name?latches?level?n';
1?latch信息
2?統計信息
14).Events
Alter?SESSION?SET?EVENTS?'immediate?trace?name?events?level?n';
1?session
2?process
3?system
15).Locks
Alter?SESSION?SET?EVENTS?'immediate?trace?name?locks?level?n';
16).Shared?Server?Process
Alter?SESSION?SET?EVENTS?'immediate?trace?name?shared_server_state?level?n';
n取值為1~14
17).Background?Messages
Alter?SESSION?SET?EVENTS?'immediate?trace?name?bg_messages?level?n';
n為pid+1
二.File?Dumps
1).Block
oracle?7之前
Alter?SESSION?SET?EVENTS?'immediate?trace?name?blockdump?level?n';
n為block的rdba
oracle8以后
Alter?SYSTEM?DUMP?DATAFILE?file#?BLOCK?block#;
Alter?SYSTEM?DUMP?DATAFILE?file#
BLOCK?MIN?minimum_block#
BLOCK?MAX?maximum_block#
2).Tree?Dump???查看索引的結構
Alter?SESSION?SET?EVENTS?'immediate?trace?name?treedump?level?n';
n為object_id
object_id可以從select?object_id?from?user_objects?where?object_name?=?'索引的名字'得到。
3).Undo?Segment?Header??查看回滾段頭部信息
Alter?SYSTEM?DUMP?UNDO_HEADER?'segment_name';
4).Undo?for?a?Transaction
Alter?SYSTEM?DUMP?UNDO?BLOCK?'segment_name'?XID?xidusn?xidslot?xidsqn;
5).File?Header
Alter?SESSION?SET?EVENTS?'immediate?trace?name?file_hdrs?level?n';
1 控制文件中的文件頭信息
2?level?1?+ 通用文件頭信息
3?level?2?+?數據完整文件頭信息
10?level?3
6).Control?file
Alter?SESSION?SET?EVENTS?'immediate?trace?name?controlf?level?n';
1??控制文件中的文件頭信息
2?level?1?+?數據庫信息+檢查點信息
3?level?2?+?可重用節信息
10?level?3
7).Redo?log?Header
Alter?SESSION?SET?EVENTS?'immediate?trace?name?redohdr?level?n';
1?控制文件中的redo?log信息
2?level?1?+ 通用文件頭信息
3?level?2?+ 完整日志文件頭信息
10?level?3
8).Redo?log
Alter?SYSTEM?DUMP?LOGFILE?'FileName';
Alter?SYSTEM?DUMP?LOGFILE?'FileName'
SCN?MIN?MinimumSCN
SCN?MAX?MaximumSCN
TIME?MIN?MinimumTime
TIME?MAX?MaximumTime
LAYER?Layer
OPCODE?Opcode
DBA?MIN?FileNumber?.?BlockNumber
DBA?MAX?FileNumber?.?BlockNumber
RBA?MIN?LogFileSequenceNumber?.?BlockNumber
RBA?MAX?LogFileSequenceNumber?.?BlockNumber;
其中time?=?(((((yyyy?-?1988))?*?12?+?mm?-?1)?*?31?+?dd?-?1)?*?24?+?hh)?*?60?+?mi)?*?60?+?ss;
詳細內容請看:http://blog.csdn.net/yidian815/article/details/12568027
9).Loghist
Alter?SESSION?SET?EVENTS?'immediate?trace?name?loghist?level?n';
n=1?dump控制文件中最早和最遲的日志歷史項
n>1 dump 2^n個日志歷史項
獲取診斷事件號
大部分的診斷事件的數值都是在10000至10999范圍內,使用如下的腳本可以查看到所有的診斷事件:
SET SERVEROUTPUT ON
DECLARE
err_msg VARCHAR2(120);
BEGIN
dbms_output.enable (1000000);
FOR err_num IN 10000..10999
LOOP
err_msg := SQLERRM (-err_num);
IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN
dbms_output.put_line (err_msg);
END IF;
END LOOP;
END;
相關的PLSQL包
DBMS_MONITOR包
Subprogram
Description
CLIENT_ID_STAT_DISABLE
Procedure
Disables statistic gathering previously enabled for a given Client Identifier
CLIENT_ID_STAT_ENABLE
Procedure
Enables statistic gathering for a given Client Identifier
CLIENT_ID_TRACE_DISABLE
Procedure
Disables the trace previously enabled for a given Client Identifier globally for the database
CLIENT_ID_TRACE_ENABLE
Procedure
Enables the trace for a given Client Identifier globally for the database
DATABASE_TRACE_DISABLE
Procedure
Disables SQL trace for the whole database or a specific instance
DATABASE_TRACE_ENABLE
Procedure
Enables SQL trace for the whole database or a specific instance
SERV_MOD_ACT_STAT_DISABLE
Procedure
Disables statistic gathering enabled for a given combination of Service Name,?MODULE?and?ACTION
SERV_MOD_ACT_STAT_ENABLE
Procedure
Enables statistic gathering for a given combination of Service Name,?MODULE?and?ACTION
SERV_MOD_ACT_TRACE_DISABLE
Procedure
Disables the trace for ALL enabled instances for a or a given combination of Service Name,?MODULEand?ACTION?name globally
SERV_MOD_ACT_TRACE_ENABLE
Procedure
Enables SQL tracing for a given combination of Service Name,?MODULE?and?ACTION?globally unless aninstance_name?is specified
SESSION_TRACE_DISABLE
Procedure
Disables the previously enabled trace for a given database session identifier (SID) on the local instance
SESSION_TRACE_ENABLE Procedure
Enables the trace for a given database session identifier (SID) on the local instance
與該包相關的還包括幾個視圖:v$client_stats\V$SERV_MOD_ACT_STATS。
client_id 可以通過DBMS_SESSION.SET_IDENTIFIER來設置。
DBMS_SYSTEM包
關于該包的詳細信息,請參照:http://blog.csdn.net/yidian815/article/details/12580659
另外,我們還可以使用ORADEBUG工具。
總結
以上是生活随笔為你收集整理的layer opcode oracle,ORACLE 事件追踪的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tcp send阻塞问题
- 下一篇: Java如何判断一个上传文件的内容类型