`
小杨学JAVA
  • 浏览: 941208 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ORA-02049: 超时: 分布式事务处理等待锁

阅读更多
转:http://blog.itpub.net/15672129/viewspace-767129/
今晚接到项目经理发来的数据库问题,报错为ORA-02049: 超时: 分布式事务处理等待锁,第一时间感觉是维护的数据库的dblink问题,因为现在维护的这些数据库使用大量dblink,70%以上的查询都使用dblink,查看对于的存储过程发现,在循环处理后没有commit,导致该问题的出现。
 
下面是在测试环境的模拟:
 
连接第一个数据库,查看DISTRIBUTED_LOCK_TIMEOUT参数的值为60,创建测试表,并产生一个事务,不提交
 
SQL> show parameter DISTRIBUTED_LOCK_TIMEOUT
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
distributed_lock_timeout             integer     60
 
SQL> create table t_herman
  2  (id number(10),
  3  name varchar(20));
 
Table created.
 
SQL> insert into t_herman values(0,'test');
 
1 row created.
 
SQL> commit;
 
Commit complete.
 
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
 
TO_CHAR(SYSDATE,'YY
-------------------
2013-07-25 20:40:36
 
SQL> update t_herman set name='abc' where id=0;
 
1 row updated.
 
 
 
连接第二个数据库,创建dblink连接第一个数据库,并修改上面表的对于行的数据,等待60秒,产生ORA-02049错误
 
[ABPCS01]/oracle#sqlplus system/oracle
 
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 25 20:35:39 2013
 
Copyright (c) 1982, 2009, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
 
SQL> show parameter DISTRIBUTED_LOCK_TIMEOUT
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
distributed_lock_timeout             integer     60
 
SQL> create database link to_hss217 CONNECT TO system IDENTIFIED BY oracle USING 'HSSDB_217';
 
Database link created.
 
SQL> update t_herman@to_hss217 set name='xyz' where id=0;
update t_herman@to_hss217 set name='xyz' where id=0
*
ERROR at line 1:
ORA-02049: timeout: distributed transaction waiting for lock
ORA-02063: preceding line from TO_HSS217
 
 
总结:
DISTRIBUTED_LOCK_TIMEOUT:specifies the amount of time (in seconds) for distributed transactions to wait for locked resources.
该参数指定等待分布式锁资源的时间,超过这个时间事务自动回滚,即在等待未释放的资源超过一定的时间,系统自动报错给客户端
该值默认为60,即等待分布式锁资源60秒
从上面的测试来看,使用dblink做分布式事务时一定要及时commit或rollback,尽量在分布式应用中使用短事务为宜
分享到:
评论

相关推荐

    oracle错误代码大全

    Oracle数据库是世界上最流行的数据库管理系统之一,它在处理复杂的事务处理和大数据存储方面表现出色。然而,在使用Oracle进行SQL操作时,可能会遇到各种错误代码,这些错误通常提供了关于问题的详细信息,帮助...

    Oracle错误代码大全.pdf

    Oracle数据库是世界上最流行的数据库管理系统之一,它在处理大量数据和复杂事务方面表现出色。然而,随着系统的使用,可能会遇到各种错误,这些错误通常通过错误代码来标识,方便开发者和DBA进行诊断和解决。以下是...

    分布式事务处理方案.docx

    ### 分布式事务处理方案详解 #### 数据库事务的基本特性:ACID 在讨论分布式事务之前,我们首先回顾一下数据库事务的基本概念。数据库事务具备四大基本特性:原子性(Atomicity)、一致性(Consistency)、隔离性...

    ORACLE错误一览表 方便查询

    Oracle数据库是世界上最流行的数据库管理系统之一,它在处理大量数据和复杂事务方面表现出色。然而,如同任何复杂的系统,Oracle也可能遇到各种错误。本篇文章将详细解释这些错误代码及其含义,帮助用户更好地理解和...

    Best Practices for Using XA with RAC

    这会导致行级锁冲突,进而引发ORA-2049错误(等待分布式锁超时),或在恢复过程中出现ORA-24756和ORA-1591等错误,这些问题都与两阶段提交(Two-Phase Commit, 2PC)过程中的异常有关。 ### 二、解决策略:单例服务...

Global site tag (gtag.js) - Google Analytics