ORA-00031: 标记要删去的会话


今天做数据清洗,在做数据操作的时候突然发现了一个小问题需要立即停止在运行的存储过程。于是狂点取消,结果是停下来了,但是发现表被锁起来了,而且是TM锁(表级)。郁闷!!一KILL就给我来个ORA-00031: 标记要删去的会话。郁闷!到网上狂搜解决办法,发现出现这问题的同僚还蛮多。呵~在这写下解决办法:

第一:确认有那些锁,并的出相应的SID和SERIAL#。以便KILL

SELECT /*+   rule   */
s.username,
decode(l.type, 'TM', 'TABLE   LOCK', 'TX', 'ROW   LOCK', NULL) LOCK_LEVEL,
o.owner,
o.object_name,
o.object_type,
s.sid,
s.serial#,
s.terminal,
s.machine,
s.program,
s.osuser
FROM v$session s, v$lock l, dba_objects o
WHERE l.sid = s.sid
   AND l.id1 = o.object_id(+)
   AND s.username is NOT NULL

第二:使用kill语句

alter system kill session 'SID,SERIAL#'

第二步的过程时间会根据数据量的大小而定,我开始以为这个语句没用,而且用一次给我抛一次ORA-00031: 标记要删去的会话的异常。我的800W条数据大概等了十几份钟吧。

你可能感兴趣的:(ora)