oracle 锁表 (在OS级杀死进程)

关闭数据库
SQL>shutdown immediate
关闭数据库,以确保杀死所有未断的User Session
当实例无法关闭无法使用shutdown immediate关闭时,可使用shutdown abort关闭实例,但关闭后应startup并再次使用shutdown immediate关闭实例,保证Database的同步


当在oracle下kill oracle进程后,sid被标记为Killed,但锁表仍未释放时,就在OS级杀进程。
主要步骤如下:
1)
select s.PROCESS,
s.SID,
s.SERIAL#,
b.object_name,
b.subobject_name,
a.LOCKED_MODE,
s.OSUSER,
s.LOGON_TIME,
s.MACHINE,
s.PROGRAM
from v$locked_object a, dba_objects b, v$session s
where a.OBJECT_ID = b.object_id
and a.SESSION_ID = s.SID
2)
alter system kill session 'SID,SERIAL#';

3)
此时如果oracle会话被标记为killed,但仍然锁住表,则需要根据SPID到OS系统中杀相应的oracle进程
查询spid的语句如下:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=此处为上面查出的SID

4) kill -9 spid

查看当前user的serial#和sid
select sid, serial#, status from v$session where audsid=userenv('sessionid');

查看当前user的spid
select spid from v$process p join v$session s on p.addr=s.paddr and s.audsid=userenv('sessionid');

查看当前用户的trace file路径:

select p.value || '\' || t.instance || '_ora_' || ltrim(to_char(p.spid,'fm99999')) || '.trc'

from v$process p, v$session s, v$parameter p, v$thread t

where p.addr = s.paddr and s.audsid = userenv('sessionid') and p.name = 'user_dump_dest';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值