又隔了相当长的一段时间才写总结
第七章的Redo,是用于解决数据库故障的
而本章的内容,是用于支持数据库读一致和可撤销操作的
可以将未修改后提交的数据恢复到修改前
在某个事务为完成提交之前
用户可以撤销此次此事务内的修改
而事务进行中出现问题的话,Oracle也会自动回滚,恢复原样
为了实现这种功能,类似Redo,Oracle用Undo来记录相关信息
insert、update、delete的相关信息记录在Undo表空间的回滚段内
记录的信息量,insert最少(只需添加记录的rowid)
update其次(记录所修改的旧值),delete最多(记录所删除记录的整行数据)
如一事务的修改还未提交,另一事务所查询的数值会有Undo信息提供
个人以前曾总结过UNDO_RETENTION(尽量达到的保存时长)参数
和Undo表空间的GUARANTEE(是否对保存时长强制保证)选项
V$ROLLSTAT和V$ROLLNAME可以用来查询数据库当前回滚段的相关信息
当事务提交后,Oracle一般会清除事务的相关数据,此操作成为块清除
块清除分为快速块清除(如数据块未写回数据文件,事务提交后便立即清除ITL、锁等相关信息)
延时块清除(数据块已写回,清除作业会在下次访问数据块的时候进行)
以前还了解过另一个和Undo有关的数据库恢复特性,闪回
此特性是从9i开始提供的
如果相关的Undo信息还没有被后来的事务所覆盖
用户便可以通过闪回查询对数据库进行极为简便的恢复操作
另外,Oracle11g中
可以优化Undo表空间备份(跳过已提交事务的Undo信息备份),还可以对Undo进行归档保存
Undo回滚段的使用,可能会引发ORA-01555错误(回滚段被重用,相关Undo信息被覆盖)
适当设置UNDO_RETENTION值,GUARANTEE功能,以及Undo表空间,可以有效减少问题的发生率
本章还有很多篇幅是作者用转储方式探索回滚段相关原理的
看了一遍……只看明白一部分而已……以后有待再次深入
距离第一阶段完结的日子不远了 ^_^
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/556359/viewspace-589339/,如需转载,请注明出处,否则将追究法律责任。