问题标签 [ora-00054]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1240 浏览

oracle - 如何在我的 SQL*Loader 加载过程中跟踪什么是重新启用触发器?

我似乎在我的日志中看到了很多这样的消息:

这是在我的本地开发机器上,所以不应该有任何其他东西试图插入这些表。我怎样才能找到造成这种情况的原因?有什么方法可以防止触发器被重新启用(至少看看我的脚本中是否有错误)?

0 投票
2 回答
43026 浏览

sql - 你如何检查一行是否被锁定以进行更新?

有没有一种方法可以测试一行是否已在 Oracle 中被锁定以进行更新?

例如,假设由一位用户执行以下查询:

对于另一个用户,我想检查该行THE_ID = 1000是否被锁定。如果我尝试更新或其他操作,第二个用户会被阻止并继续等待(不希望这样)。

我还尝试使用第二个用户运行以下查询:

由于我不能在同一行放置两个锁,这将失败。它确实如此。我收到“ORA-00054:资源繁忙,并以 NOWAIT 指定错误获取”。我是否可以始终依靠此错误来检查锁的存在,或者是否有一种更简单、更简洁的方法来确定一行是否被锁定?

谢谢!

0 投票
1 回答
2260 浏览

oracle - 自治事务中的 Oracle DDL

我需要在 Oracle 数据库上执行一堆(最多约 1000000 条)sql 语句。这些语句最终应该导致引用一致的状态,如果发生错误,所有语句都应该回滚。这些陈述没有参考顺序。因此,如果启用了外键约束,则其中一个语句可能会导致外键违规,即使此违规将通过稍后执行的语句来修复。

我尝试先禁用外键并在执行所有语句后启用它们。我认为当发生实际的外键违规时我可以回滚。不过我错了,我发现 Oracle 中的每个 DDL 语句都以提交开头,因此无法以这种方式回滚语句。这是我禁用外键的脚本:

经过一番研究,我发现建议在自治事务中执行 DDL 语句,就像在这种情况下一样。所以我尝试在自治事务中运行 DDL 语句。这导致了以下错误:

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

我猜这是因为主事务仍然在表上具有 DDL 锁。

我在这里做错了什么,还是有其他方法可以使这种情况起作用?

0 投票
5 回答
151434 浏览

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

我杀死了一个正在更新表格的脚本。现在,当我重新运行我得到的脚本时,

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

我想桌子被锁定了?如何解锁表?提前致谢。

0 投票
2 回答
653 浏览

php - 一个 PHP/应用程序会话是否对应一个 Oracle/数据库会话?

我遇到了一些我没想到的行为。我有一个通过 PHP/OCI8 启动的同步过程。在该过程的开始有一个SELECT...FOR UPDATE NOWAIT

我这样做NOWAIT是因为我希望用户立即通过错误消息通知该进程已经在运行,而不是让他们的浏览器等待锁定。

当我从具有两个单独 PHP 会话的两台单独的计算机上运行该过程时,我得到了预期的行为:一台运行,而另一台运行ORA-00054: resource busy and acquire with NOWAIT specified.

但是,当我在同一个浏览器上打开两个选项卡并运行该过程时,第二个选项卡会等待 30 多秒以使第一个选项卡完成,然后运行第二个选项卡——就好像我没有指定NOWAIT.

我没有使用任何类型的持久连接或连接池。我认为一个单独的 HTTP 请求,执行单独的 PHP=>Oracle 连接,会给我单独的数据库会话。不是这样吗?

更新:我在 #6 下找到了这个:http ://wiki.oracle.com/page/PHP+Oracle+FAQ,如何使用 OCI8 扩展连接到 Oracle?它说:

如果在脚本或 httpd 服务器会话中多次使用相同的用户凭据,PHP 将共享/重用连接。您可以使用 oci_new_connect() 函数来确保使用新会话。调用 oci_pconnect() 函数以建立在脚本结束时未关闭的持久连接(使下一个脚本中的重新连接更快)。

但是,当我更改oci_new_connect它并不能解决问题。不同计算机上的不同会话抛出ORA-00054,但同一浏览器上的两个选项卡同步访问但不尊重NOWAIT

0 投票
4 回答
1829 浏览

oracle - ORA-00054 加载大型数据文件时

我在加载大型数据文件(~ 10 gb)时得到 ORA-00054 当在前一个文件之后加载这个新文件时会发生错误。有什么想法可以解决这个问题吗?

0 投票
15 回答
1198915 浏览

oracle - ORA-00054: 资源繁忙并使用指定的 NOWAIT 获取或超时已过期

为什么我在更新表时收到此数据库错误?

第 1 行出现错误:ORA-00054:资源繁忙并使用指定的 NOWAIT 获取或超时过期

0 投票
1 回答
790 浏览

oracle - 向 Oracle OLTP 表添加列

我正在尝试在应用程序运行且繁忙时向 Oracle 10 OLTP 数据库中的常用表添加一个可为空的列。添加可为空的列只是数据字典的更改,因此任何表锁都只保留很短的时间(可以由系统处理)。

问题是我ALTER TABLE经常失败:

我目前的方法是通过运行它来阻止更改,直到表上碰巧没有锁为止。这意味着我不能在 SQL*Plus 中完整地运行这样的脚本,而是需要复制和粘贴每个语句并确保它有效。

有没有更好的办法?

0 投票
2 回答
20429 浏览

sql - ORA-00054 删除表时资源繁忙

有人可以解释这个错误吗?

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

此错误出现在DROP TABLE. 正因为如此,程序和包没有被编译。

0 投票
1 回答
7770 浏览

sql - alter table 启用表锁;和 ORA-00054

我使用alter table disable table lock 子句错误地禁用了对表的锁定。现在我想启用它的锁定,因为我想使用以下语句更改表名:

SQL> alter table account.acctbk_payment_seq 启用表锁;alter table account.acctbk_payment_seq enable table lock * ERROR at line 1: ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

有什么理想吗?

谢谢您的回复。ora 1120 例如:

ORA-00054: 资源繁忙并使用指定的 NOWAIT 获取或超时已过期