为什么我得到这个数据库错误时,我更新表?
第1行错误: ORA-00054:资源繁忙,指定NOWAIT或超时获取
为什么我得到这个数据库错误时,我更新表?
第1行错误: ORA-00054:资源繁忙,指定NOWAIT或超时获取
当前回答
您的问题看起来像是混合了DML和DDL操作。请看这个URL,它解释了这个问题:
http://www.orafaq.com/forum/t/54714/2/
其他回答
我设法击中这个错误时,只是简单地创建一个表!在一个还不存在的表上,显然不存在争用问题。CREATE TABLE语句包含一个约束fk_name FOREIGN KEY子句,引用一个填充良好的表。我不得不:
从CREATE TABLE语句中删除外键子句 在FK列上创建一个INDEX 创建FK
我有这个错误发生时,我有2个脚本,我正在运行。我有:
SQL*Plus会话直接使用模式用户帐户(帐户#1)连接 另一个SQL*Plus会话使用不同的模式用户帐户(帐户#2)连接,但作为第一个帐户跨数据库链接连接
我运行了一个表删除,然后创建表作为帐户#1。 我对账号2的会话进行了表更新。没有提交更改。 以帐户#1的身份重新运行表删除/创建脚本。删除表x命令出错。
我通过运行COMMIT来解决这个问题;在账号#2的SQL*Plus会话中。
正如在其他回答中提到的,此错误是由在其他会话中运行的并发DML操作引起的。这将导致Oracle无法用默认的NOWAIT选项锁定DDL的表。
对于那些在数据库中没有管理权限或不能杀死/中断其他会话的用户,您还可以在DDL操作之前使用:
alter session set DDL_LOCK_TIMEOUT = 30;
--Run your DDL command, e.g.: alter table, etc.
我在后台作业执行大型插入/更新操作的数据库中反复收到此错误,在会话中更改此参数允许DDL在等待锁几秒钟后继续执行。
有关更多信息,请参阅rshdev对这个答案的注释、oracle-base上的这个条目或DDL_LOCK_TIMEOUT的官方文档。
我通过关闭一个IDE选项卡解决了这个问题。
PL / SQL开发人员 版本10.0.5.1710
Shashi的链接给出的解决方案是最好的…不需要联系dba或其他人
备份
create table xxxx_backup as select * from xxxx;
删除所有行
delete from xxxx;
commit;
插入备份。
insert into xxxx (select * from xxxx_backup);
commit;