


















在Oracle 11g中,要查询并终止锁定会话临时表(ON COMMIT PRESERVE ROWS)的会话,请按照以下步骤操作:
LOCK和VSESSION视图SELECT l.sid, s.serial#, s.username, s.osuser,
s.machine, s.program, s.module, s.action,
l.type, l.lmode, l.request, l.block
FROM v$lock l
JOIN v$session s ON l.sid = s.sid
WHERE l.type = 'TO' -- TO表示临时对象锁
AND l.id1 IN (
SELECT object_id
FROM dba_objects
WHERE object_name = UPPER('您的表名')
AND owner = UPPER('表所有者')
AND temporary = 'Y'
);
SELECT s.sid, s.serial#, s.username, s.status,
s.machine, s.program, s.logon_time
FROM v$access a
JOIN v$session s ON a.sid = s.sid
WHERE a.object = UPPER('您的表名')
AND a.owner = UPPER('表所有者');
找到锁定会话的SID和SERIAL#后,使用以下命令终止会话:
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
SELECT * FROM v$lock
WHERE type = 'TO'
AND id1 IN (
SELECT object_id
FROM dba_objects
WHERE object_name = UPPER('您的表名')
AND owner = UPPER('表所有者')
);
ALTER SYSTEM CHECKPOINT;
ALTER SYSTEM FLUSH SHARED_POOL;
如果会话无法正常终止,可以尝试以下方法:
SELECT s.sid, s.serial#, p.spid, s.osuser, s.program
FROM v$session s, v$process p
WHERE s.paddr = p.addr
AND s.sid = [问题会话的SID];
然后使用操作系统命令:
kill -9 [SPID]
SELECT sid, serial#, username, program, status,
last_call_et/3600 as hours_active
FROM v$session
WHERE type = 'USER'
ORDER BY last_call_et DESC;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。