繁体   English   中英

一个分布式事务正在等待锁

[英]A distributed transaction is waiting for lock

我试图将列OLD_COL所有值复制到同一个表中的另一列NEW_COL中。 为了达到我想要的结果,我在 Oracle 中写下了以下UPDATE

UPDATE MY_TABLE
   SET NEW_COL = OLD_COL
   WHERE NEW_COL IS NULL;

其中MY_TABLE是一个由 400.000 行组成的大表。
当我尝试运行它时,它失败并显示错误:

QL 错误:ORA-02049:超时:分布式事务等待锁定
02049. 00000 - “超时:分布式事务等待锁定”
*原因:等待锁定超过了 INIT.ORA 的分布式锁定超时秒数。
*行动:视为僵局

我尝试运行以下查询来单独更新一行:

UPDATE MY_TABLE
   SET NEW_COL = OLD_COL
   WHERE ID = '1'

这按预期工作。
因此,为什么我不能更新表中的所有行? 为什么会出现这个错误?

因为你的表中有太多行,当你UPDATE表将被锁定。 oracle 默认设置为 60 秒。 如果你的执行时间超过 60 秒就会出错。

您可以尝试设置超时值

ALTER SYSTEM SET distributed_lock_timeout=120;

或禁用它。

ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY;

https://docs.oracle.com/cd/A84870_01/doc/server.816/a76960/ds_txnma.htm

笔记:

  • 请记住:在运行任何ALTER SYSTEM命令时,您需要重新启动实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM