一个奇怪的SESSION问题!!!!

[复制链接]
查看11 | 回复9 | 2009-1-4 14:52:28 | 显示全部楼层 |阅读模式
今天应用部门报障碍说有一个应用慢,我发现这个用户的会话有很多锁,于是做如下操作想杀掉会话
SQL> select a.sid, a.serial#, a.program, a.logon_time, b.spid from v$session a, v$process b
2 where a.paddr = b.addr
3 and a.sid = 57
4;
SIDSERIAL# PROGRAM
LOGON_TIMESPID
---------- ---------- ------------------------------------------------ ----------- ---------
57 2003 AUTO_GDCL.EXE
2006-4-17 1 3904
SQL> alter system kill session '57,2003';
alter system kill session '57,2003'
ORA-00030: user session ID does not exist

发现通过KILL SESSION,不行,我就想通过杀操作系统进程
SQL> select a.sid, a.serial#, a.program, a.logon_time, b.spid from v$session a, v$process b
2 where a.paddr = b.addr
3 and a.sid = 57
4;
SIDSERIAL# PROGRAM
LOGON_TIMESPID
---------- ---------- ------------------------------------------------ ----------- ---------
57 2003 AUTO_GDCL.EXE
2006-4-17 1 3904

$ exit
logout
You have mail in /var/mail/root
hncz9701#[/]kill -9 3904
kill: 3904: The specified process does not exist.
还是不行!!!
我看到dba_2pc_spending有内容,就想通过释放这些资源来解锁
SQL> exec dbms_transaction.purge_lost_db_entry('11.1.402893');
begin dbms_transaction.purge_lost_db_entry('11.1.402893'); end;
ORA-01453: SET TRANSACTION must be first statement of transaction
ORA-06512: at "SYS.DBMS_TRANSACTION", line 65
ORA-06512: at "SYS.DBMS_TRANSACTION", line 85
ORA-06512: at line 1
一个郁闷的DBA求各位大侠帮忙!
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
select * from dba_2pc_pending;看看这个2阶段事务的当前状态。
先做force commit 或force rollback[建议这个]
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
回楼上,STATE是COMMITED
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
select LOCAL_TRAN_ID from dba_2pc_pending;
conn /as sysdba
alter session set "_smu_debug_mode"=4;
exec DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY(LOCAL_TRAN_ID);
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
如果是rac 環境﹐kill 的時候注意 session 所在的節點。
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
用下面语句查锁:
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
USERNAME
SIDSERIAL# LOGON_TIME
------------------------------ ---------- ---------- -----------
SYSTEM
21 1604 2005-12-20
SYSTEM
21 1604 2005-12-20
用下面语句杀掉死锁:
alter system kill session '21,1604';
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
commited的in doubt,如果先force commit然后再purge lost db engry呢?
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
据说过一段时间会自动消除的?
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
最初由 basileus1999 发布
[B]据说过一段时间会自动消除的? [/B]

RECO进程负责处理这些垃圾,但对于OLTP系统,这样一个锁可能直接导致业务阻塞,所以还是及时手工处理的好


回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
很多东西等ORACLE自己来做,业务就受影响了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行