Oracle如何監測一個PLSQL過程的運行情況(二)專業的解決方案

來源:互聯網
上載者:User

昨天一個朋友問我如何監測一個PL/SQL的健全狀態,這裡簡單介紹幾種方法。

介紹專業一點的DBMS_APPLICATION_INFO包。

上一篇介紹了通過INSERT和自治事務的解決方案,方法很簡單,但是需要輔助的表和過程,而且這種方法顯得有點不夠專業。

那麼這裡介紹一篇相對PROFESSIONAL的解決方案,Oracle提供的DBMS_APPLICATION_INFO包:

SQL> SELECT SID, ACTION

2  FROM V$SESSION

3  WHERE SID IN

4  (SELECT SID  

5  FROM V$MYSTAT

6  WHERE ROWNUM = 1);

SID ACTION

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

13

SQL> BEGIN

2  DBMS_APPLICATION_INFO.SET_ACTION('STEP A');

3  DBMS_LOCK.SLEEP(10);

4  DBMS_APPLICATION_INFO.SET_ACTION('STEP B');

5  DBMS_LOCK.SLEEP(10);

6  DBMS_APPLICATION_INFO.SET_ACTION('STEP C');

7  END;

8  /

PL/SQL過程已成功完成。

通過簡單的調用SET_ACTION過程,其他會話就可以通過監測V$SESSION視圖,而從得到當前的PL/SQL執行到哪個步驟:

SQL> SELECT SID, ACTION FROM V$SESSION WHERE SID = 13;

SID ACTION

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

13 STEP A

SQL> SELECT SID, ACTION FROM V$SESSION WHERE SID = 13;

SID ACTION

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

13 STEP A

SQL> SELECT SID, ACTION FROM V$SESSION WHERE SID = 13;

SID ACTION

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

13 STEP B

SQL> SELECT SID, ACTION FROM V$SESSION WHERE SID = 13;

SID ACTION

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

13 STEP B

SQL> SELECT SID, ACTION FROM V$SESSION WHERE SID = 13;

SID ACTION

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

13 STEP C

SQL> SELECT SID, ACTION FROM V$SESSION WHERE SID = 13;

SID ACTION

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

13 STEP C

在另外的會話可以看到,剛才會話的PL/SQL從STEP A到STEP C的變化。需要注意,如果會話不再修改ACTION,那麼這個會話的ACTION會一直保持到會話的結束。

更多精彩內容:http://www.bianceng.cn/database/Oracle/

這種方法的簡單程度一點都不必INSERT的方法複雜,而且DBMS_APPLICATION_INFO包是所有使用者都可以訪問的。但是需要注意,並不是所有使用者都可以訪問V$SESSION視圖的,這個視圖需要額外的授權。

上面的方法似乎還不是很專業,利用這個包還有更專業的解決方案:

SQL> SELECT SID, SERIAL#

2  FROM V$SESSION

3  WHERE SID IN

4  (SELECT SID

5  FROM V$MYSTAT

6  WHERE ROWNUM = 1);

SID    SERIAL#

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

13       6610

SQL> DECLARE

2     V_ID BINARY_INTEGER := DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS_NOHINT;

3     V_SLNO BINARY_INTEGER;

4     V_TOTALWORK NUMBER := 5;

5  BEGIN

6     FOR I IN 1..V_TOTALWORK LOOP

7             DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS(

8                     V_ID,

9                     V_SLNO,

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.