UNDO简介

UNDO数据也称为回滚(ROLLBACK)数据,它用于确保数据的一致性。   Oracle9i以前,管理UNDO数据需要建立专门的回滚段,从 Oracle9i之后,为了简化UNDO的管理,通过使用UNDO表空间可以自动管理UNDO数据。顾名思义,UNDO表空间是指专门存放UNDO 数据的表空间,当使用UNDO表空间时候,Oracle会自动在该表空间上建立回滚段,以供事务操作使用。   要点:UNDO表空间是Oracle9i的新特性            UNDO表空间只能用于存放回滚段,而不能存放其它段      UNDO表空间和回滚段管理不能同时使用      UNDO作用   1。读一致性     读一致性是由Oracle自动提供的,并且该特征是通过UNDO记录来实现的。   2。取消事务     (1)首先将UNDO数据放到回滚段中     (2)将新数据放到数据段中     (3)当执行ROLLBACK命令时将UNDO数据写入到数据段中   3。事务恢复     事务恢复是由Oracle Server自动完成的。   指定 UNDO 管理模式   从Oracle9i开始,管理UNDO数据有两种方法,一种是自动管理模式,即使用UNDO表空间管理UNDO数据;另外一种是手工管理模式,即使用回滚段管理UNDO数据。   1。使用自动管理模式     通过设置初始化参数UNDO_MANAGEMENT设置为AUTO。     相关参数设置: UNDO_MANAGEMENT:该参数用于指定UNDO数据管理模式,AUTO表示采用自动管            理模式,MANUAL 表示手工管理模式。             UNDO_TABLESPACE:该参数用于指定在自动管理模式下要使用的UNDO表空间名,该            参数可以动态修改。             UNDO_RETENTION:该参数用于指定保留UNDO数据的时间,默认值是900s. UNDO_SUPPRESS_ERRORS:该参数用于指定是否显示手工UNDO管理操作的错误信息,TRUE表示禁止显示错误信息;FALSE表示允许显示错误信息。   2。使用手工管理模式     通过设置初始化参数UNDO_MANAGEMENT设置为 MANUAL.此时需要规划回滚段个数和尺寸。   管理UNDO表空间   通过使用UNDO表空间来管理UNDO数据,可以简化回滚段的管理复杂性。   1。建立UNDO表空间     建立UNDO表空间的两种方法,一种是通过在执行CREATE DATABASE命令建立数据库时建立UNDO表空间一种是使用CREATE UNDO TABLESPACE来建立UNDO表空间     注意:在UNDO表空间上不能建立任何数据对象(表,索引)   (1).使用CREATE DATABASE命令建立UNDO表空间       create database nanjing controlfile reuse ...... ....... UNDO TABLESPACE undotbs_01 DATAFILE '/opt/OraclHome/Ora9i/dbs/undo01.dbf' 注意:UNDO TABLESPACE不是必须的选项,当你数据库采用自动管理模式管理时候,并且没有指         定该选项,那么在建立数据库时候会自动生成名称为SYS_UNDOTBS 的UNDO表空间。   (2). 使用CREATE UNDO TABLESPACE命令建立UNDO表空间     CREATE UNDO TABLESPACE undotbs02 DATAFILE '/opt/OracleHome/Ora9i/dbs/undo_02.dbf' SIZE 2M; 注意:不能指定DEFAULT STORAGE子句学习吧   切换UNDO表空间   一个Oracle数据库可以包含多个UNDO表空间,但同一时刻一个实例只能使用一个UNDO表空间,初始化参数 UNDO_TABLESPACE用于指定实例所要使用的UNDO表空间。   用下面的命令动态切换UNDO表空间   ALTER SYSTEM SET undo_tablespace = undotbs02 注意:当出现以下情况是 会报错信息         表空间不存在         表空间不是UNDO表空间         UNDO 表空间正在由另一个实例使用   将自动管理模式转变为手工管理模式,可以执行下面的命令:     ALTER SYSTEM SET undo_tablespace=''; 监视UNDO空间信息   通过查询动态性能视图v$UNDOSTAT 和v$TABLESPACE取得这些信息 回滚段存储的是dml操作的前映象; oracle执行dml操作的步骤是这样的: 1,从磁盘文件中将数据读入数据缓冲区; 2,当一个update或者delete执行的时候,将缓冲区中的数据块先写到回滚段中 3,然后将缓冲区中的数据块对应记录修改过来(此时数据变成dirty block) 4,如果这时执行rollback,系统后台进程将会使用回滚段中的数据块替换缓冲区中的数据块; 5,如果执行的是commit,则oracle会释放对回滚段的占用。 回滚段的管理方式是循环覆盖的。 一个表空间中可以有多个回滚段,一个回滚段中允许有多个区。 一个回滚段对应多个事务,每个事务只能使用一个回滚段。 假设回滚段1有四个区; dml事务a占用了第一个区而一直没有commit; 事务b占用第四个区,如果b中数据较多,而回滚段又不允许扩展,则事务b需要一直等待a释放第一个区才可以。 在这里,如果一个update或者delete语句一直没有执行commit; 那么事务将会保持对回滚段的持续占用,这时新的update操作执行前,必须等待前面的dml操作释放需要的回滚空间(当然,如果回滚段允许扩展将不存在这个问题)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值