linux中查看oracle进程在做什么,是否sql引起了锁 kill掉进程

ps -l 查看系统进程
    PID 每个进程的ID。
  PPID 每个进程的父进程ID。
  UID 每个进程所有者的UID 。
  USER 每个进程所有者的用户名。
  PRI 每个进程的优先级别。
  NI 该进程的优先级值。
  SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。
  TSIZE 该进程的代码大小。对于内核进程这是一个很奇怪的值。
  DSIZE 数据和堆栈的大小。
  TRS 文本驻留大小。
  D 被标记为“不干净”的页项目。
  LIB 使用的库页的大小。对于ELF进程没有作用。
  RSS 该进程占用的物理内存的总数量,单位是KB。
  SHARE 该进程使用共享内存的数量。
  STAT 该进程的状态。其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;

T代表停止或跟踪状态。
  TIME 该进程自启动以来所占用的总CPU时间。如果进入的是累计模式,那么该时间还包括这个进程子进程

所占用的时间。且标题会变成CTIME。

根据OS进程号,应该可以查到它正在执行什么SQL语句.
-- 查到oracle OS进程的sid编号:
select ses.sid from v$session ses,v$process pro where pro.spid=&spid and ses.paddr=pro.addr;
-- 查到此sid连接用户正在执行的SQL语句:
select sql_text from v$sqltext_with_newlines where (hash_value,address)
in (select sql_hash_value,sql_address from v$session where sid=&sid) order by address,piece;
查看oracle的锁是sql语句引起的

查看引起锁的session_id
 sync4j启动的进程
select * from v$locked_object where os_user_name='sync4j'
找到seesion_ID=139
找到引起的sql语句
SELECT a.username,
a.machine,
a.program,
a.sid,
a.serial#,
a.status,
c.piece,
c.sql_text
FROM v$session a,
v$sqltext c
WHERE a.sid = 139
and a.sql_address=c.address(+)
ORDER BY c.piece
v$sqltext就是引起锁的sql语句了

alter system kill session 'sid,serial#'  杀掉进程
  sid,serial#在v$session中可以查到

==================================

1.首先通过v$session_wait确定library cache pin等待事件的会话

2.确定要pin的对象:
select kglnaobj
from sys.x$kglob
where inst_id = userenv('instance')
and kglhdadr = v$session_wait.P1RAW;

3.确定阻塞的会话:
select a.sid,a.serial#,a.username,a.paddr,a.logon_time,
a.sql_hash_value,b.kglpnmod
from v$session a,sys.x$kglpn b
where a.saddr = b.kglpnuse
and b.inst_id= userenv('instance')
and b.kglpnreq = 0
and b.kglpnmod not in (0,1)
and b.kglpnhdl = v$session_wait.P1RAW;

确定哪些会话正在使用某个包/过程/函数/视图,如果有的话,这时就不要进行drop,complie之类的操作了
select c.sid
from sys.x$lglob a,sys.x$kglpn b,v$session c
where a.kglnaobj=大写的你要进行操作的包/过程/函数/视图
and a.kglhdadr=b.kglpnhdl
and b.kglpnuse=c.saddr;

-------------------------------------------------------------------------------------------------------------------------------------------------------1.首先通过v$session_wait确定library cache pin等待事件的会话

2.确定要pin的对象:
select kglnaobj
from sys.x$kglob
where inst_id = userenv('instance')
and kglhdadr = v$session_wait.P1RAW;

3.确定阻塞的会话:
select a.sid,a.serial#,a.username,a.paddr,a.logon_time,
a.sql_hash_value,b.kglpnmod
from v$session a,sys.x$kglpn b
where a.saddr = b.kglpnuse
and b.inst_id= userenv('instance')
and b.kglpnreq = 0
and b.kglpnmod not in (0,1)
and b.kglpnhdl = v$session_wait.P1RAW;

确定哪些会话正在使用某个包/过程/函数/视图,如果有的话,这时就不要进行drop,complie之类的操作了
select c.sid
from sys.x$lglob a,sys.x$kglpn b,v$session c
where a.kglnaobj=大写的你要进行操作的包/过程/函数/视图
and a.kglhdadr=b.kglpnhdl
and b.kglpnuse=c.saddr;

你可能感兴趣的:(linux中查看oracle进程在做什么,是否sql引起了锁 kill掉进程)