解决ORACLE 数据库表锁死问题SQL,下面的是从同事那里考过来的,原出处未知。记录起来,希望有人用的上。
第一条SQL语句查询所有正在使用的表,以及表的信息
SELECT S.SID SESSION_ID,
S.USERNAME,
S.SERIAL#,
DECODE(LMODE,
0,
'None',
1,
'Null',
2,
'Row-S (SS)',
3,
'Row-X (SX)',
4,
'Share',
5,
'S/Row-X (SSX)',
6,
'Exclusive',
TO_CHAR(LMODE)) MODE_HELD,
DECODE(REQUEST,
0,
'None',
1,
'Null',
2,
'Row-S (SS)',
3,
'Row-X (SX)',
4,
'Share',
5,
'S/Row-X (SSX)',
6,
'Exclusive',
TO_CHAR(REQUEST)) MODE_REQUESTED,
O.OWNER || '.' || O.OBJECT_NAME || ' (' || O.OBJECT_TYPE || ')',
S.TYPE LOCK_TYPE,
L.ID1 LOCK_ID1,
L.ID2 LOCK_ID2
FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S
WHERE L.SID = S.SID
AND L.ID1 = O.OBJECT_ID;
第二条SQL 这条用来根据上面SQL查询到的SID 字段和SESSION_ID字段的值来杀掉正在运行的锁死的表。
alter system kill session '22,114';
原文地址:http://hi.baidu.com/blue_shark1977/blog/item/94c2a43e03b100ca7d1e711d.html
前段时间调试Oracle存储过程时SQLPlus 停止响应,重启动程序后发现刚才调试的存储过程被锁了,只要一编译该存储过程,SQLPlus就停止响应,后来用如下方法解决: 1:找过程到相关存储过程的sid select sid from v$access where object = 'SP_DISPOSE_NE_MAP_HW_V9R8' ---SP_DISPOSE_NE_MAP_HW_V9R8 是存储过程名 2.根据sid找到serial# select SERIAL# from V$session where sid=70 ---70是第一个SQL语句查出来的SID 根据sid和serial#杀掉存储过程的锁 alter system kill session '70,1'; -70是第一个SQL语句查出来的SID 1是第二个SQL语句查出来的 SERIAL#
--------------------------------------------------------------------------------- select object_name,machine,s.sid,s.serial# |