[ 登录 ][ 注册 ] 天极传媒: 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

小议Oracle 11g的自治事务(六)

作者: 杨廷琨,  出处:blog, 责任编辑: 王晓晨, 
2008-08-10 08:00
  自治事务提供了很方便的事务控制功能,使得用户可以在不影响当前事务的情况下,提交或回滚对数据库的修改。那么Oracle为了实现这个功能是否付出了很多的代价呢,下面对比一下自治事务和普通事务的统计信息。

 小议Oracle 11g的自治事务(一小议Oracle 11g的自治事务(四) 

 小议Oracle 11g的自治事务(二)   小议Oracle 11g的自治事务(五)

小议Oracle 11g的自治事务(三)  小议Oracle 11g的自治事务(六)

      自治事务提供了很方便的事务控制功能,使得用户可以在不影响当前事务的情况下,提交或回滚对数据库的修改。那么Oracle为了实现这个功能是否付出了很多的代价呢,下面对比一下自治事务和普通事务的统计信息:

SQL> CREATE GLOBAL TEMPORARY TABLE T_SESSION_STAT
  2 (ID NUMBER, NAME VARCHAR2(100), VALUE NUMBER)
  3 ON COMMIT PRESERVE ROWS;

  表已创建。 

SQL> CREATE TABLE T_RECORD (ID NUMBER, NAME VARCHAR2(30));

  表已创建。  

SQL> CREATE OR REPLACE PROCEDURE P_TEST AS
  2 BEGIN
  3 INSERT INTO T_RECORD VALUES (1, 'TEST');
  4 COMMIT;
  5 END;
  6 /

  过程已创建。 

SQL> CREATE OR REPLACE PROCEDURE P_TEST_AUTO AS
  2 PRAGMA AUTONOMOUS_TRANSACTION;
  3 BEGIN
  4 INSERT INTO T_RECORD VALUES (2, 'TEST');
  5 COMMIT;
  6 END;
  7 /

  过程已创建。 

SQL> SET SERVEROUT OFF
  SQL> BEGIN
  2
  3 INSERT INTO T_SESSION_STAT SELECT 1, NAME, VALUE
  4 FROM V$SESSTAT A, V$STATNAME B
  5 WHERE A.STATISTIC# = B.STATISTIC#
  6 AND A.SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1);
  7
  8 P_TEST;
  9
  10 INSERT INTO T_SESSION_STAT SELECT 2, NAME, VALUE
  11 FROM V$SESSTAT A, V$STATNAME B
  12 WHERE A.STATISTIC# = B.STATISTIC#
  13 AND A.SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1);
  14
  15 P_TEST_AUTO;
  16
  17 INSERT INTO T_SESSION_STAT SELECT 3, NAME, VALUE
  18 FROM V$SESSTAT A, V$STATNAME B
  19 WHERE A.STATISTIC# = B.STATISTIC#
  20 AND A.SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1);
  21
  22 FOR C IN
  23 (
  24 SELECT *
  25 FROM
  26 (
  27 SELECT A.NAME, C.VALUE + A.VALUE - 2 * B.VALUE VALUE
  28 FROM
  29 T_SESSION_STAT A,
  30 T_SESSION_STAT B,
  31 T_SESSION_STAT C
  32 WHERE A.NAME = B.NAME
  33 AND A.NAME = C.NAME
  34 AND A.ID = 1
  35 AND B.ID = 2
  36 AND C.ID = 3
  37 )
  38 WHERE ABS(VALUE) > 0
  39 ) LOOP
  40 DBMS_OUTPUT.PUT_LINE(RPAD(C.NAME, 50, ' ') || C.VALUE);
  41 END LOOP;
  42
  43 END;
  44 /
  PL/SQL 过程已成功完成。
  SQL> TRUNCATE TABLE T_SESSION_STAT;

共4页。 1 2 3 4 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

邮件订阅