mysql 事件跟踪_ORACLE 事件跟踪
跟蹤文件 Oracle跟蹤文件分為三種類(lèi)型: 1:警告日志文件。記錄了數(shù)據(jù)庫(kù)啟動(dòng)、運(yùn)行、關(guān)閉時(shí)的活動(dòng)情況。當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)問(wèn)題時(shí),首先要查看該文件,文件名為alert_sid.log 2:后臺(tái)跟蹤文件。記錄了oracle后臺(tái)進(jìn)程的運(yùn)行狀況,名稱(chēng)為sid_processname_processid.t
跟蹤文件
Oracle跟蹤文件分為三種類(lèi)型:
1:警告日志文件。記錄了數(shù)據(jù)庫(kù)啟動(dòng)、運(yùn)行、關(guān)閉時(shí)的活動(dòng)情況。當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)問(wèn)題時(shí),首先要查看該文件,文件名為alert_sid.log
2:后臺(tái)跟蹤文件。記錄了oracle后臺(tái)進(jìn)程的運(yùn)行狀況,名稱(chēng)為sid_processname_processid.trc,存儲(chǔ)目錄為BACKGROUND_dump_dest
3:用戶(hù)跟蹤文件。記錄了連接到數(shù)據(jù)庫(kù)的用戶(hù)進(jìn)程的運(yùn)行信息,名稱(chēng)為SID_ORA_PROCESSID.TRC,存儲(chǔ)目錄為USER_DUMP_DEST.
在oracle11g中,這三種文件位于同一目錄下:
跟蹤事件
設(shè)置跟蹤事件,會(huì)導(dǎo)致oracle將與該事件有關(guān)的信息轉(zhuǎn)儲(chǔ)到跟蹤文件中。依據(jù)設(shè)置事件的方式,可以將跟蹤事件分為2類(lèi):PROCESS-EVENT(通過(guò)初始化參數(shù)文件設(shè)置的事件)、SESSION-EVENT(通過(guò)alter session set events或者alter system set events設(shè)置的時(shí)間)。要使PROCESS-EVENT事件生效,必須重新啟動(dòng)數(shù)據(jù)庫(kù)實(shí)例,PROCESS-EVENT事件會(huì)影響連接到數(shù)據(jù)庫(kù)的每一個(gè)用戶(hù)進(jìn)程。在參數(shù)文件中設(shè)置多個(gè)事件可以采用“:”分隔符,如event="event1:event2:event3"。也可以依次設(shè)置多個(gè)event,如:
event="event1"
event="event2" (注意,在event1和event2之間不要存在其他參數(shù),否則只有最后的event即event2生效)。
對(duì)不同的跟蹤事件,oracle會(huì)產(chǎn)生不同的行為,根據(jù)行為的不同,我們大致可以將跟蹤事件分為4類(lèi):
1.轉(zhuǎn)儲(chǔ)oracle中的某部分內(nèi)容,如數(shù)據(jù)塊、控制文件內(nèi)容等。轉(zhuǎn)儲(chǔ)活動(dòng)會(huì)在收到跟蹤事件命令的同時(shí)執(zhí)行。這類(lèi)事件不可以通過(guò)參數(shù)文件進(jìn)行設(shè)置。
2.跟蹤錯(cuò)誤信息。設(shè)置這類(lèi)事件,oracle會(huì)將特定錯(cuò)誤的堆棧信息轉(zhuǎn)儲(chǔ)到跟蹤文件中。
3.更改oracle的執(zhí)行路徑。這類(lèi)事件會(huì)影響oracle代碼段的執(zhí)行路徑,例如10269事件,會(huì)促使smon進(jìn)程停止對(duì)free-space的合并操作。
4.跟蹤進(jìn)程的相關(guān)信息。例如10046事件和10053事件。該類(lèi)事件會(huì)將進(jìn)程上下文中的特定信息轉(zhuǎn)儲(chǔ)到跟蹤文件中。
語(yǔ)法格式
altersystem|sessionsetevents ‘[eventnumber|immediate]trace name eventname[forever][,level levelnumber]: …….’
通過(guò):符號(hào),可以連續(xù)設(shè)置多個(gè)事件,也可以通過(guò)連續(xù)使用alter session set events來(lái)設(shè)置多個(gè)事件。
格式說(shuō)明:eventnumber指觸發(fā)dump的事件號(hào),事件號(hào)可以是Oracle錯(cuò)誤號(hào)或oralce內(nèi)部事件號(hào),內(nèi)部事件號(hào)在10000到10999之間,不能與immediate關(guān)鍵字同用;immediate關(guān)鍵字表示命令發(fā)出后,立即將指定的結(jié)構(gòu)dump到跟蹤文件中,這個(gè)關(guān)鍵字只用在alter
session語(yǔ)句中,并且不能與eventnumber、forever關(guān)鍵字同用。trace name是關(guān)鍵字。eventname指事件名稱(chēng)(見(jiàn)后面),即要進(jìn)行dump的實(shí)際結(jié)構(gòu)名。若eventname為context,則指根據(jù)內(nèi)部事件號(hào)進(jìn)行跟蹤。forever關(guān)鍵字表示事件在實(shí)例或會(huì)話的周期內(nèi)保持有效狀態(tài),不能與immediate同用。level為事件級(jí)別關(guān)鍵字。但在dump錯(cuò)誤棧(errorstack)時(shí)不存在級(jí)別。levelnumber表示事件級(jí)別號(hào),一般從1到10,1表示只dump結(jié)構(gòu)頭部信息,10表示dump結(jié)構(gòu)的所有信息。
對(duì)于alter session設(shè)置的事件,僅僅只對(duì)當(dāng)前session有效。對(duì)于alter system 設(shè)置的事件,除對(duì)當(dāng)前session有效外,對(duì)新登錄的session同樣有效,但是對(duì)于alter system命令執(zhí)行之前打開(kāi)的session是無(wú)效的。
IMMEDIATE相關(guān)的事件
一.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統(tǒng)計(jì)信息
2 包含hash table histogram
3 包含object handle
4 包含object結(jié)構(gòu)(Heap 0)
3).Row Cache
Alter SESSION SET EVENTS 'immediate trace name row_cache level n';
1 row cache統(tǒng)計(jì)信息
2 包含hash table histogram
8 包含object結(jié)構(gòu)
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為某個(gè)指定block的rdba,該命令可以轉(zhuǎn)儲(chǔ)某個(gè)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內(nèi)容
2050 SGA內(nèi)容
4100 UGA內(nèi)容
8200 Current call內(nèi)容
16400 User call內(nèi)容
32800 Large call內(nèi)容
7).Sub Heap
oracle 9.0.1版本之前
Alter SESSION SET EVENTS 'immediate trace name heapdump_addr level n';
若n為subheap的地址,轉(zhuǎn)儲(chǔ)的是subheap的摘要信息
若n為subheap的地址+1,轉(zhuǎn)儲(chǔ)的則是subheap的內(nèi)容
oracle 9.2.0版本之后
Alter SESSION SET EVENTS 'immediate trace name heapdump_addr level n, addr m';
其中m為subheap的地址
n為1轉(zhuǎn)儲(chǔ)subheap的摘要,n為2轉(zhuǎn)儲(chǔ)subheap的內(nèi)容
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詳細(xì)信息
13).Latches
Alter SESSION SET EVENTS 'immediate trace name latches level n';
1 latch信息
2 統(tǒng)計(jì)信息
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 查看索引的結(jié)構(gòu)
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 + 數(shù)據(jù)完整文件頭信息
10 level 3
6).Control file
Alter SESSION SET EVENTS 'immediate trace name controlf level n';
1 控制文件中的文件頭信息
2 level 1 + 數(shù)據(jù)庫(kù)信息+檢查點(diǎn)信息
3 level 2 + 可重用節(jié)信息
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;
詳細(xì)內(nèi)容請(qǐng)看:http://blog.csdn.net/yidian815/article/details/12568027
9).Loghist
Alter SESSION SET EVENTS 'immediate trace name loghist level n';
n=1 dump控制文件中最早和最遲的日志歷史項(xiàng)
n>1 dump 2^n個(gè)日志歷史項(xiàng)
獲取診斷事件號(hào)
大部分的診斷事件的數(shù)值都是在10000至10999范圍內(nèi),使用如下的腳本可以查看到所有的診斷事件:
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;
相關(guān)的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
與該包相關(guān)的還包括幾個(gè)視圖:v$client_stats\V$SERV_MOD_ACT_STATS。
client_id 可以通過(guò)DBMS_SESSION.SET_IDENTIFIER來(lái)設(shè)置。
DBMS_SYSTEM包
關(guān)于該包的詳細(xì)信息,請(qǐng)參照:http://blog.csdn.net/yidian815/article/details/12580659
另外,我們還可以使用ORADEBUG工具。如
對(duì)一個(gè)進(jìn)程設(shè)置診斷事件:
ORADEBUG EVENT event TRACE NAME CONTEXT FOREVER, LEVEL level
禁用設(shè)置的診斷事件:
ORADEBUG EVENT event TRACE NAME CONTEXT OFF
對(duì)一個(gè)會(huì)話設(shè)置診斷事件:
ORADEBUG SESSION_EVENT event TRACE NAME CONTEXT FOREVER, LEVEL level
禁用設(shè)置的診斷事件:
ORADEBUG SESSION_EVENT event TRACE NAME CONTEXT OFF
查看當(dāng)前SESSION設(shè)置的事件
SET SERVEROUTPUT ON
DECLARE
l_level NUMBER;
BEGIN
FOR l_event IN 10000..10999
LOOP
dbms_system.read_ev (l_event,l_level);
IF l_level > 0 THEN
dbms_output.put_line ('Event '||TO_CHAR (l_event)||
' is set at level '||TO_CHAR (l_level));
END IF;
END LOOP;
END;
其他注意事項(xiàng)
確定使用的診斷事件對(duì)于當(dāng)前的Oracle數(shù)據(jù)庫(kù)版本是合法的:因?yàn)閷?duì)于不同版本的Oracle數(shù)據(jù)庫(kù)來(lái)說(shuō),診斷事件的含義和用法都有所不同。
確定使用的診斷事件允許設(shè)定的級(jí)別,在很多時(shí)候設(shè)定的級(jí)別不同是會(huì)影響到診斷事件所代表的行為的。
在INITSID.ORA文件中設(shè)置的任何診斷事件,如果Oracle數(shù)據(jù)庫(kù)需要升級(jí),一定要提前注釋或者取消。
本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請(qǐng)注明出處,感謝您的尊重!
總結(jié)
以上是生活随笔為你收集整理的mysql 事件跟踪_ORACLE 事件跟踪的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 你真的了解什么是智能座舱么(域控制器篇)
- 下一篇: Oracle数据库的基础