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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 10046详解,Oracle 10046事件详解

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 10046详解,Oracle 10046事件详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

10046事件說明10046事件是Oracle提供的內部事件,是對SQL_TRACE的增強.

10046事件可以設置以下四個級別:

1 - 啟用標準的SQL_TRACE功能,等價于sql_trace

4 - Level 1 加上綁定值(bind values)

8 - Level 1 + 等待事件跟蹤

12 - Level 1 + Level 4 + Level 8

類似sql_trace,10046事件可以在全局設置,也可以在session級設置。

開啟10046事件

SQL> set autotrace off

SQL> SET LINESIZE 80 HEADING OFF FEEDBACK OFF

SELECT

RPAD('USERNAME : ' || s.username,80) ||

RPAD('OSUSER : ' || s.osuser, 80) ||

RPAD('PROGRAM : ' || s.program, 80) ||

RPAD('SPID : ' || p.spid, 80) ||

RPAD('SID : ' || s.sid, 80) ||

RPAD('SERIAL# : ' || s.serial#, 80) ||

RPAD('MACHINE : ' || s.machine, 80) ||

RPAD('TERMINAL : ' || s.terminal,80) ||

RPAD('SQL TEXT : ' || q.sql_text,80)

FROM v$session s

,v$process p

,v$sql q

WHERE s.paddr = p.addr

SQL> 2 3 4 5 6 7 8 9 10 11 12 13 14 15 AND s.sid = '&SID'

AND s.sql_address = q.address(+)

AND s.sql_hash_value = q.hash_value(+);

16 17 Enter value for sid: 102

USERNAME : STAR

OSUSER : oracle

PROGRAM : sqlplus@db01 (TNS V1-V3)

SPID : 26230

SID : 102

SERIAL# : 878

MACHINE : db01

TERMINAL :

SQL TEXT : SELECT ROWID RID FROM COMMUL_INV WHERE ITEMNUMBER NOT LIKE '41%'

SQL> oradebug setospid 26230

Oracle pid: 55, Unix process pid: 26230, image: oracle@db01 (TNS V1-V3)

SQL> oradebug event 10046 trace name context forever,level 12

Statement processed.

SQL> oradebug event 10046 trace name context off

Statement processed.

SQL> oradebug tracefile_name

/home/oracle/admin/commdb/udump/ora_26230.trc

SQL>

SQL> alter session set events '10046 trace name context forever ,level 12' ;

會話已更改。

關閉10046事件

SQL> alter session set events '10046 trace name context off' ;

會話已更改。

SQL> exec dbms_system.set_SQL_TRACE_in_session(127,31923,true);

SQL> select * from dual;

SQL> exec dbms_system.set_SQL_TRACE_in_session(127,31923,false);

當我們使用sql_trace/10046等事件進行進程跟蹤時,會生成跟蹤文件.跟蹤文件名稱由以下幾部分組成:

ora.trc

以下腳本用戶獲得跟蹤文件名稱:

---- 當前 session < xmlnamespace prefix ="o" />

SELECT d.value|| '/' ||lower(rtrim(i.instance, chr( 0 )))|| 'ora' ||p.spid|| '.trc' trace_file_name

from

( select p.spid from v$mystat m,v$session s, v$process p

where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,

( select t.instance from v$thread t,v$parameter v

where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,

( select value from v$parameter where name = 'user_dump_dest' ) d;

---- 其他用戶 session

SELECT d.value|| '/' ||lower(rtrim(i.instance, chr( 0 )))|| 'ora' ||p.spid|| '.trc' trace_file_name

from

( select p.spid from v$session s, v$process p

where s.sid= '127' and s. SERIAL#= '31923' and p.addr = s.paddr) p,

( select t.instance from v$thread t,v$parameter v

where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,

( select value from v$parameter where name = 'user_dump_dest' ) d;

SELECT a.VALUE

|| b.symbol

|| c.instance_name

|| 'ora'

|| d.spid

|| '.trc' trace_file

FROM (SELECT VALUE

FROM v$parameter

WHERE NAME = 'user_dump_dest') a,

(SELECT SUBSTR (VALUE, -6, 1) symbol

FROM v$parameter

WHERE NAME = 'user_dump_dest') b,

(SELECT instance_name

FROM v$instance) c,

(SELECT spid

FROM v$session s, v$process p, v$mystat m

WHERE s.paddr = p.addr AND s.SID = m.SID AND m.statistic# = 0) d

/

SQL> select sid,serial#,username from v$session

2 where username is not null;

SID SERIAL# USERNAME

8 2041 SYS

9 437 EYGLE

設置跟蹤:

SQL> exec dbms_system.set_sql_trace_in_session(9,437,true)

PL/SQL procedure successfully completed.

....

可以等候片刻,跟蹤session執行任務,捕獲sql操作...

....

停止跟蹤:

SQL> exec dbms_system.set_sql_trace_in_session(9,437,false)

PL/SQL procedure successfully completed.

執行跟蹤:

SQL> exec dbms_system.set_ev(9,437,10046,8,'eygle');

PL/SQL procedure successfully completed.

結束跟蹤:

SQL> exec dbms_system.set_ev(9,437,10046,0,'eygle');

PL/SQL procedure successfully completed.

當我們通過alter session的方式設置了sql_trace,這個設置是不能通過show parameter的方式得到的,我們需要通過dbms_system.read_ev來獲取:

SQL> set feedback off

SQL> set serveroutput on

SQL> declare

2 event_level number;

3 begin

4 for event_number in 10000..10999 loop

5 sys.dbms_system.read_ev(event_number, event_level);

6 if (event_level > 0) then

7 sys.dbms_output.put_line(

8 'Event ' ||

9 to_char(event_number) ||

10 ' is set at level ' ||

11 to_char(event_level)

12 );

13 end if;

14 end loop;

15 end;

16 /

Event 10046 is set at level 1

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的oracle 10046详解,Oracle 10046事件详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。