关于Oracle 顽固的KILLED 状态的SESSION的处理
2008-07-17 16:25
330 查看
最近在执行一个大业务量的存储过程,中间中断,造成了对某个表的锁。这时我再想修改存储过程,则因为这个锁的存在,一直在等待。
在pl/sql developer中将这个session的状态设置为KILLED,结果等了半天也没有被PMON给清除掉,一直在那锁表。参考一些资料,可以用下面的方法解锁。
--下面这个sql语句,可以列出来各个脚本,需要录入sid,这个sid可以从pl/sql developer的session中查到。
SELECT 'alter system kill session ''' || ta.sid || ',' || ta.serial# || ''';',
'alter system disconnect session ''' || ta.sid || ',' || ta.serial# || ''' immediate;',
'host orakill ' || tc.instance_name || ' ' || tb.spid,
'kill -9 ' || tb.spid,
tb.spid,
ta.osuser,
tb.program,
ta.terminal,
ta.program
FROM v$session ta, v$process tb, v$instance tc
WHERE tb.addr = ta.paddr
AND ta.sid = &yoursid;
-- 也可以用这个Metalink提供的脚本,其中的os thread就是在orakill 时写的spid
select p.spid "OS Thread", b.name "Name-User", s.osuser, s.program
from v$process p, v$session s, v$bgprocess b
where p.addr = s.paddr
and p.addr = b.paddr UNION ALL
select p.spid "OS Thread", s.username "Name-User", s.osuser, s.program
from v$process p, v$session s
where p.addr = s.paddr
and s.username is not null;
然后执行c:/>orakill oracle_sid os_thread,就可以杀掉killed的进程了。注意要避免杀系统进程,避免数据库宕机。
在pl/sql developer中将这个session的状态设置为KILLED,结果等了半天也没有被PMON给清除掉,一直在那锁表。参考一些资料,可以用下面的方法解锁。
--下面这个sql语句,可以列出来各个脚本,需要录入sid,这个sid可以从pl/sql developer的session中查到。
SELECT 'alter system kill session ''' || ta.sid || ',' || ta.serial# || ''';',
'alter system disconnect session ''' || ta.sid || ',' || ta.serial# || ''' immediate;',
'host orakill ' || tc.instance_name || ' ' || tb.spid,
'kill -9 ' || tb.spid,
tb.spid,
ta.osuser,
tb.program,
ta.terminal,
ta.program
FROM v$session ta, v$process tb, v$instance tc
WHERE tb.addr = ta.paddr
AND ta.sid = &yoursid;
-- 也可以用这个Metalink提供的脚本,其中的os thread就是在orakill 时写的spid
select p.spid "OS Thread", b.name "Name-User", s.osuser, s.program
from v$process p, v$session s, v$bgprocess b
where p.addr = s.paddr
and p.addr = b.paddr UNION ALL
select p.spid "OS Thread", s.username "Name-User", s.osuser, s.program
from v$process p, v$session s
where p.addr = s.paddr
and s.username is not null;
然后执行c:/>orakill oracle_sid os_thread,就可以杀掉killed的进程了。注意要避免杀系统进程,避免数据库宕机。
相关文章推荐
- unix下面kill oracle里面已经处于killed状态的session
- ORACLE DML LOCK时找出对应SESSION正在执行的SQL语句(ORA-12841,无法变更事务处理中的会话并行 DML 状态)
- Oracle session inactive状态临时表数据未清空问题
- discover meteor实例代码第9章关于session is no defined的处理
- oracle 中oci 关于null 的处理方法
- 关于Oracle中重复数据的处理
- ORACLE 锁表处理,解锁释放session
- 关于NHibernate中存在于Session中实例的3种状态的简单分析
- 关于oracle的&字符的处理
- oracle10g- oracle 关于集合数据的处理 cursor 游标
- ora-00031:session marked for kill处理oracle中杀不掉的锁
- Oracle关于日期处理技巧
- 关于session过期跳转的处理方法
- 关于Sessiont丢值的处理方法
- 关于oracle被锁kill_session问题
- oracle 关于表中重复记录的处理
- sql server与oracle的事务处理中关于DDL SQL的异同 (整理)
- ORA-00031: session marked for kill 处理Oracle中杀不掉的锁
- 关于spring session redis共享session的跨子域的处理
- Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数