QUOTE:
最初由 糖醋兔子 发布
谢谢eygle的辛勤劳动,这个应该是正解了
这个帖子,以前我看过的。我认为append insert下只是undo要比insert下的少,但并不是完全没有undo 产生的。PHP code:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production
SQL> create table test as select * from all_objects where 1=2;
SQL> select usn,writes from v$rollstat;
USN WRITES
---------- ----------
0 6900
1 101874
2 23752
3 50500
4 51000
5 49180
6 35260
7 23692
8 23514
9 22698
10 34620
已选择11行。
SQL> insert /*+ append */into test select * from all_objects;
已创建28950行。
SQL> select XIDUSN from v$transaction;
XIDUSN
----------
5
SQL> commit;
提交完成。
SQL> select usn,writes from v$rollstat;
USN WRITES
---------- ----------
0 6900
1 104666
2 25790
3 53322
4 53038
5 77560
6 37590
7 26236
8 25446
9 25302
10 36552
SQL> select 77560-49180 from dual;
77560-49180
-----------
28380
SQL> insert into test select * from all_objects;
已创建28950行。
SQL> select XIDUSN from v$transaction;
XIDUSN
----------
8
SQL> commit;
提交完成。
SQL> select usn,writes from v$rollstat;
USN WRITES
---------- ----------
0 6900
1 109738
2 30594
3 58640
4 57998
5 82520
6 42998
7 31154
8 169818
9 30344
10 41848
已选择11行。
SQL> select 169818-25446 from dual;
169818-25446
------------
1443
即使是 nologging + direct ,redo 也不是完全不产生,logging + direct 下 undo 的减少,是大大地减少,减少的是什么? 减少的是 数据的undo ,我是特地说了 数据本身的undo ,就如同 redo的减少也一样,我一直都说是 数据本身的 redo ,这和数据库是否产生 redo 和 undo 是不同的概念,比如空间分配的 redo and undo ,这就不是数据本身的变化!
不管表是否处于nologging下,direct insert 都不会对数据产生 UNDO
---------- 这个说法,不会对数据产生undo 和不会产生undo 是两码事,就好比 nologging + direct 不会对数据产生 redo(但依然有其他的redo) 和不会产生 redo 是两码事!
这是我当时的测试数据对比
带索引表,表和索引均是logging状态,测试结果及过程如下
----------------------------常规插入-------direct插入
插入日志生成量----------------8350864--------2364484
插入回滚段生成量--------------2343894--------426838
回滚日志生成量----------------4018204--------76032
回滚本身不存在产生回滚-------------------------------------
请再仔细读一读,参考
http://www.itpub.net/showthread.php?threadid=217094