當前位置:
首頁 > 最新 > 如何生成其他會話的10046?

如何生成其他會話的10046?

微信群有朋友問,

如何生成其他會話的10046?

對於本地session的10046事件trace,可以使用以下兩種方法,

alter session set events "10046 trace name context forever, level 12";

oradebug event 10046 trace name context forever, level 12;

但是生產環境,可能一般用戶,沒有執行10046的許可權,這就需要其他用戶執行,來獲得10046的trace日誌,主要有兩種方法,一是使用oradebug,二是使用DBMS_SYSTEM程序包。

方法一:使用oradebug

可以參考《How To Collect 10046 Trace (SQL_TRACE) Diagnostics for Performance Issues (Doc ID 376442.1)》。

這裡有兩個概念,

SPID is the operating system Process identifier (os pid)

PID is the Oracle Process identifier (ora pid)

步驟一:如果使用oradebug,需要SPID作為參數。

獲取會話SPID,可以有兩種場景。

場景1:知道需要獲取10046的會話session id

1. 獲取當前session id,SID值是132,

SQL> select sid from v$mystat where rownum = 1;

SID

----------

132

2. 另一個會話執行輸入132,就可以知道會話132的SPID值是29457,

SQL> select p.PID,p.SPID,s.SID

2 from v$process p,v$session s

3 where s.paddr = p.addr

4 and s.sid = &SESSION_ID

5 /

Enter value for session_id: 132

old 4: and s.sid = &SESSION_ID

new 4: and s.sid = 132

PID SPID SID

---------- ------------------------ ----------

132 29568 132

場景2:不知道需要獲取10046的會話session id

執行以下SQL,就會列出所有的會話信息,含有SPID,幫助你找到目標會話,

SQL> select "ospid: " || p.spid || " # """ ||s.sid||","||s.serial#||""" "||

2 s.osuser || " " ||s.machine ||" "||s.username ||" "||s.program line

3 from v$session s , v$process p

4 where p.addr = s.paddr

5 and s.username " ";

LINE

--------------------------------------------------------------------------------

ospid: 29656 # "71,30485" oracle DB SYS sqlplus@DB (TNS V1-V3)

ospid: 29568 # "132,9193" oracle DB SYS sqlplus@DB (TNS V1-V3)

步驟二:執行oradebug

有了SPID,就可以執行oradebug指令,

SQL> oradebug setospid 29568

Oracle pid: 22, Unix process pid: 29568, image: oracle@DB (TNS V1-V3)

此時可以開啟10046,

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

Statement processed.

會話132執行語句,

SQL> select * from dual;

D

-

X

關閉10046事件,

SQL> oradebug event 10046 trace name context off

Statement processed.

看下trace文件路徑和名稱,

SQL> oradebug tracefile_name

/DATA/oracle/u01/app/oracle/diag/rdbms/07/07/trace/07_ora_29568.trc

從07_ora_29568.trc就可以看執行的10046事件,

Received ORADEBUG command (#1) "event 10046 trace name context forever,level 12" from process "Unix process pid: 29431, image: "

...

Finished processing ORADEBUG command (#1) "event 10046 trace name context forever,level 12"

...

select * from dual

...

Received ORADEBUG command (#2) "event 10046 trace name context off" from process "Unix process pid: 29431, image: "

...

Finished processing ORADEBUG command (#2) "event 10046 trace name context off"

方法二:使用dbms_system

可以參考《演示使用sql_trace和10046事件對其他會話進行跟蹤,並給出trace結果》(https://www.cnblogs.com/Richardzhu/archive/2013/02/05/2893162.html),就不再贅述了,覺得還是第一種比較方便。

如果您覺得本文有幫助,歡迎關注轉發:bisal的個人雜貨鋪,

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 bisal的個人雜貨鋪 的精彩文章:

imp/exp導入導出的一些錯誤

TAG:bisal的個人雜貨鋪 |