oracle中 kill 正在执行的存储过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中 kill 正在执行的存储过程相关的知识,希望对你有一定的参考价值。

正在执行的存储过程,怎样强行停止?
如果使用kill的话,如何找到该存储过程对应的进程id?
嗯,解决了,通过
select j.*, v.sid, v.serial#, v.PROCESS
from V$session v,
DBA_JOBS_RUNNING R,
DBA_JOBS J where J.WHAT like '%存储过程名%';
查到了进程id。 谢谢大家

存储过程卡死了,一般是好几个人同时编译导致的,同时往一个表插数据等操作就会锁死此表。
select a.SID,a.SERIAL#,a.USERNAME
from sys.v_$session a,sys.dba_objects b,v$locked_object c
where b.object_id = c.OBJECT_ID
and a.SID = c.SESSION_ID
and b.object_name = '表名';
用上面 的语句找到存储过程中主要用插入表的sid 和SERIAL#
然后用下面的语句杀掉。
alter system kill session 'sid ,SERIAL#';
如果杀不掉的话,等所有人释放,或者从启服务。
参考技术A 有个dbarstian软件,可以查看存储过程

在 oracle 中执行存储过程后是不是发生任何自动提交?

【中文标题】在 oracle 中执行存储过程后是不是发生任何自动提交?【英文标题】:Is there any auto commit happens after executing stored procedures in oracle?在 oracle 中执行存储过程后是否发生任何自动提交? 【发布时间】:2015-12-09 15:43:59 【问题描述】:

我在 oracle DB 中有 3 个表。我正在编写一个程序来根据某些条件删除所有 3 个表中的某些行。

我在过程中一一使用了所有三个删除语句。在执行上述存储过程时,执行时是否发生了自动提交?

否则,我是否需要在最后手动编码提交?

【问题讨论】:

在 PL/SQL 函数或过程中没有自动提交。 我正在使用 oracle 命令行。在那,我正在执行上述过程。执行完之后,我是否需要手动输入commit命令,因为我在存储过程中使用了delete语句。 【参考方案1】:

数据库级别没有自动提交,但您使用的 API 可能具有自动提交功能。 From Tom Kyte.

也就是说,我想补充一下:

除非您正在执行自主事务,否则您应该远离直接在过程中提交:From Tom Kyte。

摘录:

我希望 PLSQL 不支持提交/回滚。我坚信 事务控制必须在最高调用者级别完成。那 是您可以采用这 N 个存储过程并绑定它们的唯一方法 一起交易。

此外,还应该注意的是,对于 DDL(根据您的问题,这听起来不像您在程序中执行任何 DDL,但只是将其列为潜在的陷阱),Oracle 在之前添加了一个隐式提交在 DDL 之后。

【讨论】:

【参考方案2】:

没有autocommit,但是可以在存储过程中设置commit命令。

示例 #1:no commit

create procedure my_proc as
begin
  insert into t1(col1) values(1);
end;

当你执行你需要调用的过程时commit

begin
  my_proc;
  commit;
end;

示例 #2:commit

create procedure my_proc as
begin
  insert into t1(col1) values(1);
  commit;
end;

当你执行程序时,你不需要调用commit,因为程序会这样做

begin
  my_proc;
end;

【讨论】:

【参考方案3】:

在存储过程的范围内没有自动提交。但是,如果您使用的是 SQL Plus 或 SQL Developer,则根据设置自动提交是可能的。

您应该将提交和回滚作为存储过程代码的一部分来处理。

【讨论】:

以上是关于oracle中 kill 正在执行的存储过程的主要内容,如果未能解决你的问题,请参考以下文章

使用 dbms_job 在包内执行 oracle 中的存储过程

Oracle 解决存储过程包中,kill session的权限问题

ORACLE系列脚本2:救命的存储过程应急处理脚本

oracle存储过程连续执行结果不同

oracle存储过程

赵强老师Oracle存储过程中的out参数