Oracle 数据字典 v p r o c e s s 通 过 操 作 系 统 上 的 P I D 和 v process 通过操作系统上的PID和v process通过操作系统上的PID和vPROCESS 视图中的SPID关联,就可以找到这个OS上的进程在数据库内部的化身,从而可以进行进一步的跟踪诊断,V S E S S I O N 视 图 中 记 录 的 P A D D R 就 是 V SESSION 视图中记录的PADDR就是V SESSION视图中记录的PADDR就是VPROCESS.ADDR的进一步延伸,通过两者关联,可以向数据库进一步深入。
[root@d4cdb ~]# ps -ef|grep -i oracle|grep -i LOCAL=NO
oracle 5613 1 0 11:26 ? 00:00:01 oracleD4C (LOCAL=NO)
oracle 5813 1 0 11:30 ? 00:00:02 oracleD4C (LOCAL=NO)
oracle 6036 1 0 11:34 ? 00:00:00 oracleD4C (LOCAL=NO)
oracle 6038 1 0 11:34 ? 00:00:02 oracleD4C (LOCAL=NO)
oracle 8648 1 0 12:17 ? 00:00:00 oracleD4C (LOCAL=NO)
LOCAL=NO 的进程显然是来自应用的远程连接
SELECT /*+ ORDERED */
sql_text
FROM v
s
q
l
t
e
x
t
a
W
H
E
R
E
(
a
.
h
a
s
h
v
a
l
u
e
,
a
.
a
d
d
r
e
s
s
)
I
N
(
S
E
L
E
C
T
D
E
C
O
D
E
(
s
q
l
h
a
s
h
v
a
l
u
e
,
0
,
p
r
e
v
h
a
s
h
v
a
l
u
e
,
s
q
l
h
a
s
h
v
a
l
u
e
)
,
D
E
C
O
D
E
(
s
q
l
h
a
s
h
v
a
l
u
e
,
0
,
p
r
e
v
s
q
l
a
d
d
r
,
s
q
l
a
d
d
r
e
s
s
)
F
R
O
M
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
sqltextaWHERE(a.hashvalue,a.address)IN(SELECTDECODE(sqlhashvalue,0,prevhashvalue,sqlhashvalue),DECODE(sqlhashvalue,0,prevsqladdr,sqladdress)FROMvsession b
WHERE b.paddr = (SELECT addr
FROM v$process c
WHERE c.spid = ‘&pid’))
ORDER BY piece ASC;
1.首先输入一个 pid,这个 pid 即 Process id,也就是在 Top 或 ps 中看到的 PID。
2.通过 pid 和 V
p
r
o
c
e
s
s
.
s
p
i
d
相
关
联
我
们
可
以
获
得
P
r
o
c
e
s
s
的
相
关
信
息
。
3.
通
过
V
process.spid 相关联我们可以获得 Process 的相关信息。 3.通过V
process.spid相关联我们可以获得Process的相关信息。3.通过Vprocess.addr 和 V
s
e
s
s
i
o
n
.
p
a
d
d
r
相
关
联
,
可
以
获
得
和
s
e
s
s
i
o
n
相
关
的
所
有
信
息
。
4.
再
结
合
V
session.paddr 相关联,可以获得和 session 相关的所有信息。 4.再结合V
session.paddr相关联,可以获得和session相关的所有信息。4.再结合Vsqltext,即可获得当前 session 正在执行的 SQL 语句。
可见通过V$process 视图,我们得以把操作系统和数据库关联了起来。