[ORACLE]Oracle 数据字典 V$PROCESS

 通过操作系统上的PID和V$PROCESS 视图中的SPID关联,就可以找到这个OS上的进程在数据库内部的化身,从而可以进行进一步的跟踪诊断,V$SESSION 视图中记录的PADDR就是V$PROCESS.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$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 = '&pid'))
ORDER BY piece ASC;


1.首先输入一个 pid,这个 pid 即 Process id,也就是在 Top 或 ps 中看到的 PID。
2.通过 pid 和 V$process.spid 相关联我们可以获得 Process 的相关信息。
3.通过V$process.addr 和 V$session.paddr 相关联,可以获得和 session 相关的所有信息。
4.再结合V$sqltext,即可获得当前 session 正在执行的 SQL 语句。
可见通过V$process 视图,我们得以把操作系统和数据库关联了起来。

posted on 2020-05-10 16:17  InnoLeo  阅读(623)  评论(0编辑  收藏  举报