以update为例,说明redo和undo的产生阶段:
update emp set ename='JOBS' where empno=7800;
当收到这条update指令请求时,oracle会先解析该update语句,并生成执行计划;执行前,会先在db buffer cache中寻找empno=7800的数据块,如果没有,则将emp表中相应数据从磁盘数据文件中读到db buffer cache,然后将empno=7800未被修改前的的数据块从db buffer cache读到undo segment,此时对undo segment的修改会产生一条redo(任何修改都会产生redo),然后将empno=7800记录的ename值改成'JOBS',此时对数据块的修改会产生另外一条redo。