自治事务

转:http://yangtingkun.itpub.net

这两天看了11gCONCEPT文档的事务部分,发现自治事务还有一些以前没有注意到的地方,这里简单总结一下。

描述自治事务与会话的关系。

小议自治事务(一):http://yangtingkun.itpub.net/post/468/467765

小议自治事务(二):http://yangtingkun.itpub.net/post/468/467840

 

 

上一篇文章提到了,自治事务更像是在单独的会话中执行,它的事务状态不会影响当前的事务,它也不会看到当前事务没有提交的修改。

那么自治事务是否和推测的一样,是由另一个会话执行的操作呢,下面通过几个例子来验证这一点:

SQL> TRUNCATE TABLE T_AUTO_TRANS;

表被截断。

SQL> CREATE OR REPLACE PROCEDURE P_AUTO ASITPUB个人空间3xi e%b+N^ f
  2   PRAGMA AUTONOMOUS_TRANSACTION;ITPUB个人空间M%E S_1L;K
  3  BEGINITPUB个人空间tG6{g8`8?\
  4   INSERT INTO T_AUTO_TRANS VALUES (2, 'TEST');
LP9q/I,na,x,u11269677  5   DBMS_LOCK.SLEEP(10);ITPUB个人空间RO W%wG3V$R
  6   COMMIT;
an!OKF^0M*p"G11269677  7  END;ITPUB个人空间z4V*y Z0T9m
  8  /

过程已创建。

SQL> SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1;

       SID
Z,j,D"d2_-U:szs11269677----------ITPUB个人空间Yf U$t}B*a
       143

在另外一个会话登陆,检查当前系统中会话数量:

SQL> CONN / AS SYSDBAITPUB个人空间{U3K0E9JV+Rre
已连接。
#N|f q&to ]11269677SQL> SET SQLP 'SQL2> 'ITPUB个人空间2}z;M[ z#zh
SQL2> SELECT SID, USERNAME, STATUS FROM V$SESSION;

       SID USERNAME                       STATUS
3qy!?t}?7S x4`4[11269677---------- ------------------------------ --------
~$T-k#{:q!ERY11269677       137                                ACTIVE
N%|:P"]v5qV`^11269677       143 YANGTK                         INACTIVE
-f-P1q,tO8Vr4n3~)g11269677       145                                ACTIVEITPUB个人空间:Ii&`M X*E
       147                                ACTIVE
y?q[*g I0lt11269677       149                                ACTIVE
qIba(N11269677       154 SYS                            ACTIVE
c7xw9\jn C5ei11269677       156                                ACTIVE
l*]$kH5o G11269677       157                                ACTIVE
2zBqd[11269677       160                                ACTIVEITPUB个人空间DM g;Ud/V-MG
       161                                ACTIVEITPUB个人空间*} q3vn7W(k |P
       162                                ACTIVEITPUB个人空间{y @w.^D4Y*V+N
       163                                ACTIVE
WGr5b$tGY!N11269677       164                                ACTIVE
im R$@7_t} P3`11269677       165                                ACTIVEITPUB个人空间wr}O{;tM
       166                                ACTIVE
+B l Xp0]iDD11269677       167                                ACTIVE
W7x.Gi dc3f ^11269677       168                                ACTIVEITPUB个人空间/K0J$|4`*d`$g w
       169                                ACTIVE
#fh PVd.e'g11269677       170                                ACTIVE

已选择19行。

下面执行P_AUTO过程,这个过程会等待10秒的时间:

SQL> EXEC P_AUTO

 在第二个会话仍然执行上面的查询:

SQL2> SELECT SID, USERNAME, STATUS FROM V$SESSION;

       SID USERNAME                       STATUSITPUB个人空间,B#t O@L On
---------- ------------------------------ --------
EJ"t6dP11269677       143 YANGTK                         ACTIVE
f;qNeZ-\d11269677       145                                ACTIVE
qLelMn"\u11269677       147                                ACTIVE
@.~'T/q|Ca"pU3`11269677       149                                ACTIVE
%Bz1Ph\W11269677       154 SYS                            ACTIVEITPUB个人空间(e-^uX7u&pg]
       156                                ACTIVE
7S$TFZb"Z11269677       157                                ACTIVEITPUB个人空间3l h)`ga*Pla?s
       160                                ACTIVEITPUB个人空间Bp Bx']C7Z?M
       161                                ACTIVEITPUB个人空间b;Sq Uj%^^ j K;L
       162                                ACTIVEITPUB个人空间4c"q%xee T$qt
       163                                ACTIVEITPUB个人空间S+["zN0K
       164                                ACTIVEITPUB个人空间 WL:Z-h6DGS$q
       165                                ACTIVEITPUB个人空间 _;oo],?WT
       166                                ACTIVE
7o pCk4bp$d S m|11269677       167                                ACTIVE
1K j K}fr+r11269677       168                                ACTIVE
#{)v)v }wF11269677       169                                ACTIVEITPUB个人空间 `0gse.a eY2j
       170                                ACTIVE

