oracle解析失败事件,ORACLE诊断事件及深入解析10053事件
【IT168 技術文章】
Oracle 為RDBMS 提供了多種的診斷工具,診斷事件(Event)是其中一種常用、好用的方法,它使DBA 可以方便的轉儲數據庫各種結構及跟蹤特定事件的發生.
一、Event 的通常格式及分類
1、通常格式如下
EVENT=""
2、 Event 分類
診斷事件大體上可以分為四類:
a. 轉儲類事件:它們主要用于轉儲Oracle 的一些結構,例如轉儲一下控制文件、數據文件頭等內容。
b. 捕捉類事件:它們用于捕捉一些Error 事件的發生,例如捕捉一下ORA-04031 發生時一些Rdbms 信息,以判斷是Bug 還是其它原因引起的這方面的問題。
c. 改變執行途徑類事件:它們用于改主一些Oracle 內部代碼的執行途徑,例如設置10269 將會使Smon 進程不去合并那些Free 的空間。
d. 跟蹤類事件:這們用于獲取一些跟蹤信息以用于Sql 調優等方面,最典型的便是10046 了,將會對Sql 進行跟蹤。
3、說明
a. 如果immediate 放在第一個說明是無條件事件,即命令發出即轉儲到跟蹤文件。
b. trace name 位于第二、三項, 除它們外的其它限定詞是供Oracle 內部開發組用的。
c. level 通常位于1-10 之間(10046 有時用到12),10 意味著轉儲事件所有的信息。例如當轉儲控制文件時,level1 表示轉儲控制文件頭,而level 10 表明轉儲控制文件全部內容。
d. 轉儲所生成的trace 文件在user_dump_dest 初始化參數指定的位置。
二、設置的問題了
可以在init.ora 中設置所需的事件,這將對所有會話期打開的會話進行跟蹤,也可以用alter session set event 等方法設置事件跟蹤,這將打開正在進行會話的事件跟蹤。
1、在init.ora 中設置跟蹤事件的方法
a. 語法
EVENT=”event 語法|,level n|:event 語法|,level n|…”
b. 舉例
event=”10231 trace name context forever,level 10’
c. 可以這樣設置多個事件:
EVENT="\10231trace name context forever,level10:\10232trace name context forever,level10"
2、通過Alter session/system set events 這種方法舉個例子大家就明白了
Example:
Altersessionsetevents ‘immediate trace name controlflevel10’;Altersessionsetevents ‘immediate trace name blockdumplevel112511416’; (*)
在oracle8x 及之上的版本也有這樣的語句:
Alter system dump datafile 13 block 15; 實現的功能與(*)是類似的。
3、使用DBMS_SYSTEM.SET_EV 的方法
a. 過和定義如下
DBMS_SYSTEM.SET_EV(
SI Binary_integer,
SE Binary_integer,
EV Binary_integer,
LE Binary_integer,
NM Binary_integer);
SI: 即v$session 中的sid SE:即v$session 中的serial# EV: 要設置的事件LE:要設置事件的級別NM:名稱
b. 舉個例子,以10046 為例SQL> EXECUTE SYS.DBMS_SYSTEM.SET_EV(sid,serial#,10046,12,'''');
4、使用Oradebug 來設置診斷事件的方法同樣舉個例子大家就明白了:
a. 找到spid SQL>select username, sid, serial#, paddr from v$session where username=''qiuyb'';
USERNAME SID SERIAL# PADDR
HRB3 265 910 C000000084435AD8
SQL>SELECT ADDR,PID,SPID FROM V$PROCESS WHERE ADDR=
C000000084435AD8'';
ADDR PID SPID
C000000084435AD8 91 4835
b. 設置事件,以10046 為例sqlplus /nolog SQL>connect / as sysdba; SQL>oradebug setospid 4835
SQL>oradebug unlimit --不限制轉儲文件的大小SQL> oradebug event 10046 trace name context
forever,level 12 --設置事件進行sql 跟蹤
SQL> oradebug event 10046 trace name context off --關閉跟蹤,注意不要用oradug 去跟蹤oracle 的smon,pmon 等幾個進程,操作不當可能會殺掉這幾個后臺進和引起宕庫。
三、可能遇到的問題
1、我如何知道在系統中設置了哪些event?
回答:
a. 如果你的事件是在init.ora 中設置的可以用SQL>show parameter event;
來查看
b.
Michael R.Ault 給的SQL serveroutputonsize1000000declareevent_levelnumber;beginforiin10000..10999loop sys.dbms_system.read_ev(i,event_level);if(event_level>0)thendbms_output.put_line(''Event''||to_char(i)||''setatlevel''||to_char(event_level));endif;endloop;end;/
2、在oracle9i 中使用spfile 的那種如何設置診斷事件呢?
回答:
簡單,Alter system 命令就可以完成
alter system set event=''10046 trace name context forever, level 12'' scope=spfile;
重啟一下就生效了。
3、壞了,我的9i 設置完診斷事件,起不來了,報ORA-02194 錯怎么辦?
回答:
那你一定是在使用Alter system 時把某一項寫錯了, 比如把context 寫成了conetxt 了,
可以做如下的解決:
a.由spfile 生成pfile
SQL>create pfile from spfile;
File created.
b.編輯pfile 以修正錯誤
Change... *.event=''10046 trace name conetxt forever, level 12''
-to- *.event=''10046 trace name context forever, level 12''
c.用pfile 啟動
SQL>startup pfile=/.....
d.重新生成 SPFILE. SQL>create spfile from pfile; File created. 不同事件 level 有不同的意思例如:
10046 level 1:跟蹤sql 語句,包括解析、執行、提取、提交和回滾等。level 4:包括變量的詳細信息level
8:包括等待事件level 12:包括綁定變量與等待事件
我們可以通過下面的語句在SQLPLUS 中來得到可用Oracle 診斷事件列表
SETSERVEROUTPUTONDECLAREerr_msgVARCHAR2(120);BEGINdbms_output.enable (1000000);FORerr_numIN10000..10999LOOP
err_msg :=SQLERRM (-err_num);IFerr_msgNOTLIKE''%Message''||err_num||''notfound%''THENdbms_output.put_line (err_msg);ENDIF;ENDLOOP;END;/
通常事件不需要Oracle Support ,例如:
1、分析數據文件塊,轉儲數據文件n 的塊m alter system dump datafile n block m
2、分析日志文件alter system dump logfile logfilename;
3、分析控制文件的內容alter session set events ''immediate trace name CONTROLF level
10''
4、分析所有數據文件頭alter session set events ''immediate trace name FILE_HDRS level
10''
5、分析日志文件頭alter session set events ''immediate trace name REDOHDR level 10''
6、分析系統狀態,最好每10 分鐘一次,做三次對比alter session set events ''immediate trace
name SYSTEMSTATE level 10''
7、分析進程狀態alter session set events ''immediate trace name PROCESSSTATE level 10''
8、分析Library Cache 的詳細情況alter session set events ''immediate trace name
library_cache level 10''
總結
以上是生活随笔為你收集整理的oracle解析失败事件,ORACLE诊断事件及深入解析10053事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 增加 oracle服务名,oracle本
- 下一篇: oracle 分表设计,oracle 分