Oracle enq: DX - contention之解决过程

一、解决过程
2010年3月15日上午9点半左右,数据库出现大规模的分布式事务等待。
EVENT
----------------------------------------------------------------
enq: DX - contention
enq: DX - contention
enq: DX - contention
enq: DX – contention
进一步查询引起事务等待的阻塞进程
SQL>  select sid,type,id1,id2,block,REQUEST from  v$lock
  2  where type='DX' and block=1;

       SID TY        ID1        ID2      BLOCK    REQUEST
---------- -- ---------- ---------- ---------- ----------
      3141 DX         37          0          1          0

SQL> select serial#,sid from v$session where sid=3141;

   SERIAL#        SID
---------- ----------
     25334       3141
根据sid,Oracle杀进程
SQL>alter system kill session ‘3141,25334’;
ORA-00031: session marked for kill
根据pid,操作系统杀进程
SQL> select spid from v$process,v$session where v$process.addr=v$session.paddr
  2  and sid=3141;

SPID
------------
545572

oracle.orcl2@hisdb02:/home/oracle$kill -9 545572
数据库恢复正常

二、原因分析
此次数据库产生大规模分布式事务锁,是由医疗设备管理信息系统业务模块使用dblink同步数据库信息,导致查询DBA_PENDING_TRANSACTIONS挂起。目前已改用物化视图同步数据库信息,该业务模块引起的死锁已经解决。

你可能感兴趣的:(oracle,sql,医疗)