分布式事务正在等待锁定

时间:2018-07-13 14:23:54

标签: sql oracle sql-update

我正在尝试将列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 dispatch_lock_timeout秒。   
*动作:被视为僵局

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

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

这可以按预期工作。
 因此,为什么不能更新表中的所有行?为什么会显示此错误?

1 个答案:

答案 0 :(得分:1)

由于表中的行太多,因此ALTER SYSTEM SET distributed_lock_timeout=120; 表将被锁定。 oracle默认将其设置为60秒。如果您的执行时间超过60秒将是错误的。

您可以尝试设置超时值

ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY;

或禁用它。

ALTER SYSTEM

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

注意:

  • 记住:运行任何{{1}}命令时,您需要重新启动实例。