[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 视图,我们得以把操作系统和数据库关联了起来。

[ORACLE]Oracle 数据字典 V$PROCESS

上一篇:基于Three.js、Go语言和MongoDB的免费开源的3D场景编辑器简介


下一篇:Spark读取Mysql,Redis,Hbase数据(一)