1) delete与truncate
a) delete一行一行删除,并且记录日志,truncate释放用于存储表数据的数据页(extent)来删除数据,在日志中只记录页的释放,故无法rollback,也无法flashback,从物理结构上来说,truncate之后,表所在的段头信息(segment header)被摧毁,导致段-区-数据块之间的路径被截断,无法查询到数据块上的数据,感觉就跟删除了一样。
b) delete时锁定行来删除,truncate时锁定表来删除。
c) delete删除数据后,表的高水平线不变,而truncate之后,表的高水平线重置为0,因此delete之后表所占空间不释放,而truncate之后表所占表空间释放。
d) truncate恢复
反向构造段头块→修改数据字典→修改段头块上的高水平线值。
http://www.aiweibang.com/yuedu/70298231.html
2) rowid与rownum
a) rowid是物理存在,表示记录在表空间中的唯一位置ID。
b) rownum是在已查询出的结果集上加的一个伪列(强调:先要有结果集),简单的说,rownum是符合条件的结果的序列号。它总是从1开始排起的,所以你选出的结果不可能没有1,而有比1大的值,任何时候想把rownum=1这条记录抛弃是不对的,它在结果集中是不可或缺的。例如 rownum &