英文解释:
名词:两种流程,redo重作流程,undo撤销还原流程;或则是redo日志与undo段的简称
动词:redo即重作,undo即撤销还原。
翻译有时候为了简单,常把动词和名称混用。不一样场景不一样的使用。
1.redo记录了什么:
redo即redo日志,记录数据库变化的日志(区别咱们常见的简单的文本日志,redo日志里面记录的都是数据啊,表数据啊等等压缩处理,但也很大)。
只要你修改了数据块那么就会记录redo信息,固然nologging除外了。
修改的数据块包括:表所在数据块(表数据块),索引所在数据块(索引数据块),以及undo段所在数据块(undo数据块)!!
2.undo记录了什么:
undo即undo段,是指数据库为了保持读一致性,存储历史数据在一个位置。
为何要保持读一致性?
好比有两个用户访问数据库,固然并发罗。A是更改,B是查询。
--A更改尚未提交,B查询的话,数据确定为历史数据,这个历史数据就是来源于UNDO段,
--A更改未提交,须要回滚rollback,回滚rollback的数据也来至于UNDO段。
结论:为了并发时读一致性成功,那么DML操做,确定先写UNDO段。
3.前滚与回滚:
--方向相对性:前滚,是指从“之前正常点”往前,一直到崩溃点
回滚,是指从“崩溃点”日后,一直到数据一致性
(由于前滚操做后,因为事务未提交的数据也写入了“表数据块”,因此要用Undo数据块进行覆盖
--详细解释:
前滚:
当实例崩溃时,可使用redo从之前正常的点前滚到崩溃点。(前滚从一致性检查点,“即当时检查过全部的SCN是所有一致的时间点”,一直往前滚到崩溃的时间点)。
当数据库回到一致性检查点时,至关于以后什么都没有发生过,数据全被清空了。(穿越了!O(∩_∩)O~)
数据库只好根据redo模拟人的操做,使用redo里的信息重作(use redo log to redo),构造undo块,表块,索引块等。
回滚:
构造的表数据块中,有已修改的脏数据但未提交,就须要利用前滚中构造的undo数据块里的信息来undo撤销还原,覆盖回滚rollback罗(保持一致性啊,每种块里的scn号都同样,那么数据库就能够打开了)。
4.undo与redo(流程)的联系:
由于,数据在没有commit前,是随时从内存中写入到表数据块的,属于脏数据。 数据库崩溃后即便使用redo流程进行redo操做,可是脏数据还在,脏数据怎么处理,就只能靠undo流程,使用undo数据块的旧数据覆盖了。
可是无论是脏的仍是旧的,都在redo日志中复制了一份。
注意:1.undo是一种“数据文件datafile”,具备表空间,固然具备块block;
2.redo是一种“文件file”,没有表空间。
3.数据库在DML事务时,先建立undo
4.读一致性与一致性(scn相同)的区别
5.undo与rollback的区别:在undo(撤销还原流程)中会使用rollback(回滚)这个动做数据库