已选择18行。

查询完成后,会话1的过程才执行完成:

ITPUB个人空间%a1_QjxM9mj
PL/SQL
过程已成功完成。

从这一点上看,没有看到自治事务产生额外的会话。下面再次执行P_AUTO过程,并在过程的执行过程中查询V$LOCK视图,检查产生锁的会话:

SQL2> SELECT SID, TYPE, ID1, ID2, LMODE, REQUEST, CTIMEITPUB个人空间-m4Rsq]
  2  FROM V$LOCK;

       SID TY        ID1        ID2      LMODE    REQUEST      CTIMEITPUB个人空间&h(S1{7P+vta Q
---------- -- ---------- ---------- ---------- ---------- ----------ITPUB个人空间+f|].p4ap*b7B&W3mK/S2E
       165 XR          4          0          1          0          0ITPUB个人空间$o$H/n@qi9| U B8[-Wt
       165 CF          0          0          2          0      10333ITPUB个人空间 I;JOM q
       167 PW          1          0          3          0      10320ITPUB个人空间n0H#~*?$@p
       165 RS         25          1          2          0      10330ITPUB个人空间lnZu3ie-ij
       166 RT          1          0          6          0      10330ITPUB个人空间9D){ d3~];Y1zj/F`
       167 MR          1          0          4          0      10324
b9nARc)tXv11269677       167 MR          2          0          4          0      10324ITPUB个人空间"UgcP*PWj
       167 MR          3          0          4          0      10324ITPUB个人空间 E\0yrQ;J"@%jN)[
       167 MR          5          0          4          0      10324ITPUB个人空间 w3[%z3f4P d}6M
       167 MR          6          0          4          0      10324
oC6z;L5c@/@-E%Vi)b c11269677       167 MR          7          0          4          0      10324
7T.Ye#B!o;U&T11269677       167 MR          8          0          4          0      10324
!Q pYx0XS'P%e11269677       167 MR        201          0          4          0      10324ITPUB个人空间&Q:n |7I2^#~)[/He
       164 TS          3          1          3          0      10309ITPUB个人空间#S3g;^_c s%d4z7Db
       143 TM      57448          0          3          0          3
+N*|p!N_ v11269677       143 TX     196621       5748          6          0          3

已选择16行。

SQL2>COLOBJECT_NAME FORMAT A30
` q#Pz6jb mG ^ Q c11269677SQL2> SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
F_@[e*b11269677  2  FROM DBA_OBJECTSITPUB个人空间6H2](A+Pp-F I
  3  WHERE OBJECT_ID = 57448;

OWNER                          OBJECT_NAME                    OBJECT_TYPEITPUB个人空间:AZD"c"JAH4ez9u
------------------------------ ------------------------------ -----------ITPUB个人空间%?CK6JX[ c
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
4x2b&d1Z-l.k+R0BI:}11269677  2  FROM V$LOCK;

       SID TY        ID1        ID2      LMODE    REQUEST      CTIMEITPUB个人空间;_2qpWb#Qt;Q T
---------- -- ---------- ---------- ---------- ---------- ----------ITPUB个人空间,n-m{t5F$a"Y
       165 XR          4          0          1          0          0
0q rY-Oi8OcV6H8x11269677       165 CF          0          0          2          0      10643
:D%F3LIp/E]11269677       167 PW          1          0          3          0      10630ITPUB个人空间Gw:iwJQ0[
       165 RS         25          1          2          0      10640
tL@*WFlp11269677       166 RT          1          0          6          0      10640
G!m:Wr.R ZB11269677       167 MR          1          0          4          0      10634
-ya$e4a }5B Le7?11269677       167 MR          2          0          4          0      10634
K-ebEod T_11269677       167 MR          3          0          4          0      10634
1b\@3T h-Z%H)qzZB11269677       167 MR          5          0          4          0      10634ITPUB个人空间+Y i%vL{'gO
       167 MR          6          0          4          0      10634ITPUB个人空间([m"]nQP ^ n
       167 MR          7          0          4          0      10634
!^y^(Tc3~j^} @Dwn11269677       167 MR          8          0          4          0      10634ITPUB个人空间7la2])fW
       167 MR        201          0          4          0      10634ITPUB个人空间+k"CZ:{f#r
       164 TS          3          1          3          0      10619
5IT,[%~1zf?hc11269677       143 TM      57448          0          3          0         10ITPUB个人空间Rbu6E-W"L
       143 TM      57448          0          3          0          7
E6|~7]Ni%JY11269677       143 TX     262146       4528          6          0         10
4]%AmOMV11269677       143 TX     589858       5879          6          0          7

已选择18行。

这里可以清楚的看到,SID143的会话同时对应两个事务。因此上文所说的自治事务更像是在单独的会话中执行只是一个比喻,实际上自治事务仍然和主事务处于同一个会话中

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11269677/viewspace-613434/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11269677/viewspace-613434/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值