日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle解析失败事件,ORACLE诊断事件及深入解析10053事件

發(fā)布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle解析失败事件,ORACLE诊断事件及深入解析10053事件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【IT168 技術(shù)文章】

Oracle 為RDBMS 提供了多種的診斷工具,診斷事件(Event)是其中一種常用、好用的方法,它使DBA 可以方便的轉(zhuǎn)儲數(shù)據(jù)庫各種結(jié)構(gòu)及跟蹤特定事件的發(fā)生.

一、Event 的通常格式及分類

1、通常格式如下

EVENT=""

2、 Event 分類

診斷事件大體上可以分為四類:

a. 轉(zhuǎn)儲類事件:它們主要用于轉(zhuǎn)儲Oracle 的一些結(jié)構(gòu),例如轉(zhuǎn)儲一下控制文件、數(shù)據(jù)文件頭等內(nèi)容。

b. 捕捉類事件:它們用于捕捉一些Error 事件的發(fā)生,例如捕捉一下ORA-04031 發(fā)生時一些Rdbms 信息,以判斷是Bug 還是其它原因引起的這方面的問題。

c. 改變執(zhí)行途徑類事件:它們用于改主一些Oracle 內(nèi)部代碼的執(zhí)行途徑,例如設(shè)置10269 將會使Smon 進(jìn)程不去合并那些Free 的空間。

d. 跟蹤類事件:這們用于獲取一些跟蹤信息以用于Sql 調(diào)優(yōu)等方面,最典型的便是10046 了,將會對Sql 進(jìn)行跟蹤。

3、說明

a. 如果immediate 放在第一個說明是無條件事件,即命令發(fā)出即轉(zhuǎn)儲到跟蹤文件。

b. trace name 位于第二、三項, 除它們外的其它限定詞是供Oracle 內(nèi)部開發(fā)組用的。

c. level 通常位于1-10 之間(10046 有時用到12),10 意味著轉(zhuǎn)儲事件所有的信息。例如當(dāng)轉(zhuǎn)儲控制文件時,level1 表示轉(zhuǎn)儲控制文件頭,而level 10 表明轉(zhuǎn)儲控制文件全部內(nèi)容。

d. 轉(zhuǎn)儲所生成的trace 文件在user_dump_dest 初始化參數(shù)指定的位置。

二、設(shè)置的問題了

可以在init.ora 中設(shè)置所需的事件,這將對所有會話期打開的會話進(jìn)行跟蹤,也可以用alter session set event 等方法設(shè)置事件跟蹤,這將打開正在進(jìn)行會話的事件跟蹤。

1、在init.ora 中設(shè)置跟蹤事件的方法

a. 語法

EVENT=”event 語法|,level n|:event 語法|,level n|…”

b. 舉例

event=”10231 trace name context forever,level 10’

c. 可以這樣設(shè)置多個事件:

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; 實現(xiàn)的功能與(*)是類似的。

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: 要設(shè)置的事件LE:要設(shè)置事件的級別NM:名稱

b. 舉個例子,以10046 為例SQL> EXECUTE SYS.DBMS_SYSTEM.SET_EV(sid,serial#,10046,12,'''');

4、使用Oradebug 來設(shè)置診斷事件的方法同樣舉個例子大家就明白了:

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. 設(shè)置事件,以10046 為例sqlplus /nolog SQL>connect / as sysdba; SQL>oradebug setospid 4835

SQL>oradebug unlimit --不限制轉(zhuǎn)儲文件的大小SQL> oradebug event 10046 trace name context

forever,level 12 --設(shè)置事件進(jìn)行sql 跟蹤

SQL> oradebug event 10046 trace name context off --關(guān)閉跟蹤,注意不要用oradug 去跟蹤oracle 的smon,pmon 等幾個進(jìn)程,操作不當(dāng)可能會殺掉這幾個后臺進(jìn)和引起宕庫。

三、可能遇到的問題

1、我如何知道在系統(tǒng)中設(shè)置了哪些event?

回答:

a. 如果你的事件是在init.ora 中設(shè)置的可以用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 的那種如何設(shè)置診斷事件呢?

回答:

簡單,Alter system 命令就可以完成

alter system set event=''10046 trace name context forever, level 12'' scope=spfile;

重啟一下就生效了。

3、壞了,我的9i 設(shè)置完診斷事件,起不來了,報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 語句,包括解析、執(zhí)行、提取、提交和回滾等。level 4:包括變量的詳細(xì)信息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、分析數(shù)據(jù)文件塊,轉(zhuǎn)儲數(shù)據(jù)文件n 的塊m alter system dump datafile n block m

2、分析日志文件alter system dump logfile logfilename;

3、分析控制文件的內(nèi)容alter session set events ''immediate trace name CONTROLF level

10''

4、分析所有數(shù)據(jù)文件頭alter session set events ''immediate trace name FILE_HDRS level

10''

5、分析日志文件頭alter session set events ''immediate trace name REDOHDR level 10''

6、分析系統(tǒng)狀態(tài),最好每10 分鐘一次,做三次對比alter session set events ''immediate trace

name SYSTEMSTATE level 10''

7、分析進(jìn)程狀態(tài)alter session set events ''immediate trace name PROCESSSTATE level 10''

8、分析Library Cache 的詳細(xì)情況alter session set events ''immediate trace name

library_cache level 10''

總結(jié)

以上是生活随笔為你收集整理的oracle解析失败事件,ORACLE诊断事件及深入解析10053事件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。