现象:
报错ORA-02049: timeout: distributed transaction waiting for lock
1.原因
1.1 存在DB-LINK(以appl.test@db1 举例,任意一个DBLINK都可以)
1.2 申请TX锁发生阻塞(以cux_test_1举例,当然任意一个表都可以)
1.3 阻塞时间超过 show parameter DISTRIBUTED_LOCK_TIMEOUT 设置的时间,默认是60秒
2.重现
select * from cux_test_1 for update ;
select * from appl.test@db1 where rownum<=21;
select * from cux_test_1 for update ;
3.解决
select * from appl.test@db1 where rownum<=21;
select * from cux_test_1 for update ;
4.名词解释
参考链接:Managing Distributed Transactions (oracle.com)
select * from appl.test@db1
SELECT t.xidusn, --回滚段号t.xidslot, --插槽号t.xidsqn, --序列号t.ubafil, --undo 文件号t.ubablk, --undo 块号(SELECT DISTINCT tablespace_nameFROM dba_undo_extents eWHERE e.file_id = t.ubafil) tablespace_name,--查询undo 段信息(SELECT tablespace_nameFROM dba_data_files eWHERE e.file_id = t.ubafil) tablespace_name --数据文件表执行的表空间FROM gv$transaction t, gv$session sWHERE t.ses_addr = s.saddrAND s.sid = userenv('sid')
*/
select * from gv$global_transaction;
select * from gv$lock where sid=userenv('sid') AND TYPE='DX'
BEGINCOMMIT;--释放dblink占用dbms_session.close_database_link('db1');--关闭远程连接,等价于commit;alter session close database link db1;COMMIT;--结束事务,即使没有写任何DML语句END;
文章转载自云贝教育,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




