一、查询所有进程
select * from v$session;
1、sid 通俗就是 标识一个进程
2、serial# 未解
1、username 当前数据库用户
2、status 当前进程状态 inactive 通俗讲就是该进程的任务完成了,可以进行回收; active 通俗讲就是该进程的任务还在执行;
3、osuser 请求方用户名
4、machine 请求方设备
5、program 请求方设备,可以看出是什么工具链接的 例如 PLSQL,JDBC;
二、查询所有锁
select username,lockwait,status,machine,program from v$session where sid in
(select session_id from v$locked_object);
三、查询死锁SQL
selecr b.sql_text, sid, serial#, osuser, machine
from v$session a, v$sqlarea b
where a.sql_address = b.address;
四、查询所有死锁
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo,
dba_objects ao,
v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;
五、杀进程
alter system kill session 'sid,serial#';
如果在杀进程时抛出ora - 00031:标识要终止的会话,使用下面方式
select a.spid,b.sid,b.serial#,b.username
from v$process a,v$session b
where a.addr=b.paddr
and b.status='KILLED';
select b.spid,a.osuser,b.program
from v$session a,v$process b
where a.paddr=b.addr
and a.sid=b.sid;
linux:进入linux服务器进行 kill -9 b.spid;
windows:
orakill sid thread
orakill 数据库实例名 b.spid