[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 视图,我们得以把操作系统和数据库关联了起来。
每天进步一点点,多思考,多总结
版权声明:本文为CNblog博主「zaituzhong」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。