无commit
这时停服务,但数据库层面还有有对象锁定。
select addr,sid,username,s.status,process,s.LAST_CALL_ET,s.program,START_DATE from
v$transaction t,v$session s
where t.ses_addr=s.saddr
order by LAST_CALL_ET;
查询无事务。
但下面锁定对象有。
select a.object_id,a.session_id,a.locked_mode,b.* from v$locked_object a,all_objects b
where a.OBJECT_ID=b.DATA_OBJECT_ID;
应用程序在处理锁定记录时出现
SQLCODE=[-2049]][ORA-02049: 超时: 分布式事务处理等待锁。
===============================================================
结论:
经分析上述方法应该是应用使用了全局事务(tuxedo应用)。
全局事务有开始,但无提交。然后tuxedo服务被重新启动或停掉。
数据库层面由于服务重新启动,会话表中未找到数据,所以第一个sql看不到事务。
第二个sql锁对象会在(sestm,tpbegin设置 最小的)超时后释放。
在这个超时前所有对应数据操作会阻塞(distributed_lock_timeout 秒后超时 60 )报ORA-02049错。
-------------------------------------------------------------
tmadmin查看事务情况。
可以人工干预,在自动回滚前搞定问题。
pt 查看
abort 回滚
commit 提交
注意在没把握情况下,别手动乱搞。有时候越搞越乱哦。
------------------------------------------------------------
无tpbegin事务 调服务后,停服务会默认提交。
不停服务,事务会一直存在,不会因为超时被清除。
未找到事务回滚方法。待研究。