Oracle sqlplus在删除查询时卡住了

Oracle sqlplus在删除查询时卡住了,oracle,session,plsql,oracle-sqldeveloper,sqlplus,Oracle,Session,Plsql,Oracle Sqldeveloper,Sqlplus,我在使用由SQL*Plus启动的匿名PL/SQL块时遇到了一个奇怪的问题。此块包含一条delete语句,如果由oracle sql开发人员界面启动,它将按预期工作。如果我通过sqlplus从cmd启动它,它就会卡住。 我发现delete语句就是问题所在。。。我的情况与下面这样一个更简单的代码相同: set serveroutput on size 1000000 begin DELETE FROM USER_LEAD; dbms_output.put_line('test'); end;

我在使用由SQL*Plus启动的匿名PL/SQL块时遇到了一个奇怪的问题。此块包含一条delete语句,如果由oracle sql开发人员界面启动,它将按预期工作。如果我通过sqlplus从cmd启动它,它就会卡住。 我发现delete语句就是问题所在。。。我的情况与下面这样一个更简单的代码相同:

set serveroutput on size 1000000
begin
  DELETE FROM USER_LEAD;
  dbms_output.put_line('test');
end;
/
exit;
如果我删除delete语句,一切都会正常工作,我真正的匿名块也是如此。我想指出的是,我是唯一一个使用db的人,所以我认为表不会被其他用户/进程锁定


有人遇到过这个问题吗?

我发现了问题所在

我正在使用sqlpus执行cmd的匿名块表单,而我与sql开发人员工具的会话仍处于打开状态。我关闭了与db的连接,一切正常

我想那个会话中有一些DML,我没有提交/回滚


感谢@LalitKumarB和@AlexPoole的洞察。

这可能是一件愚蠢的事情,但是,这种情况大多数时候都会发生

  • 您可以在一个会话中执行DML事务
  • 您尚未提交/回滚该会话
  • 打开另一个会话并执行另一个DML
  • 您发现查询一直在等待
您案例中发生的小演示:

第1课时

SQL> delete from emp where empno = 7369;

1 row deleted.
SQL> rollback;

Rollback complete.

SQL>
第二课时

SQL> delete from emp where empno = 7369;
SQL> delete from emp where empno = 7369;

1 row deleted.

SQL>
第二节课一直在等

让我们检查一下原因:

SQL> SELECT
  2     s.blocking_session,
  3     s.sid,
  4     s.serial#,
  5     s.seconds_in_wait
  6  FROM
  7     v$session s
  8  WHERE
  9     blocking_session IS NOT NULL;

BLOCKING_SESSION        SID    SERIAL# SECONDS_IN_WAIT
---------------- ---------- ---------- ---------------
             373        130      11069              44

SQL>
第1课时

SQL> delete from emp where empno = 7369;

1 row deleted.
SQL> rollback;

Rollback complete.

SQL>
第二课时

SQL> delete from emp where empno = 7369;
SQL> delete from emp where empno = 7369;

1 row deleted.

SQL>
第二次会议成功

SQL> SELECT
  2     s.blocking_session,
  3     s.sid,
  4     s.serial#,
  5     s.seconds_in_wait
  6  FROM
  7     v$session s
  8  WHERE
  9     blocking_session IS NOT NULL;

no rows selected

SQL>

所以,没有更多的会议等待

听起来好像有什么东西挡住了;不要认为,选中*8-)您可能在另一个会话中执行了一些DML,但忘记了提交/回滚。所以,其他会议一直在等待。所以我的猜测是正确的。我已经发布了一个小演示,演示了可能发生的事情。是的,你是对的@LalitKumarB。谢谢你的详细解释!