ITPub博客

首页 > 数据库 > Oracle > v$process

v$process

原创 Oracle 作者:llgxy1 时间:2016-04-01 16:33:59 0 删除 编辑

一、理解操作系统的派生



  1. [root@localhost ~]# ps -ef|grep sqlplus
  2. oracle 14721 14691 0 03:41 pts/0 00:00:00 sqlplus as sysdba

      当使用sqlplus登陆数据库后,重新开启一个secureCRT端,执行ps -ef查询;

      #操作系统进程14691派生出14721


  1. [root@localhost ~]# ps -ef|grep 14691
  2. oracle 14691 14690 0 03:41 pts/0 00:00:00 -bash
  3. oracle 14721 14691 0 03:41 pts/0 00:00:00 sqlplus as sysdba
  4. root 14917 14732 0 03:58 pts/1 00:00:00 grep 14691
        用户的shell环境,linxu下是bash,aix,可能是csh或ksh;

        shell的进程派生给sqlplus的进程14721

  1. [root@localhost ~]# ps -ef|grep 14721
  2. oracle 14721 14691 0 03:41 pts/0 00:00:00 sqlplus as sysdba
  3. oracle 14722 14721 0 03:41 ? 00:00:00 oracledevdb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
  4. root 14930 14732 0 03:59 pts/1 00:00:00 grep 14721
        sqlplus对应进程又派生出oraect这个用户访问数据库的用户进程14722,即第二行;

二、查看oracle哪一个进程为用户进程14722提供服务


  1. select ADDR,PID,SPID,PNAME,USERNAME,TERMINAL,PROGRAM from v$process;



    根据与14722匹配的行,发现ORACLE实例的服务进程是49;

    可通过addr字段与v$session中的addr字段关联,获得sid;

SELECT s.SID, p.pid, p.spid signaled, s.osuser, s.program FROM v$process p, v$session s WHERE p.addr = s.paddr;





三、引申


    上面是在服务器端以sqlplus的方式登陆;
    根据客户端操作系统的pid获取对应的服务器连接信息


--查看客户端操作系统的pid,因为同一客户端开了俩个窗口分别做连接,所以下面的ps查询有俩个

  1. [root@localhost ~]# ps -ef|grep sqlplus
  2. oracle 127641 127572 0 01:32 pts/0 00:00:00 sqlplus
  3. oracle 127646 127597 0 01:32 pts/1 00:00:00 sqlplus
  4. root 129732 127699 0 02:05 pts/3 00:00:00 grep sqlplus

    以其中的一个进程127646为例,

 select SID,SERIAL#,SCHEMANAME,OSUSER,PROCESS,TYPE,PADDR from v$session where process='127646';

v$session中的process字段纪录了客户端操作系统的pid信息,可通过此列获得服务器端的sid等信息,进而可以关联v$process获得其他想要的信息。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29319055/viewspace-2073808/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-05-09

  • 博文量
    6
  • 访问量
    26623