我试图将一列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 - “timeout: distributed transaction waiting for lock”
*原因:超过INIT.ORA distributed_lock_timeout秒等待锁。
*操作:将其视为死锁
我尝试运行以下查询以仅更新一行:
UPDATE MY_TABLE
SET NEW_COL = OLD_COL
WHERE ID = '1'
这个功能按照预期工作。
那么,为什么我不能更新表中的所有行?为什么会出现这个错误?
ALTER SYSTEM SET distributed_lock_timeout=60;
将其恢复为默认值,对吗? - RexamALTER SYSTEM ENABLE DISTRIBUTED RECOVERY; COMMIT;
- D-ShihALTER SYSTEM
语句,您需要拥有管理员特权,而我没有。但是我发现,系统中的另一个用户正在更新相同的表格,因此在我的角度下它被标记为锁定状态。在他提交后,我可以通过简单地运行上面提到过的查询来更新我的大表,而无需使用任何ALTER SYSTEM
命令。 - Rexam