【问题标题】:Getting ORA-00054 error in SQL Developer在 SQL Developer 中出现 ORA-00054 错误
【发布时间】:2015-06-18 15:24:30
【问题描述】:

我在尝试 DROP 表时遇到此错误。

我已经用谷歌搜索和搜索并尽我所能尝试了所有可能的解决方案,但到目前为止没有一个对我有用。

这是我得到的错误:

Error starting at line : 1 in command -
DROP TABLE INTEREST
Error report -
SQL Error: ORA-00054: resource busy and acquire with NOWAIT specified
00054. 00000 -  "resource busy and acquire with NOWAIT specified"
*Cause:    Resource interested is busy.
*Action:   Retry if necessary.

请记住,我对 SQLDeveloper 或 SQL 本身并不了解,所以请尽量详细说明。

谢谢!

【问题讨论】:

  • 其他会话正在使用您要删除的表。您可以继续重试,最终您可能会获得锁定。您可能需要要求 DBA 终止正在使用该表的任何会话(并防止它们在您完成之前返回)。或者您可能想质疑为什么要丢弃其他人显然依赖的对象。
  • @JustinCave 我是唯一使用这张桌子的人。我创建了一个表,我的部分任务是围绕该表开发查询。一切都很好,直到突然我的查询显示空列,所以我尝试删除表并重新创建它们,但现在我收到了这个错误。
  • 您是否有多个会话连接到数据库?我猜您的其他会话之一仍在使用该表。
  • @JustinCave 我在 SQLDeveloper atm 中只有一个活动连接。我尝试过多次断开连接并重新连接。
  • @JustinCave 没关系我设法修复它。我正在考虑这种联系,而您将其称为“会话”让我想到了您的意思。我看到我打开了多个选项卡,所以我决定关闭所有选项卡,但我目前正在使用的选项卡现在可以使用了。我的主要新手错误。谢谢!!!

标签: sql oracle ora-00054


【解决方案1】:

ORA-00054: 资源繁忙并使用指定的 NOWAIT 获取

错误很明显,有一个会话操纵了表,即执行了 DML 语句,但是没有 COMMITROLLBACK 发布。而且,您正尝试从 另一个会话 DROP 表。

请注意,当您打开多个选项卡时,即当您打开多个 SQL 工作表时,会有不同的会话

重现和解决问题的小演示:

第 1 次会议

SQL> create table t(a number);

Table created.

SQL> insert into t select 1 from dual;

1 row created.

SQL>

所以,我在 SESSION#1 中进行了 INSERT,但尚未提交。

第 2 次会议

SQL> drop table t purge;
drop table t purge
           *
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired


SQL>

所以,当我尝试在会话 2 中删除表时,我得到了错误。

要修复它,COMMIT 或 ROLLBACK session# 1。

第 1 次会议

SQL> commit;

Commit complete.

SQL>

第 2 次会议

SQL> drop table t purge;

Table dropped.

SQL>

【讨论】:

  • 如果我在 session1 中提交或回滚时仍然收到错误怎么办?事实上,即使我关闭所有会话并打开一个新会话并尝试删除表,我也会收到错误消息。有什么东西被锁住了吗?在这种情况下如何脱身。
  • 使用v$lock 查找导致此问题的会话,然后查找这些对象。见oraclerecipes.com/monitoring/find-blocking-sessions
猜你喜欢
  • 2015-12-08
  • 1970-01-01
  • 2014-10-31
  • 2013-05-16
  • 2014-06-23
  • 2022-01-02
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多