假设我现在做一个UPDATE TABLE SET COL1=1000;
这个操作有一百万行,操作的时间比较长.然后成功了.
这个时间,数据应该有两份.一份是在回滚段上的老数据,一份是在原数据文件里的新数据.如果这个时间COMMIT的话,没有问题.数据文件不变,而UNDO上的数据就可以被覆盖了.
但如果这个时间ROLLBACK呢,应该是UNDO上的数据写回数据文件里.ROLLBACK的操作一般都是一刹那的.我的理解是ORACLE会先ROLLBACK,然后会在数据文件中的新数据文件中打个标记,也就是说它已经被取消.这个时间,原数据会从UNDO上慢慢的写回.这个时间如果再有对原数据进行更改,会从UNDO中取数据再UNDO.
但是,我的疑问是从UNDO中写回数据是在怎么的情况下完成的.多久,ORACLE是怎么控制的.还有写回的数据文件是放在原数据文件的位置吗,而且,假设是INSERT的话,我插入一百万条记录,又ROLLBACK的话,HVM是怎么样的,回到原来的位置,还是停在ROLLBACK前的位置.
谢谢.
|