UNDO简介

默认分类 2009-02-06 14:49:39 阅读137 评论0   字号: 订阅

 

    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取得这些信息