那么自治事务是否和推测的一样,是由另一个会话执行的操作呢,下面通过几个例子来验证这一点:
SQL> truncate TABLE T_AUTO_TRANS; |
表被截断。
SQL> create OR REPLACE PROCEDURE P_AUTO AS 2 PRAGMA AUTONOMOUS_TRANSACTION; 3 BEGIN 4 insert INTO T_AUTO_TRANS VALUES (2, ’TEST’); 5 DBMS_LOCK.SLEEP(10); 6 COMMIT; 7 END; 8 / |
过程已创建。
SQL> select SID FROM V$MYSTAT where ROWNUM = 1; SID ———- 143 |
在另外一个会话登陆,检查当前系统中会话数量:
SQL> CONN / AS SYSDBA已连接。 SQL> SET SQLP ’SQL2> ’ SQL2> select SID, USERNAME, STATUS FROM V$SESSION; SID USERNAME STATUS ———- —————————— ——– 137 ACTIVE 143 YANGTK INACTIVE 145 ACTIVE 147 ACTIVE 149 ACTIVE 154 SYS ACTIVE 156 ACTIVE 157 ACTIVE 160 ACTIVE 161 ACTIVE 162 ACTIVE 163 ACTIVE 164 ACTIVE 165 ACTIVE 166 ACTIVE 167 ACTIVE 168 ACTIVE 169 ACTIVE 170 ACTIVE |
已选择19行。
下面执行P_AUTO过程,这个过程会等待10秒的时间:
SQL> exec P_AUTO |
在第二个会话仍然执行上面的查询:
SQL2> select SID, USERNAME, STATUS FROM V$SESSION; SID USERNAME STATUS ———- —————————— ——– 143 YANGTK ACTIVE 145 ACTIVE 147 ACTIVE 149 ACTIVE 154 SYS ACTIVE 156 ACTIVE 157 ACTIVE 160 ACTIVE 161 ACTIVE 162 ACTIVE 163 ACTIVE 164 ACTIVE 165 ACTIVE 166 ACTIVE 167 ACTIVE 168 ACTIVE 169 ACTIVE 170 ACTIVE |
已选择18行。
查询完成后,会话1的过程才执行完成:
PL/SQL 过程已成功完成。
从这一点上看,没有看到自治事务产生额外的会话。下面再次执行P_AUTO过程,并在过程的执行过程中查询V$LOCK视图,检查产生锁的会话:
SQL2> select SID, TYPE, ID1, ID2, LMODE, REQUEST, CTIME 2 FROM V$LOCK; SID TY ID1 ID2 LMODE REQUEST CTIME ———- — ———- ———- ———- ———- ———- 165 XR 4 0 1 0 0 165 CF 0 0 2 0 10333 167 PW 1 0 3 0 10320 165 RS 25 1 2 0 10330 166 RT 1 0 6 0 10330 167 MR 1 0 4 0 10324 167 MR 2 0 4 0 10324 167 MR 3 0 4 0 10324 167 MR 5 0 4 0 10324 167 MR 6 0 4 0 10324 167 MR 7 0 4 0 10324 167 MR 8 0 4 0 10324 167 MR 201 0 4 0 10324 164 TS 3 1 3 0 10309 143 TM 57448 0 3 0 3 143 TX 196621 5748 6 0 3 |
已选择16行。
SQL2> COL OBJECT_NAME FORMAT A30 SQL2> select OWNER, OBJECT_NAME, OBJECT_TYPE 2 FROM DBA_OBJECTS 3 where OBJECT_ID = 57448; OWNER OBJECT_NAME OBJECT_TYPE —————————— —————————— ———– YANGTK T_AUTO_TRANS TABLE |
根据上面两个查询可以看到,自治事务仍然和主事务处于同一个事务之中,为了更好的说明问题,在执行P_AUTO过程先,对T_AUTO_TRANS插入一条数据:
SQL> insert INTO T_AUTO_TRANS VALUES (1, ’TEST’); |
已创建 1 行。
SQL> exec P_AUTO |
PL/SQL 过程已成功完成。
在P_AUTO的执行过程中,再次查询V$LOCK:
SQL2> select SID, TYPE, ID1, ID2, LMODE, REQUEST, CTIME 2 FROM V$LOCK; SID TY ID1 ID2 LMODE REQUEST CTIME ———- — ———- ———- ———- ———- ———- 165 XR 4 0 1 0 0 165 CF 0 0 2 0 10643 167 PW 1 0 3 0 10630 165 RS 25 1 2 0 10640 166 RT 1 0 6 0 10640 167 MR 1 0 4 0 10634 167 MR 2 0 4 0 10634 167 MR 3 0 4 0 10634 167 MR 5 0 4 0 10634 167 MR 6 0 4 0 10634 167 MR 7 0 4 0 10634 167 MR 8 0 4 0 10634 167 MR 201 0 4 0 10634 164 TS 3 1 3 0 10619 143 TM 57448 0 3 0 10 143 TM 57448 0 3 0 7 143 TX 262146 4528 6 0 10 143 TX 589858 5879 6 0 7 |
已选择18行。
这里可以清楚的看到,SID为143的会话同时对应两个事务。因此上文所说的自治事务更像是在单独的会话中执行只是一个比喻,实际上自治事务仍然和主事务处于同一个会话中。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号

TechTarget
官方微博

TechTarget中国
作者
相关推荐
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。
-
如何应对Oracle EBS实施中的六个挑战?
在18个月的时间里,Vitamix启动运行了Oracle电子商务套件(E-Business Suite,EBS),而且Vitamix还对诸如Oracle ATG Web Commerce等所有页面属性进行了重新整理,并实现了全球数据中心。
-
Oracle的云产品“砸了自己脚”?
Sparc和Solaris都是Oracle云计划的一部分,但是硬件和支持人员的减少意味着本地Solaris和Sparc将变得更加稀少。
-
2017年3月数据库流行度排行榜 Oracle卫冕之路困难重重
时隔一个月,数据库市场经过一轮“洗牌”,旧的市场格局是否会被打破,曾经占巨大市场份额的企业是否可能失去优势?