小议Oracle 11g的自治事务(三)
2008-08-09 12:42:42 来源:WEB开发网上一篇文章提到了,自治事务更像是在单独的会话中执行,它的事务状态不会影响当前的事务,它也不会看到当前事务没有提交的修改。
那么自治事务是否和推测的一样,是由另一个会话执行的操作呢,下面通过几个例子来验证这一点:
SQL>TRUNCATETABLET_AUTO_TRANS;
表被截断。
SQL>CREATEORREPLACEPROCEDUREP_AUTOAS
2PRAGMAAUTONOMOUS_TRANSACTION;
3BEGIN
4INSERTINTOT_AUTO_TRANSVALUES(2,'TEST');
5DBMS_LOCK.SLEEP(10);
6COMMIT;
7END;
8/
过程已创建。
SQL>SELECTSIDFROMV$MYSTATWHEREROWNUM=1;
SID
----------
143
在另外一个会话登陆,检查当前系统中会话数量:
SQL>CONN/ASSYSDBA已连接。
SQL>SETSQLP'SQL2>'
SQL2>SELECTSID,USERNAME,STATUSFROMV$SESSION;
SIDUSERNAMESTATUS
------------------------------------------------
137ACTIVE
143YANGTKINACTIVE
145ACTIVE
147ACTIVE
149ACTIVE
154SYSACTIVE
156ACTIVE
157ACTIVE
160ACTIVE
161ACTIVE
162ACTIVE
163ACTIVE
164ACTIVE
165ACTIVE
166ACTIVE
167ACTIVE
168ACTIVE
169ACTIVE
170ACTIVE
已选择19行。
下面执行P_AUTO过程,这个过程会等待10秒的时间:
SQL>EXECP_AUTO
赞助商链接