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

时间:2015-11-24 08:21:16

标签: oracle plsql

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

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

1 个答案:

答案 0 :(得分:5)

你没有杀死程序,你杀了会话

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

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

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

      除了上述语法之外,您还可以添加 IMMEDIATE 子句。

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

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

      阅读此article了解详情。