首页 > Linux操作系统 > Linux操作系统 > oracle 回滚段的学习
回滚段是在磁盘上的一段空间,当一个事务开始的时候,会首先把变化前的数据和变化后的数据先写入日志缓冲区,然后把变化后的数据写入回滚段,最后才在数据缓冲区中修改数据(日志缓冲区内容在满足一定的条件后可能被写入磁盘,但在事务提交的时候日志必须写入磁盘,而数据缓冲区中数据依赖于检查点的发生和DBWR进程的活动).
关于回滚段存储的数据,假如是delete操作,则回滚段将会记录整个行的数据,假如是update,则回滚段只记录被修改了的字段的变化前的数据,也就是没有被修改的字段是不会被记录的,假如是insert,则回滚段只记录插入记录的rowid。这样假如事务提交,那回滚段中简单标记该事务已经提交;假如是回退,则如果操作是delete,则回退的时候把回滚段中数据重新写回数据块,操作如果是update,则把变化前数据修改回去,操作如果是insert,则根据记录的rowid把该记录删除。
假设查询开始的时候的SCN为T,则在查询所扫描的数据块中,如果数据的commit scn小于T,则查询接收该数据,如果commit SCN大于T或者还没有产生commit SCN
则查询会尝试去回滚段中查找数据。这是为了保证数据读取的时间点的一致性,所以叫一致性读。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23582874/viewspace-671230/ ,如需转载,请注明出处,否则将追究法律责任。