Oracle V$SESSION詳解

來源:互聯網
上載者:User

V$SESSION是APPS使用者下面對於SYS.V_$SESSION 視圖的同義字。

 

在本視圖中,每一個串連到資料庫執行個體中的session都擁有一條記錄。包括使用者session及後台進程如DBWR,LGWR,arcchiver等等。

 

V$SESSION中的常用列

 

V$SESSION是基礎資訊視圖,用於找尋使用者SID或SADDR。不過,它也有一些列會動態變化,可用於檢查使用者。如例:

SQL_HASH_VALUE,SQL_ADDRESS:這兩列用於鑒別預設被session執行的SQL語句。如果為null或0,那就說明這個session沒有執行任何SQL語句。PREV_HASH_VALUE和PREV_ADDRESS兩列用來鑒別被session執行的上一條語句。

注意:當使用SQL*Plus進行選擇時,確認你重定義的列寬不小於11以便看到完整的數值。

STATUS:這列用來判斷session狀態是:

l        Achtive:正執行SQL語句(waiting for/using a resource)

l        Inactive:等待操作(即等待需要執行的SQL語句)

l        Killed:被標註為刪除

下列各列提供session的資訊,可被用於當一個或多個combination未知時找到session。

Session資訊

l        SID:SESSION標識,常用於串連其它

l        SERIAL#:如果某個SID又被其它的session使用的話則此數值自增加(當一個       SESSION結束,另一個SESSION開始並使用了同一個SID)。

l        AUDSID:審查session ID唯一性,確認它通常也用於當尋找並行查詢模式

l        USERNAME:當前session在oracle中的使用者名稱。

Client資訊

資料庫session被一個運行在資料庫伺服器上或從中間伺服器甚至案頭通過SQL*Net串連到資料庫的用戶端進程啟動,下列各列提供這個用戶端的資訊

l        OSUSER:  用戶端作業系統使用者名稱

l        MACHINE:用戶端執行的機器

l        TERMINAL:用戶端啟動並執行終端

l        PROCESS:用戶端進程的ID

l        PROGRAM:用戶端執行的用戶端程式

要顯示使用者所串連PC的TERMINAL、OSUSER,需在該PC的ORACLE.INI或Windows中設定關鍵字TERMINAL,USERNAME。

Application資訊

調用DBMS_APPLICATION_INFO包以設定一些資訊區分使用者。這將顯示下列各列。

l        CLIENT_INFO:DBMS_APPLICATION_INFO中設定

l        ACTION:DBMS_APPLICATION_INFO中設定

l        MODULE:DBMS_APPLICATION_INFO中設定

下列V$SESSION列同樣可能會被用到:

l        ROW_WAIT_OBJ#

l        ROW_WAIT_FILE#

l        ROW_WAIT_BLOCK#

l        ROW_WAIT_ROW#

V$SESSION中的串連列

Column View Joined Column(s)</p><p>SID V$SESSION_WAIT,V$SESSTAT,V$LOCK,V$SESSION_EVENT,V$OPEN_CURSOR SID</p><p>(SQL_HASH_VALUE, SQL_ADDRESS) V$SQLTEXT, V$SQLAREA, V$SQL (HASH_VALUE, ADDRESS)</p><p>(PREV_HASH_VALUE, PREV_SQL_ADDRESS) V$SQLTEXT, V$SQLAREA, V$SQL (HASH_VALUE, ADDRESS)</p><p>TADDR V$TRANSACTION ADDR</p><p>PADDR V$PROCESS ADDR</p><p>  

樣本:

1.尋找你的session資訊

SELECTSID, OSUSER, USERNAME, MACHINE, PROCESS</p><p>FROMV$SESSIONWHEREaudsid = userenv('SESSIONID');</p><p>

 

2.當machine已知的情況下尋找session

SELECTSID, OSUSER, USERNAME, MACHINE, TERMINAL</p><p>FROMV$SESSION</p><p>WHEREterminal ='pts/tl'ANDmachine ='rgmdbs1';</p><p>

 

