那么自治事务是否和推测的一样,是由另一个会话执行的操作呢,下面通过几个例子来验证这一点:
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中国
作者
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。