Redo和Undo的区别

7 篇文章 0 订阅

Redo在Oracle数据库中,有一种日志文件叫做重做日志文件redo log,分为两种:在线重做日志与归档日志。

        在线重做日志(online redo log)主要用于:Oracle数据库所在服务器突然断电、重启或执行shutdown等命令时重新启动后,Oracle数据库没有办法正常的启动实例。此时,Oracle会使用在线重做日志,把数据库恢复到服务器断电前的建阳时刻,使得数据库能正常的启动起来。(默认情况下,数据库至少会有两个重做日志组,循环使用

        归档日志(archive log)主要用于硬件级别的错误:磁盘的坏道导致无法读写、写入的失败、磁盘受损导致数据库数据丢失。此时数据库通过归档日志文件,把数据库恢复到归档日志所在的时间点上然后再通过在线重做日志文件把数据库恢复到当前的时间点上。

        对于归档日志文件,可以理解为在线重做日志文件的备份。即当一个重做日志文件被填满了之后,归档日志文件就会把其备份保留一份。(因为上面说了,在线重做日志文件会自动的覆盖)所以,归档日志文件就是旧的在线日志文件的备份。

Undo 撤销数据是反转DML语句结果所需要的信息,被称为“回滚数据”。

        undo数据:如果数据库已被转换使用撤销段,并且自动进行撤销管理,那么任何现有的回滚段都必须处于脱机模式中,而且不能被设置为联机。根据 UNDO_MANAGEMENT参数的不同设置,Oracle数据库要么使用撤销段,要么使用回滚段。

        undo表空间:一个数据库可以存在多个撤销表空间,但是在任意给定时刻都只能使用一个撤销表空间。撤销表空间必须被创建为持久的、本地管理的并且能够自动扩展分配空间的表空间。

DML语句(insert插入、update更新、delete删除),操作产生redo和undo的最多及最少?

        答:undo:回滚记录了反向操作的动作,用于后续执行后覆水可收的。所以delete产生的最多,删除的反向操作是插入,等于是整行记录完整地插入回去,那就是要把表的所有字段信息都记录下来。insert最少,反向操作是删除,这个只要标记定位到原先的位置就可以(因insert的undo信息是记录了插入记录的rowid,唯一标记,根据这个rowid就足以定位到插入的记录并删除,从而达到回退目的);而update居中,只需要记录更新前字段的值并保存起来就可以。

        redo重做日志,delete只需要记录相关rowid就可以再删除一遍了,产生redo最少,而insert如果想再完成一遍,至少需要知道所有字段的取值,产生的redo肯定最多,update的情况不变,都是居中。

undo会产生对应的redo?

        答:会,undo的信息是准备用户回退的前镜像信息,是用于大家后悔自己操作后的还原动作,这些数据也是需要保护的,如果丢失了我们就别想还原了,而redo是非常好的恢复宝物。

        DML语句的一个特点:DML语句不同于查询语句,会改变数据库的数据。除此之外,还会产生用于将来恢复的redo和用于回退的undo。另外还有一个细节就是,由于undo也需要保护,所以还会专门产生保护undo操作的redo。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值