转: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,尽量在分布式应用中使用短事务为宜
相关推荐
ora-01033:oracle initialization or shutdown in progress 解决方法 ora-01033:oracle initialization or shutdown in progress 解决方法 ora-01033:oracle initialization or shutdown in progress 解决方法 ora-...
在运行查询SELECT * FROM V$SESSION 会出现ORA-29275:部分多字节字符的错误,这是什么原因开始我不得其解,网上也没有介绍什么好办法。本文给出答案。
ORA-12154: TNS: 无法解析指定的连接标识符的解决方法
ORA-00031:标记要终止的会话解决方案; ORA-00031:标记要终止的会话解决方案;
ORA-32001:write to spfile requested but no spfile is in use请求写入spfile,但没有使用spfile的解决方法 在输入以下语句中报了这样的错误: SQL>alter system set control_files=’/u01/app/oracle/oradata/prod/...
错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...
调整参数后引起,ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 3 2768M 的解决方案
oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。
ORA-01036:非法的变量名/编号 oracle特有的错误
oracle 12 c ORA-01017: 用户名/口令无效; 登录被拒绝
NULL 博文链接:https://3w1h.iteye.com/blog/1211779
-- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... ...
oracle报错ora-12541:TNS无监听程序
解决ORACLE TNS: 无法解析指定的连接标识符; 里面有步骤
有关表死锁的详细图片 博文链接:https://meteor-1988.iteye.com/blog/1568695
最近在工作中遇到了一个问题,错误是Oracle dbca时报错:ORA-12547: TNS:lost contact,通过查找相关的资料终于找到了解决的方法,下面分享给大家,话不多说了,来一起看看详细的介绍吧。 环境: OS:RHEL6.5 x86-...
ora-12514:TNS:监听程序当前无法识别连接描述符中请求的服务bug,解决文档.
CLOB字段类型报错 ORA-01704:文字字符串过长的解决
oracle19c缺少的函数
ORA-12541 TNSno listener 的解决方案 ORA-12541 TNSno listener 的解决方案