本視圖包含當(dāng)前系統(tǒng)oracle運(yùn)行的所有進(jìn)程信息。常被用于將oracle或服務(wù)進(jìn)程的操作系統(tǒng)進(jìn)程ID與數(shù)據(jù)庫session之間建立聯(lián)系。在某些情況下非常有用:

1.如果數(shù)據(jù)庫瓶頸是系統(tǒng)資源(如:cpu,內(nèi)存),并且占用資源最多的用戶總是停留在某幾個服務(wù)進(jìn)程,那么進(jìn)行如下諸項(xiàng):

1>.找出資源進(jìn)程
2>.找出它們的session,你必須將進(jìn)程與會話聯(lián)系起來。
3>.找出為什么session占用了如此多的資源

2.SQL跟蹤文件名是基于服務(wù)進(jìn)程的操作系統(tǒng)進(jìn)程ID。要找出session的跟蹤文件,你必須將session與服務(wù)進(jìn)程聯(lián)系起來。
3.某些事件,如rdbms ipc reply,鑒別session進(jìn)程的Oracle進(jìn)程ID在等什么。要發(fā)現(xiàn)這些進(jìn)程在做什么,你必須找出它們的session。
4.你所看到的服務(wù)器上的后臺進(jìn)程(DBWR,LGWR,PMON等)都是服務(wù)進(jìn)程。要想知道他們在做什么,你必須找到他們的session。

V$PROCESS中的常用列
ADDR:進(jìn)程對象地址
PID:oracle進(jìn)程ID
SPID:操作系統(tǒng)進(jìn)程ID

V$PROCESS中的連接列
Column View Joined Column(s)
ADDR V$SESSION PADDR

示例:
1.查找指定系統(tǒng)用戶在oracle中的session信息及進(jìn)程id,假設(shè)操作系統(tǒng)用戶為:junsansi
select s.sid,s.SERIAL#, s.username,p.spid
from v$session s, v$process p
where s.osuser = 'junsansi'
and s.PADDR = p.ADDR

2.查看鎖和等待
SELECT /*+ rule */
lpad(' ', decode(l.xidusn, 0, 3, 0)) || l.oracle_username User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#,p.spid
FROM v$locked_object l, dba_objects o, v$session s, v$process p
WHERE l.object_id = o.object_id
AND l.session_id = s.sid and s.paddr = p.addr
ORDER BY o.object_id, xidusn DESC

附注:
  在linux環(huán)境可以通過ps查看進(jìn)程信息包括pid,windows中任務(wù)管理器的PID與v$process中pid不能一一對應(yīng),這塊在oracleDocument中也沒有找到介紹,后來google了一下,有資料介紹說是由于windows是多線程服務(wù)器,每個進(jìn)程包含一系列線程。這點(diǎn)于unix等不同,Unix每個Oralce進(jìn)程獨(dú)立存在,在Nt上所有線程由Oralce進(jìn)程衍生。
  要在windows中顯示oracle相關(guān)進(jìn)程pid,我們可以通過一個簡單的sql語句來實(shí)現(xiàn)。
SELECT s.SID, p.pid, p.spid signaled, s.osuser, s.program
FROM v$process p, v$session s
WHERE p.addr = s.paddr;

SID PID SIGNALED OSUSER PROGRAM
1 2 2452 SYSTEM ORACLE.EXE
2 3 2460 SYSTEM ORACLE.EXE
3 4 2472 SYSTEM ORACLE.EXE
4 5 2492 SYSTEM ORACLE.EXE
5 6 2496 SYSTEM ORACLE.EXE
6 7 2508 SYSTEM ORACLE.EXE
7 8 2520 SYSTEM ORACLE.EXE
8 9 2524 SYSTEM ORACLE.EXE
10 12 1316 JSSjunsansi PlSqlDev.exe
9 13 3420 JSSjunsansi PlSqlDev.exe
13 14 660 JSSjunsansi PlSqlDev.exe

還可以通過和 v$bgprocess 連接查詢到后臺進(jìn)程的名字:
SELECT s.SID SID, p.spid threadid, p.program processname, bg.NAME NAME
FROM v$process p, v$session s, v$bgprocess bg
WHERE p.addr = s.paddr
AND p.addr = bg.paddr
AND bg.paddr <> '00';

SID THREADID PROCESSNAME NAME
1 2452 ORACLE.EXE PMON
2 2460 ORACLE.EXE DBW0
3 2472 ORACLE.EXE LGWR
4 2492 ORACLE.EXE CKPT
5 2496 ORACLE.EXE SMON
6 2508 ORACLE.EXE RECO
7 2520 ORACLE.EXE CJQ0
8 2524 ORACLE.EXE QMN0

Eygle大師寫了一段sql腳本getsql.sql,用來獲取指定pid正在執(zhí)行的sql語句,在此也附注上來。
REM getsql.sql
REM author eygle
REM 在windows上,已知進(jìn)程ID,得到當(dāng)前正在執(zhí)行的語句
REM 在windows上,進(jìn)程ID為16進(jìn)制,需要轉(zhuǎn)換,在UNIX直接為10進(jìn)制
SELECT /*+ ORDERED */
sql_text
FROM v$sqltext a
WHERE (a.hash_value, a.address) IN (
SELECT DECODE (sql_hash_value,
0, prev_hash_value,
sql_hash_value
),
DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
FROM v$session b
WHERE b.paddr = (SELECT addr
FROM v$process c
WHERE c.spid = TO_NUMBER ('&pid', 'xxxx')))
ORDER BY piece ASC
/