SPID一一system process id,表示该server
process在OS层面的Porcess ID
PID一一Oracle process
id,可以理解Oracle给自己的进程的一个编号
SID一一SESSION标识,常用于连接其它列,理解为有在和oracle连接会话时oracle为其分配的一个编号
ADDR----进程对象地址
paddr----process addr,
通过这个字段我们可以查看当前进程的相关信息, 系统进程id,操作系统用户信息等
根据sid查询sql语句的spid
select b.spid,a.sid,a.serial#,a.machine
from v$session a,v$process b where a.paddr
=b.addr and a.sid = '&sid';
根据sid查询sql语句的OS里进程号,可以用kill
-9来杀
SQL> select spid, osuser, s.program from v$session
s,v$process p where s.paddr=p.addr and s.sid=631;
=============
通过进程号spid找sql语句的方法
1. select sid from v$session where paddr = (select addr from
v$process where spid = &spid);
然后输入spid,得到对应的sid (session id)
2. select sql_text from v$sqltext where address = (select
sql_address from v$session where sid = &sid) order by
piece;
输入刚才得到的sid,的确可以得到sql语句。如果感觉输入麻烦,比较简单的方法是开2个sqlplus顺序执行。
===============
1. 使用top或者 glance
查看占用cpu资源高的oralce进程
将进程PID记下--spid
2. 将查到的结果记下ADDR
sql>select ADDR from v$process where
spid=PID;
3. 将查到的sid 和serial#记下
sql>select sid, serial# from v$session
where paddr='ADDR';
(
PS也可直接按sid查
SQL>select sid,serial# from v$session
where sid=XXX;
)
4. 可以进一步确认sql语句
输入SID号查sql语句
select sql_text from v$sqlarea where
(hash_value,address)=(select sql_hash_value,sql_address from
v$session where sid=&sid);
下例:
SID=输入SID 224
update sdi_t_ccms_image t set t.reserve1 = null, t.obtain_time =
sysdate where t.reserve1 = '1' and t.status = 202 and t.obtainer =
'028'
5. 确定后杀
sql>alter system kill session
'sid,serial#';
==========================================
以下附例子
---
PROCESS
LIST Users= 5
User CPU % Thrd
Disk Memory Block
Process
Name PID Name ( 400% max)
Cnt IOrate RSS/VSS On
--------------------------------------------------------------------------------
oraclecardmi 22087
oracle 37.0 1 0.2 85.7mb 105.4mb PRI
oraclecardmi 22093
oracle 36.1 1 0.2 85.7mb 89.4mb PRI
oraclecardmi 22103
oracle 35.3 1 0.0 86.7mb