oracle自治事務引起的死鎖

eymit發表於2012-12-24

 

1.關於自治事務引起的死鎖oracle解釋

 



Note:65961.

 

Because the parent and child transactions are independent, they also are not able to share any locks; if a parent transaction has a resource locked that a child attempts to obtain, then a deadlock situation occurs.  In this case, the offending statement 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, image: 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.解決方案

自治事務和主事務是兩個獨立的事力,根據上面資訊找到相關的自治事務提前進行提交

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21605631/viewspace-751577/,如需轉載,請註明出處,否則將追究法律責任。

相關文章