杀死执行程序的方法是什么?

Kal*_*yan 3 oracle plsql

我正在使用Oracle sql开发人员.我有一个涉及两个表(表1和表2)之间的MINUS语句的过程.表1具有超过一百万行数据.在这种情况下,当我尝试执行它时,它只返回执行阶段.

同时,我需要截断这个表数据.但是,在执行此操作时,我遇到了资源繁忙的错误.如何终止执行存储过程以及如何同时执行截断操作?

Lal*_*r B 5

你没有杀死一个程序,你杀了一个会话.

在杀死会话之前,您可能想知道读者不会阻止编写者,反之亦然.因此,如果要从正在修改的表中选择/投影行,则可以始终执行此操作.

  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';
  1. 杀掉会话:
ALTER SYSTEM KILL SESSION 'sid,serial#';

KILL SESSION命令实际上不会终止会话.它只是要求会话自杀.在某些情况下,例如等待远程数据库的回复或回滚事务,会话不会立即自行终止并等待当前操作完成.在这些情况下,会话将具有"标记为杀死"的状态.然后它会尽快被杀死.

除了上面描述的语法之外,您还可以添加IMMEDIATE子句.

ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

这不会影响命令执行的工作,但会立即将控制权返回给当前会话,而不是等待确认kill.

阅读本文了解更多详情.