3.尋找當前被某個指定session正在啟動並執行sql語句。假設sessionID為100

     selectb.sql_text</p><p>fromv$session a,v$sqlarea b</p><p>wherea.sql_hash_value=b.hash_valueanda.sid=100</p><p>

 

尋找被指定session執行的SQL語句是一個公用需求,如果session是瓶頸的主要原因,那根據其當前在執行的語句可以查看session在做些什麼。

視圖應用:

 

V$session 表的妙用v$session 表中比較常用的幾個欄位說明:

1. sid,serial#
通過sid我們可以查詢與這個session相關的各種統計資訊,處理資訊.
    select * from v$sesstat where sid = :sid;<br />  查詢使用者相關的各種統計資訊. 
    SELECT a.sid, a.statistic#, b.name, a.value<br /> FROM v$sesstat a, v$statname b<br /> WHERE a.statistic# = b.statistic#<br /> AND a.sid = :sid;
b. 查詢使用者相關的各種io統計資訊    select * from v$sess_io where sid = :sid;</p><p> 
c. 查詢使用者想在正在開啟著的遊標變數.    select * from v$open_cursor where sid = :sid;<br />

d. 查詢使用者當前的等待資訊. 以查看當前的語句為什麼這麼慢/在等待什麼資源.
    select * from v$session_wait where sid = :sid ;<br />
e. 查詢使用者在一段時間內所等待的各種事件的資訊. 以瞭解這個session所遇到的瓶頸
    select * from v$session_event where sid = :sid;<br />
f. 還有, 就是當我們想kill當前session的時候可以通過sid,serial#來處理.
    alter system kill session ':sid,:serail#';<br />
2. paddr.欄位, process addr, 通過這個欄位我們可以查看當前進程的相關資訊, 系統進程id,作業系統使用者資訊等等.
    SELECT a.pid,<br /> a.spid,<br /> b.name,<br /> b.description,<br /> a.latchwait,<br /> a.latchspin,<br /> a.pga_used_mem,<br /> a.pga_alloc_mem,<br /> a.pga_freeable_mem,<br /> a.pga_max_mem<br /> FROM v$process a, v$bgprocess b<br /> WHERE a.addr = b.paddr(+)<br /> AND a.addr = :paddr
3. command 欄位, 表明當前session正在執行的語句的類型.請參考reference.

4. taddr 當前事務的地址,可以通過這個欄位查看當前session正在執行的事務資訊, 使用的復原段資訊等
    SELECT b.name rollname, a.*<br /> FROM v$transaction a, v$rollname b<br /> WHERE a.xidusn = b.usn<br /> AND a.addr = '585EC18C';<br />
5. lockwait欄位, 可以通過這個欄位查詢出當前正在等待的鎖的相關資訊.
    SELECT *<br /> FROM v$lock<br /> WHERE (id1, id2) = (SELECT id1, id2 FROM v$lock WHERE kaddr = '57C68C48')<br />
6. (sql_address,sql_hash_value) (prev_sql_addr,prev_hash_value) 根據這兩組欄位, 我們可以查詢到當前session正在執行的sql語句的詳細資料.
    SELECT *<br /> FROM v$sqltext<br /> WHERE address = :sql_address<br /> AND hash_value = :sql_hash_value;<br />
7.ROW_WAIT_OBJ#,ROW_WAIT_FILE#,ROW_WAIT_BLOCK#,ROW_WAIT_ROW#
可以通過這幾個欄位查詢現在正在被鎖的表的相關資訊.^_^
a. 首先得到被鎖的的資訊   SELECT * FROM dba_objects WHERE object_id = :row_wait_obj#;<br />
b. 根據row_wait_file#可以找出對應的檔案的資訊.

   SELECT * FROM v$datafile WHERE file# = :row_wait_file#.<br />
c. 在根據以上四個欄位構造出被鎖的欄位的rowid資訊.
   SELECT dbms_rowid.ROWID_CREATE(1,<br /> :row_wait_obj#,<br /> :row_wait_file#,<br /> :row_wait_block#,<br /> :row_wait_row#)<br /> FROM dual;<br />
8. logon_time 當前session的登入時間.
9. last_call_et 該session idle的時間, 每3秒中更新一次.   

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.