1.关于自治事务引起的死锁Oracle解释

Note:65961.

Oracle自治事务引起的死锁_oracle官网

Because the parent and child transactions are independent, they also are not ableto share any locks; if a parent transaction has a resource locked that a childattemptsto obtain, then a deadlock situation occurs. In this case, the offendingstatement is automatically rolled back with an "ORA-00060: deadlock detected while waiting for resource" exception raised within the child. Information on how to troubleshoot a deadlock can be found in:


2.模拟自治事务引起的死锁


SQL> create table eymit(id int);


Table created


 


SQL> insert into eymit select 1 from dual;


 


1 row inserted


 


SQL> commit;


 


Commit complete


 


SQL> delete from eymit;


 


1 row deleted


 


SQL>


SQL> declare


 2    pragma autonomous_transaction;


 3    begin


 4      delete from eymit;


 5      commit;


 6 end;


 7 /


 


 


declare


  pragma autonomous_transaction;


  begin


    delete from eymit;


    commit;


end;


 


ORA-00060:等待资源时检测到死锁


ORA-06512:在line 5


3.分析日志


查看Alert文件信息


Mon Dec 24 18:26:04 2012


ORA-00060: Deadlock detected. More info in file /opt/local/oracle/diag/rdbms/gs3421/gs3421/trace/gs3421_ora_19373.trc


根据alert找到具体的trace文件,注意和普通死锁不一样,下面Blocker(s)和Waiter(s)为同一个sid,同时trace中有正在执行的SQL和被锁的对象ID


[oracle@CN01L0301000025 trace]$ more gs3421_ora_19373.trc


Trace file /opt/local/oracle/diag/rdbms/gs3421/gs3421/trace/gs3421_ora_19373.trc


Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production


With the Partitioning, OLAP, Data Mining and Real Application Testing options


ORACLE_HOME = /opt/local/oracle/product/11.2.0/dbhome_1


System name:  Linux


Node name:    CN01L0301000025


Release:      2.6.18-164.el5


Version:      #1 SMP Thu Sep 3 03:28:30 EDT 2009


Machine:      x86_64


Instance name: gs3421


Redo thread mounted by this instance: 1


Oracle process number: 46


Unix process pid: 19373, p_w_picpath: oracle@CN01L0301000025


 


 


*** 2012-12-24 18:26:04.290


*** SESSION ID:(1152.197) 2012-12-24 18:26:04.290


*** CLIENT ID:() 2012-12-24 18:26:04.290


*** SERVICE NAME:(gs3421) 2012-12-24 18:26:04.290


*** MODULE NAME:(PL/SQL Developer) 2012-12-24 18:26:04.290


*** ACTION NAME:(Command Window - New) 2012-12-24 18:26:04.290


 


 


 


*** 2012-12-24 18:26:04.290


DEADLOCK DETECTED ( ORA-00060 )


 


[Transaction Deadlock]


 


The following deadlock is not an ORACLE error. It is a


deadlock due to user error in the design of an application


or from issuing incorrect ad-hoc SQL. The following


information may aid in determining the deadlock:


 


Deadlock graph:


                      ---------Blocker(s)-------- ---------Waiter(s)---------


Resource Name        process session holds waits process session holds waits


TX-0003001b-0001dd36      46  1152    X            46  1152          X


 


session 1152: DID 0001-002E-0000CA27  session 1152: DID 0001-002E-0000CA27


 


Rows waited on:


 Session 1152: obj - rowid = 000700C5 - AABwDFAAEAAAv5cAAA


 (dictionary objn - 458949, file - 4, block - 196188, slot - 0)


 


----- Information for the OTHER waiting sessions -----


----- End of information for the OTHER waiting sessions -----


 


Information for THIS session:


 


----- Current SQL Statement for this session (sql_id=g3mk1njgws241) -----


DELETE FROM EYMIT


----- PL/SQL Stack -----


----- PL/SQL Call Stack -----


 object    line object


 handle  number name


0x15960f918        5 anonymous block


===================================================


PROCESS STATE


4.解决方案


自治事务和主事务是两个独立的事力,根据上面信息找到相关的自治事务提前进行提交。