ORA-02049: Timeout: distributed transaction waiting for lock(超时:分布式事务正在等待锁)
Oracle含义
分布式事务在等待远程数据库上的锁时超出了 DISTRIBUTED_LOCK_TIMEOUT。事务已超时。
原因
通过数据库链接运行的事务在等待远端被锁定的行;远程会话中的长事务、网络延迟,或两端持有相互冲突的锁。
解决方法
在远程数据库上找到并解决阻塞的锁和会话(v$lock、v$session)。保持分布式事务简短,并尽可能晚地获取所需的锁。必要时针对工作负载增大 DISTRIBUTED_LOCK_TIMEOUT(SPFILE,需要重启)。对于 in-doubt 分布式事务,检查 DBA_2PC_PENDING 视图,必要时手动处理。
同一数据库的其他条目
- ORA-28000The account is locked(账户已锁定)
- ORA-01578Oracle data block corrupted (file #, block #)(Oracle 数据块损坏(文件号,块号))
- ORA-01722Invalid number(无效数字)
- enq: TX - row lock contention等待:会话被另一事务持有的行级锁阻塞
- log file sync等待:会话在提交时等待 LGWR 将 redo 刷新到磁盘
- db file sequential read等待:单块物理读,通常为索引或表查找
- db file scattered read等待:多块物理读,通常为全表扫描或索引快速全扫描