診斷事件(1)

jixuewen發表於2007-11-16
ORACLE有四種型別的內部事件: u 直接DUMP(Immediate dumps) u 設定條件DUMP(Conditional dumps) u Trace dumps u 透過事件設定修改資料庫工作特性 每一個事件都有一個事件號,事件號跟ORACLE的錯誤資訊的編碼是一樣的.如10046和ORA-10046。每一個事件都有一個Level,可以是以下幾種形式: n 範圍1到10 n 位標 0x01 0x02 0x04 0x08 0x10 n 標識 0=off,1=on n ID號 物件ID(object id),記憶體地址(memory address) 要注意的是,ORACLE內部事件在每一個版本之間都有一定的改變。有一些存在的事件可能在新版本的資料庫中已經不可用了,有些事件號會由新的事件所替代掉.也要注意在當前的版本中message file不一定可以反映出所有事件的特徵。很多事件會影響資料庫的行為,設定事件是一種有風險的操作,某些事件極有可能導致資料庫宕掉。在沒有ORACLE技術支援的前提下,最好不要在實際執行系統上做事件操作.開發系統上如果要做事件操作最好先做個資料庫的全備份. 事件可以在Instance一級啟用,可以在配置檔案中設定: event='event trace name context forever, level level'; 一次可以啟用多個事件,可以用以下兩種方式: l 用一個冒號隔開: event = "10248 trace name context forever, level 10:10249 trace name context forever, level 10" l 兩個兩個事件分開寫 event="10248 trace name context forever, level 10" event="10249 trace name context forever, level 10" 事件也可以在Instance一級用ALTER SYSTEM命令來啟用: ALTER SYSTEM SET EVENTS 'event trace name context forever, level level'; 在Instance一級用以下命令啟用: ALTER SYSTEM SET EVENTS 'event trace name context off'; 事件也可以在Session一級用ALTER SESSION命令來啟用: ALTER SESSION SET EVENTS 'event trace name context forever, level level'; 在Session一級用以下命令啟用: ALTER SESSION SET EVENTS 'event trace name context off'; 事件也可以用ORADEBUG來啟用, 在一個程式中實現啟用: ORADEBUG EVENT event TRACE NAME CONTEXT FOREVER, LEVEL level 在某個程式中啟用事件的命令如下: ORADEBUG SETORAPID 8(PID程式號) ORADEBUG EVENT event TRACE NAME CONTEXT FOREVER, LEVEL level 用以下命令啟用: ORADEBUG EVENT event TRACE NAME CONTEXT OFF 下面命令可以用ORADEBUG在Session中實現事件啟用: ORADEBUG SESSION_EVENT event TRACE NAME CONTEXT FOREVER, LEVEL level 在Session中實現啟用: ORADEBUG SESSION_EVENT event TRACE NAME CONTEXT OFF Events也可以用DBMS_SYSTEM.SET_EV包來實現啟用(在做之前要先從V$session檢視中獲得SID和Serial#)。用以下方式: EXECUTE DBMS_SYSTEM.SET_EV(SID,Serial#,event,level, '') 比如: EXECUTE dbms_system.set_ev (9,29,10046,8,''); 要去活則將level改為0,如: EXECUTE dbms_system.set_ev (9,29,10046,0,''); 有時候DBA需要在引數檔案中設定事件,在文字的引數檔案(PFILE)中設定事件很方便,只需要加入類似event='10325 trace name context forever, level 10'的文字就可以了。在SPFILE中也可以實現這樣的功能。在SPFILE中新增事件的例子如下: ALTER SYSTEM SET EVENT='10325 trace name context forever, level 10', '10015 trace name context forever, level 1' COMMENT='Debug tracing of control and rollback' SCOPE=SPFILE; 要注意的是,事件的設定範圍只能是SPFILE,不能在當前INSTANCE中設定。當資料庫啟動到NOMOUNT狀態的時候,就可以設定事件。如果要重新設定或者清除設定,使用如下命令: ALTER SYSTEM RESET EVENT SCOPE=SPFILE ; 在UNIX系統下,系統資訊檔案$ORACLE_HOME/rdbms/mesg/oraus.msg裡面可以檢視到所有的診斷事件。使用下面的指令碼也可以檢視目前系統中哪些事件是被啟用的: 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; /[@more@]http://www.oraclefans.cn/blog/showblog.jsp?rootid=5342

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/564597/viewspace-982600/,如需轉載,請註明出處,否則將追究法律責任。

相關文章