我正在使用Oracle sql开发人员。我有一个涉及两个表(表1和表2)之间的MINUS语句的过程。表1具有超过一百万行数据。在这种情况下,当我尝试执行它时,它只返回执行阶段。
同时,我需要截断这个表数据。但是,在执行此操作时,我遇到了资源繁忙的错误。如何终止执行存储过程以及如何同时执行截断操作?
答案 0 :(得分:5)
你没有杀死程序,你杀了会话。
在杀死会话之前,您可能想知道读者不会阻止编写者,反之亦然。因此,如果您想选择/投影正在修改的表中的行,您可以随时执行此操作。
SELECT s.sid, s.serial#, p.spid, s.username, s.program FROM v$session s JOIN v$process p ON p.addr = s.paddr WHERE s.type != 'BACKGROUND';
ALTER SYSTEM KILL SESSION 'sid,serial#';
KILL SESSION
命令实际上并未终止会话。它只是要求会话自杀。在某些情况下,例如等待远程数据库的回复或回滚事务,会话不会立即自行终止并等待当前操作完成。在这些情况下,会话的状态为"标记为kill"。然后它会尽快被杀死。
除了上述语法之外,您还可以添加 IMMEDIATE 子句。
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
这不会影响命令执行的工作,但会立即将控制权返回给当前会话,而不是等待确认kill。
阅读此article了解详情。