ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle自治事务引起的死锁

oracle自治事务引起的死锁

原创 Linux操作系统 作者:eymit 时间:2012-12-24 19:00:39 0 删除 编辑

 

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博客 ” ,链接:https://blog.itpub.net/21605631/viewspace-751577/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-05-09

  • 博文量
    65
  • 访问量
    370806