撤销与重做的区别

撤销:撤销,也就是取消之前的操作。

,重做,重做,重新执行一遍之前的操作。

什么是重做

重做记录事务日志,分为在线和存档,以恢复为目的。

比如,机器停电,那么在重起之后需要联机重做日志去恢复系统到失败点。

比如,磁盘坏了,需要用归档重做日志和联机重做日志去恢复数据。

比如,截断一个表或其他的操作,想恢复到之前的状态,同样也需要。

什么是撤销

重做是为了重新实现你的操作,而撤销相反,是为了撤销你做的操作,比如你得一个事务执行失败了或你自己后悔了,


则需要用滚命令回退到操作之前,回滚是在逻辑层面实现而不是物理层面,因为在一个多用户系统中,数据结构,块等都


在时时变化,比如我们插入一个数据,表的空间不够,扩展了一个新的程度上,我们的数据保存在这新里的程度,其它用户随后


也在这范围里插入了数据,而此时我想回滚,那么显然物理上讲这程度上撤销是不可能的,因为这么做会影响其他用户的操作


。所以,回滚是逻辑上回滚,比如对插入来说,那就么回滚是删除了。




一.undo中数据的特点:

1。是数据修改前的备份,主要是保证用户的读一致性

2。在事务修改数据时产生

3。至少保存到事务结束


二.undo数据的作用:

1。回滚(rollback)操作

2。实现读一致性与闪回查询

3。从失败的事务中还原数据

4。非正常停机后的实例恢复


三.undo回滚段的特点:

1。回滚段是由实例自动创建用于支持事务运行的专用段,同样是区和块组成,回滚顶会按实际需要自动进行增长或收缩,是一段可以


给指定事务循环使用的存储缓冲区。

2。每个事务只会使用一个回滚段,一个回滚段在同一时刻可能会服务于多个事务

3。当一个事务开始的时候,会指定一个回滚段,在事务进行的过程中,当数据被修改时,原始的数据会被复制到回滚段。

4。在回滚段中,事务会不断填充盘区,直到事务结束或所有的空间被用完,如果当前的盘区不够用,事务会在段中请求扩展下一个盘


区,如果所有已分配的盘区都被用完,事务会覆盖最初的盘区或者在回滚段允许的情况下扩展新的盘区来使用。

5。回滚段存在于撤销表空间中,在数据库中可以存在多个撤消表空间,但同一时刻只能使用一个撤销表空间。



四。回滚段中的数据类型:

回滚段中的数据主要分为以下三种:

1。未提交撤销信息;未提交的回滚数据,该数据所关联的事务并未提交,用于实现读一致性,所以该数据不能被其它


事务的数据所覆盖

2。承诺撤销信息;已经提交但未过期的回滚数据,该数据关联的事务已经提交,但是仍受到撤销保留参数保持时


间的影响

3。过期的撤消信息;事务已经提交,而且数据保存时间已经超过撤销保留参数指定的时间,属于已经过期的数据

当回滚段满了后,会优先覆盖过期撤销信息,当过期数据空间用完后,会再覆盖承诺撤销信息的区域,


这时撤销保留参数所规定的保持时间会被破坏,未提交撤销信息的数据是不允许覆盖的,如果要求提交的数据


在撤销保留参数规定的时间内不会被覆盖,可以在撤销表空间上指定保留保证语法如下:

改变表空间UNDOTBS1保留保证;



五.undo数据与重做数据的区别:



重做——比;撤销,在外部

插入一条记录时,表跟撤销的信息都会放进重做中,在提交或之前,重做的信息会放进硬盘上。故障时,重做便可恢复那些


已经提交了的数据。


重做→每次操作都先记录到重做日志中,当出现实例故障(像断电),导致数据未能更新到数据文件,则数据库重启时须重做,重新


把数据更新到数据文件

撤销→记录更改前的一份拷贝,但你系统回滚时,把这份副本重新覆盖到原来的数据


重做→记录所有操作,用于恢复(重做记录所有的数据库事务用于恢复)

撤销→记录所有的前印象,用于回滚(撤销用于存储uncommited数据有限公司用于回滚)


重做→已递交的事务,实例恢复时要写到数据文件去的

撤销与重做的区别