Oracle下Kill进程的方法

 1:先在oracle数据库中找到锁住的对象:linux

select xidusn, object_id, session_id, locked_mode from v$locked_object;sql

2:获得session_id。再根据session_id找到v$session对应的sid号和serial#:
select username,sid,serial# from v$session where sid=session_id;数据库

3:用oracle的slq kill掉相关的session sql语句:
alter system kill session 'sid,serial#';session

4:若是不能kill掉,报ora-00031错:说明以前有kill过,这样找到这个进程spid slq语句:
select pro.spid from v$session ses,v$process pro where ses.sid=129 and ses.paddr=pro.addr;oracle

5:根据这个spid对应linux下的进程pid
linux命令:
ps -ef | gre | 'ora' (找到全部ora开头的进程)ide

kill -9 (pid)spa

6:搞定收工。对象

 

 

下面主要介绍若是这个进程是Killed状态的时候该怎么处理:接口

先介绍三个视图吧:v$process是ORACLE处理的进程,v$session是ORACLE处理的会话,v$sqlarea是ORACLE处理的SQL语句存放区就是共享池那东西。三个表联合查一下。SELECT P.pid,S.sid,s.serial#,P.spid,S.username,S.osuser,P.serial#,P.terminal,P.program,P.background,S.status,A.sql_text 
FROM v$process P, v$session S,v$sqlarea A WHERE P.addr = s.paddr AND S.sql_address = a.address (+) order by P.spid;结果就是下面这样[/img] 
这里面查出来的就是ORACLE实时正在处理的SQL语句过程等。固然还包含基本的(PMON)(DBW0)(LGWR)等后台进程。有时候你们编译过程时,怎么都编译不过去其实过程是好着的.这就是ORACLE出现死锁了.死锁了确定是锁最后一个会话,那就是你编着的那个.这时候你们有能够要从新SHUTDOWN IMMEDIATE才行解决问题.其实运行上面的语句再配合下面的就能够了.在Oracle数据库中,能够经过kill session的方式来终止一个进程,alter system kill session 'sid,serial#' ;这里sid,serial#就是上面的v$session.sid,v$session.serial#这二值,多运行几回上面的SELECT语句就能够查出你被锁住的那个过程.其它不明的不能通杀了.这里关键就是要查出你要杀的v$session.sid,v$session.serial#二个值.而后作alter system kill session 'sid,serial#' ;作完之后.你的客户端通常就直接提示SESSION KILLED.但也有不提示没反映.再运行SELECT语句,发现v$session.status为KILLED.再等待仍是同样.本人也比较郁闷,从书上查知被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程.Oracle就等待PMON去清除这些Session.一般等待一个被标记为Killed的Session退出须要花费很长的时间.但我历来都没等及过.这不又白杀了.不要紧,用必杀招,在LINUX下杀.你用SELECT查出来的时候还有一个v$process.spid列.在LIUNX的$下运行TOP.[/img]你知发现了原来这一列的值,就是TOP下的PID值.那这样好办了.直接在LIUNX的$下 KILL -9 v$process.spid 这个值是要你在SELECT下要记录下的.好了.这就必杀了.过程编译不过去,确定是有会话地运行.出现过这问题.用已上方法解决过.其它配合进程

SELECT P.pid,S.sid,s.serial#,P.spid,S.username,S.osuser,P.serial#,P.terminal,P.program,P.background,S.status,A.sql_text 
FROM v$process P, v$session S,v$sqlarea A WHERE P.addr = s.paddr AND S.sql_address = a.address (+) order by P.spid;
和LIUNX的下的TOP大家会发现不少东西的.好比说接口程序是很占CPU的还有查到实时会话.

 


ps 和 top均可以看系统中正在运行的进程
ps 命令提供了当前运行进程的快照。
使用带有 -ef 选项的 ps ,返回系统中全部用户的全部进程的完整列表。若是您将此 ps 命令的结果传送到 grep 中,则该结果更易于查看。例如: 
$ ps -ef | grep oracle
这条命令会显示:
UID PID PPID C STIME TTY TIME CMD

oracle 1633 1 0 13:58 ?00:00:00 ora_pmon_ora1

oracle 1635 1 0 13:58 ?00:00:00 ora_dbw0_ora1

oracle 1637 1 0 13:58 ?00:00:01 ora_lgwr_ora1

oracle 1639 1 0 13:58 ?00:00:02 ora_ckpt_ora1 下面是ps的选项 -A:列出全部的进程。  -l:显示长列表。 -m:显示内存信息。 -w:显示加宽能够显示较多的信息。  -e:显示全部进程。 a:显示终端上的全部进程,包括其它用户的进程。 -au:显示较详细的信息。 -aux:显示全部包含其它使用者的进程。  要即时查看最活跃的进程,可以使用 top

相关文章
相关标签/搜索