关于v$process与v$session中process的理解(转载)

http://www.itpub.net/thread-1077321-1-1.html(出处)

关于v$process与v$session中process的理解

说明
v$session有个process字段,V$PROCESS有个SPID字段,这两个字段是不是一个意思呢?是不是都代表会话的操作系统进程呢?
官方文档上的解释:
SPID      VARCHAR2(12)  Operating system process identifier
PROCESS   VARCHAR2(9)   Operating system client process ID

本文以数据库服务器安装在unix上为例进行说明。
V$PROCESS中的SPID表示的是操作系统的进程,v$session中的process表示客户端进程ID,即客户端进程在客户端机器上的进程ID号。一个表示客户端进程在客户端机器上的进程号,一个表示服务器进程在服务器上的进程号。
连接服务器的会话,发起会话的客户端进程可能是unix进程,也可能是windows进程。
-------------------
windows客户端进程
-------------------
例如,使用windows进程连接unix上的数据库,对应会话sid=35,对应客户端windows的988:5412
格式为"客户端PID:线程ID"。如"988:5412",
表明连接到数据库的客户端程序在客户计算机上的进程ID是 988 ,该进程内的5412号线程执行了数据库的连接。
set linesize 200
col machine format a30
col program format a50
col status format a10
col username format a10
select machine,program,username,status from v$session where sid=&oracle_sid;

Enter value for oracle_sid: 35
old   1: select machine,program,username,status,process from v$session where sid=&oracle_sid
new   1: select machine,program,username,status,process from v$session where sid=35
MACHINE                        PROGRAM          USERNAME   STATUS     PROCESS
------------------------------ ---------------- ---------- ---------- ------------
WORKGROUP\HXC                  plsqldev.exe     SYS        INACTIVE   988:5412

sid=35对应的unix数据库服务器上的服务器进程为 16805
SQL> select spid os_sid
  2    from v$process
  3   where addr = (select paddr from v$session where sid = &oracle_sid);
Enter value for oracle_sid: 35
old   3:  where addr = (select paddr from v$session where sid = &oracle_sid)
new   3:  where addr = (select paddr from v$session where sid = 35)
OS_SID
------------
16805

[monitor:/]#ps -ef|grep 16805
    root 17278 17174  0 14:27:23 pts/tA    0:00 grep 16805
  oracle 16805     1  0 14:22:56 ?         0:00 oraclerobin (LOCAL=NO)
[monitor:/]#


-------------------
Unix客户端进程
-------------------
再来看看unix客户端连接到unix服务器端的实例
连接服务器的会话sid=260
对应的客户端进程号为 26349
SQL> set linesize 200
SQL> col machine format a30
SQL> col program format a50
SQL> col status format a10
SQL> col username format a10
SQL>
SQL> select machine,program,username,status,process from v$session where sid=&oracle_sid;
Enter value for oracle_sid: 260
old   1: select machine,program,username,status,process from v$session where sid=&oracle_sid
new   1: select machine,program,username,status,process from v$session where sid=260
MACHINE   PROGRAM                              USERNAME   STATUS     PROCESS
--------- ------------------------------------ ---------- ---------- ------------
zhzw01    [email=accountrefresh@zhzw01]accountrefresh@zhzw01[/email] (TNS V1-V3)    BILL_GATHE ACTIVER    26349
               
               

对应的服务器进程号为 13472
SQL> select spid os_sid
  2    from v$process
  3   where addr = (select paddr from v$session where sid = &oracle_sid);
Enter value for oracle_sid:  260
old   3:  where addr = (select paddr from v$session where sid = &oracle_sid)
new   3:  where addr = (select paddr from v$session where sid =  260)
OS_SID
------------
13472

hnzzzw01:/arraybill/home/oracle$ ps -ef|grep 13472
orabill 25649 25452  0 14:22:56 pts/ta    0:00 grep 13472
orabill 13472     1 255 10月  3  ?        30969:04 oraclehnbill (LOCAL=NO)
hnzzzw01:/arraybill/home/oracle$


-------------------
说明
-------------------
如果是通过sid,查询到进程spid,使用操作系统命令直接杀掉进程
kill -9 spid
注意,是 spid,而不是v$session中对应的客户端的process,别杀错了进程。

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

转载于:http://blog.itpub.net/15142212/viewspace-566463/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值