2017-02-24 29 views
1

我想知道V$session中的狀態列是如何工作的。我知道該列顯示特定會話是處於活動狀態還是非活動狀態。我也明白,一個會話在執行sql語句時處於活動狀態。但是,我想知道執行plsql塊或程序時會話的狀態。

對於例如:我有一個像下面

PROCEDURE XYZ is 
. 
. 
begin 
<SQL statement> 
. 
. 
<some other plsql code> 
. 
. 
<dbms output statements> 
. 
. 
<SQL statement> 
. 
. 
<some other plsql code> 
. 
. 
<dbms output statements> 

End XYZ; 

我想知道的是,當一旦sql語句結束和其他的東西像其他PLSQL代碼或DBMS輸出語句被執行時,什麼是PLSQL過程那段時間的會話狀態?它是活動還是不活動,因爲當時沒有sqls正在運行。

+0

我很好奇你想達到什麼目的 – BobC

回答

1

應該ACTIVEINACTIVE狀態之間進行切換;從documentation

狀態的會話:

  • ACTIVE - 會話當前執行的SQL
  • INACTIVE
  • 鎮靜 - 會議標誌着被殺害
  • 快照 - 會議通過臨時緩存使用Oracle * XA
  • SNIPED - 會話無效,正在客戶端等待

沒有關於運行PLSQL。但是,您可以單獨使用PLSQL處理鎖定表和對象,因此您只需等待提交而不是ACTIVE

編輯

但是,因爲你不能叫PLSQL無中生有; PLSQL被稱爲例如從sqlplus客戶端...這可能會計爲Oracle的SQL。因此,在這種情況下,整個過程將會話設置爲ACTIVE

1

執行程序沒有特別的規則。如果會話當前正在等待一個鎖或者旋轉一些cpu密集型的非SQL操作,而這些操作將反映在狀態中,而不管任務是否作爲過程的一部分執行。

The documentation「ACTIVE」定義爲「當前執行的SQL」,而是從快速測試鎖定的對象上等待,等待dbms_lock.sleep和增加循環中的計數器,當我的會議依然是「ACTIVE」。不過,我不知道是否有任何正式的行動列表可以算作'ACTIVE'。