ITPub博客

首页 > 数据库 > Oracle > ORA-02049:超时:分布式事务处理等待锁模拟

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

Oracle 作者:event_horizon 时间:2017-05-08 14:03:38 0 删除 编辑

现场报这个错,我想模拟一下,看是什么问题。

在数据库B上建表:

?
1
2
3
4
5
6
7
8
9
10
create table TEST
(
A NUMBER,
B DATE
);
insert into test (A, B) values (2, to_date('16-04-2015 16:38:26', 'dd-mm-yyyy hh24:mi:ss'));
insert into test (A, B) values (1, to_date('24-03-2015 16:32:36', 'dd-mm-yyyy hh24:mi:ss'));
insert into test (A, B) values (2, to_date('16-04-2015 16:35:19', 'dd-mm-yyyy hh24:mi:ss'));
insert into test (A, B) values (2, to_date('16-04-2015 16:35:19', 'dd-mm-yyyy hh24:mi:ss'));
commit;


在数据库A上:
?
1
2
3
4
5
6
7
8
9
10
drop database link to_B;
create database link to_B
connect to B_user identified by B_password
using '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.15.10)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)';

在数据库B上执行update不提交:
SQL> update test set b = sysdate where A =2;

在数据库A上:
?
1
2
3
4
5
6
7
8
SQL> show parameter distributed_lock_timeout;
NAME TYPE VALUE
------------------------------------ ----------- -------
distributed_lock_timeout integer 60
 
SQL> update test@to_B set b = sysdate where A =2;
update test@to_B set b = sysdate where A =2
*

第 1 行出现错误:
ORA-02049: 超时: 分布式事务处理等待锁

ORA-02063: 紧接着 line (起自 TO_B)

等待60s后就报超时,就是distributed_lock_timeout设置的值

解决方案:数据库B上的事务尽快提交,或者数据库B上的SQL(update or delete or merge)太慢,需要调优。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31457735/viewspace-2138691/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2017-05-04

  • 博文量
    17
  • 访问量
    12936