Oracle - 回滚表空间 Undo 的整理

一、Undo的概念
    Oracle 数据库创建并管理用于回滚或撤销数据库更改的信息。这些信息包括事务中所有操作的记录,主要是在它们被提交之前。这些记录统称为 Undo。

    Undo 表空间仅用于存放 Undo 数据,不能创建其他的数据库对象,Undo 表空间只保存系统的 Undo 数据。当执行 DML(INSERT、UPDATE、DELETE) 操作时,Oracle 会将这些操作的旧数据(事务所修改的数据的旧值)写入到 Undo 表空间中。在 Oracle9i 之前,管理 Undo 数据时使用回滚段(Rollback Segment)完成的;从 Oracle9i 开始,管理 Undo 数据不仅可以使用回滚段,还可以使用 Undo 表空间;Oracle11g 开始,因为规划和管理回滚段的复杂性而不推荐用回滚段,并且默认使用 Undo 表空间来管理 Undo 数据。


二、Undo的作用
    事务回退:当执行 DML 操作修改数据时,Undo 数据被存放到 Undo 段,而新数据则被存放到数据段中,如果事务操作存在问题,旧需要回退事务,以取消事务变化。

    读一致性:用户检索数据库数据时,Oracle 总是使用用户只能看到被提交过的数据(读取提交)或特定时间点的数据(SELECT语句时间点),这样可以确保数据的一致性。
    
    事务恢复:事务恢复是例程恢复的一部分,它是由Oracle服务器自动完成的。如果在数据库运行过程中出现例程失败(如断电、内存故障、后台进程故障等),那么当重启Oracle服务器时,后台进程 SMON 会自动执行例程恢复,执行例程恢复时,Oracl会重新做所有未应用的记录,回退未提交事务。

    倒叙查询:倒叙查询用于取得特定时间点的数据库数据,它是9i新增加的特性,假定当前时间为上午11:00,某用户在上午10:00执行了修改并提交了事务,为了取得10:00之前的数据,用户可以使用倒叙查询特征。

三、AUM的机制
    从 Oracle11g 开始,新建的数据库默认使用自动的机制来管理 Undo 的信息和空间,这个机制就是 AUM(Automatic Undo Management)。

    当使用 DBCA 创建数据库的时候,一个自动扩展的名为 UNDOTBS1 的 Undo 表空间将会自动创建。实例启动后,数据库会自动选用第一个可用的 Undo 表空间,如果没有可用的 Undo 表空间,实例将会把 Undo 记录保存在 system 表空间。如果数据库包含多个 Undo 表空间,那么可以选择在启动时通过 UNDO_TABLESPACE 参数来决定使用哪个表空间。如果在初始化参数里指定的 Undo 表空间不存在,那么实例就会启动失败,在 RAC 环境下,每个实例分别对应一个 Undo 表空间。

    数据库也可以运行在手动管理 Undo 模式,在这种模式下,Undo Space 的管理是通过 Rollback Segments,而不是使用 Undo TableSpace。但是手工管理 Rollback Segment 是很复杂的,Oracle 强烈推荐使用自动管理 Undo 模式。在Oracle11g 和之后的版本里,在初始化参数中如果没有指定 UNDO_MANAGEMENT 参数,那么默认使用 AUTO,之前的版本则默认使用手动。

    在自动管理的 Undo 表空间下,数据库创建时会自动初始化 10 个回滚段,从 V$ROLLNAME 中可以查询到这些自动创建的回滚段信息。此外,Oracle 会根据系统的负载情况自动创建以及释放回滚段。回滚段的大小和数量对于系统至关重要,所有 Online 的回滚段(除了 system 的回滚段)都会被循环使用。 而每个回滚段都包含有一些 Extent(扩展),当某个 Extent 写满后会自动切换到另一个 Extent 继续使用。
 
    回滚段保存的是修改的数据的前镜像数据,对于 DML(INSERT、UPDATE、DELETE) 语句来说,回滚段保存的就是 DML 反向操作的数据,如果是 INSERT 插入一行数据,回滚段保存的就是删除该行的记录,为了节约空间精简数据,回滚段中只保存 INSERT 数据的 Rowid,Undo 只需要删除该 Rowid 的记录即可;如果是 UPDATE 数据,回滚段只保存修改字段的旧值,Undo 只需要把旧值覆盖即可;如果是 DELETE 数据,回滚段则需要保存整行的数据,Undo 需要把整行的数据插入,即 DELETE 操作产生的 Undo(回滚段) 数据最多,大批量删除可以考虑 Truncate 或者分批删除。

    AUM的主要初始化参数
        UNDO_MANAGEMENT:如果是 AUTO 或者是 NULL,代表启用了自动 Undo 管理;如果是 MANUAL,代表采用手动管理 Undo;默认值为 AUTO
        UNDO_TABLESPACE:可选的值,只在自动 Undo 管理模式下有效,指定 Undo 表空间的名字

   
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值