70 Redo和Undo
Redo和Undo从字面上就能够明白其中的意思。不过在开始读的时候。我对于这些概念还是有些混淆。其实Redo和Undo的都是起到日志的功能。但是,却是日志的两个方面。至少我现在觉得Redo适用于事务的恢复。而Undo适用于事务的回滚。是日志的两个完全的不同的方面。而在Oracle中。则是完全的分清楚了这两个方面。这也许就是Oracle比其他数据库更加细心的地方。总是思考着怎样最贴近实际。
71 Redo和Undo的协作。
基本上来说两者都是起到保护数据完整性的作用。从书P285开始,具体讲解了在系统崩溃的时候,Redo和Undo的关系。
我总结为以下几点
其一,Redo用来处理数据库的还原等信息。而Undo主要用于处理数据库的回滚等操作。
其二。Redo来“保护”Undo。这一点也是我搞不清楚的时候,最混淆的一点。因为Undo其实是数据库的运行信息的记录,也就是数据库运行的正常信息。而Redo只是一个“备份”的角色。备份数据库的运行信息。
其三。当数据库把内存中的信息刷新到磁盘上时,是先刷性Redo信息。而不是Undo
72.Commit和RollBack
在Oracle中。Commit是平滑的。因为对于Oracle来说。无论你的事务多么的冗长。在执行的过程中,都是不断刷新到磁盘上面的。换句话说,Commit在逻辑上是一个盖棺定论的事件。但是在物理操作上,只是把一个事务的扫尾工作做完。再做一个记号。
一个Commit的工作为生成一个SCN。把余下的内存的未修改的块写入磁盘。释放锁。然后就是清理一些内存。而Rollback则是完全的把前面的事务重新反过来做一遍。所以耗时比较长。
73 分析Redo
这一段看的不是很明白。因为整段整段的都是在讨论如何的Redo的日志的生成。比如说在触发器,在不同的版本下,生成了不同的Redo的值。还有就是日志的作用。在这一段中,我认识到了。其实数据库与一般的文件的系统不同的地方,还是在于保全的能力。其实SQL语句,并发访问,和完整性等这些特性,某种意义上来说都是逻辑上的保证和维护。只有备份,才是物理上的保护。
同时将了一些问题处理。估计比较偏向DBA。就是日志不够时候的解决思路。可以看看P312。
这里,简单的来说,就是减少提交过程。要做到按需提交。
74.块清除。
这个概念原因在于Oracle的锁机制。由于Oracle的锁是数据的一种属性。所以来说。如果一个有Update等的事务完成之后,在块上还会残留着一些痕迹。如果此时只是select语句。也会产生Redo操作。并且操作会比较慢。所以有时候需要手动来做。
75日志竞争
DBA的事情。所以就看了个大概。处理方法这里也写了。在P316页。