您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關怎么理解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事件。該類事件會將進程上下文中的特定信息轉儲到跟蹤文件中。
語法格式
alter system|session set events ‘[eventnumber|immediate]trace nameeventname[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范圍內,使用如下的腳本可以查看到所有的診斷事件:
[sql]
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;
/
上述就是小編為大家分享的怎么理解ORACLE事件跟蹤了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。