>  기사  >  데이터 베이스  >  ORA-02049: 超时: 分布式事务处理等待锁模拟

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

WBOY
WBOY원래의
2016-06-07 16:07:321772검색

现场报这个错,我想模拟一下,看是什么问题。 在Oracle数据库B上建表: create table TEST( A NUMBER, B DATE);insert into te

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

在Oracle数据库B上建表:

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上:
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上:
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)太慢,需要调优。

本文永久更新链接地址

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.