我正在使用Oracle sql开发人员.我有一个涉及两个表(表1和表2)之间的MINUS语句的过程.表1具有超过一百万行数据.在这种情况下,当我尝试执行它时,它只返回执行阶段.
同时,我需要截断这个表数据.但是,在执行此操作时,我遇到了资源繁忙的错误.如何终止执行存储过程以及如何同时执行截断操作?
你没有杀死一个程序,你杀了一个会话.
在杀死会话之前,您可能想知道读者不会阻止编写者,反之亦然.因此,如果要从正在修改的表中选择/投影行,则可以始终执行此操作.
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命令实际上不会终止会话.它只是要求会话自杀.在某些情况下,例如等待远程数据库的回复或回滚事务,会话不会立即自行终止并等待当前操作完成.在这些情况下,会话将具有"标记为杀死"的状态.然后它会尽快被杀死.
除了上面描述的语法之外,您还可以添加IMMEDIATE子句.
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
这不会影响命令执行的工作,但会立即将控制权返回给当前会话,而不是等待确认kill.
阅读本文了解更多详情.