undo只是逻辑还原数据库而不是物理的还原:


测试:
1.新建一个空表

create table t1
(
sid int not null primary key,
sname varchar2(10)
)tablespace test;


create table t2
(
sid int not null primary key,
sname varchar2(10)
)tablespace test;

select * from t2;

2.做全表扫描并查看I/O数量

set autotrace traceonly statistics;

select * from t2;

统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          3  consistent gets
          0  physical reads
          0  redo size
        399  bytes sent via SQL*Net to client
        509  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         0  rows processed

set autotrace off;

--循环导入数据
declare
        maxrecords constant int:=20000;
        i int :=1;
    begin
        for i in 1..maxrecords loop
          insert into t1 values(i,'ocpyang');
        end loop;
    dbms_output.put_line(' 成功录入数据! ');
    commit;
    end;
/

insert into t2 select * from t1;

rollback;

 

set autotrace traceonly statistics;

select * from t2;


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         53  consistent gets
          0  physical reads
          0  redo size
        399  bytes sent via SQL*Net to client
        509  bytes received via SQL*Net from client
          1  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          0  rows processed


虽然数据rollback但是insert的操作还是导致表的高水位线,这些数据块并
没有因为rollback而回滚.

验证了数据库并没有物理完全恢复,仅仅是逻辑恢复!