撤销段的自动管理

  • 来源: 互联网 作者: rocket   2008-03-19/14:51
  • 在Oracle 9i里,一个很显著的新特性就是引入了自动的回滚段管理,当使用了AUM (Automatic Undo Management)时,为了区别,名称也由原来的ROLLBACK SEGMENT(回滚段)变成UNDO SEGMENT(撤销段),相对应的是UNDO TABLESPACE。当然我们也可以继续使用传统的MANUAL方式来管理撤销段。

    一、初始化参数

    使用下面的参数来设置有ORACLE自动管理撤销段:

    UNDO_MANAGEMENT = AUTO

    ORACLE会自动完成撤销段的创建、删除以及ONLINE/OFFLINE,而DBA将无法干预所有以上操作。

    如果想自己来管理回滚段可以将UNDO_MANAGEMENT设成MANUAL(DEFAULT就是MANUAL的)。虽然我们可以在UNDO表空间上创建回滚段,但ORACLE并不建议这样做。

    当使用了AUM,我们唯一需要做的就是至少创建一个UNDO表空间,我们可以创建多个UNDO表空间,然后使用下面的参数来指定具体使用哪个。

    UNDO_TABLESPACE =UNDORBS1

    SQL> l

    1* select name ,value from v$parameter where name like 'undo%'

    SQL> /



    undo_management MANUAL 

    undo_tablespace UNDOTBS1

    undo_suppress_errors FALSE

    undo_retention 10800

    创建多个UNDO表空间的好处是,我们可以根据不同的应用在不同大小的UNDO表空间之间进行切换。

    二、UNDO表空间的创建

    1、在建数据库是创建UNDO表空间,具体方法参见本人写的Oracle 9i安装、建库与升级。文章在www.ncn.cn上有下载。

    2、我们也可以通过下面的语句来创建:

    Create undo tablespace undotbs2 datafile ‘/dev/rundotbs2_1.dbf’ size 100m;

    三、UNDO表空间特性

    1、UNDO表空间默认就是LOCAL管理方式:

    SQL> l

    1 select TABLESPACE_NAME, CONTENTS,EXTENT_MANAGEMENT, ALLOCATION_TYPE,

    2 SEGMENT_SPACE_MANAGEMENT

    3* from dba_tablespaces where contents='UNDO'

    SQL> /



    TABLESPACE_NAME CONTENTS EXTENT_MANAGEMENT ALLOCATION_TYPE SEGMENT_SPAC

    -------------------- ------------------ -------------------- ------------------ ------------
     



    UNDOTBS1 UNDO LOCAL SYSTEM MANUAL

    UNDOTBS2 UNDO LOCAL SYSTEM MANUAL

    2、除撤销段外,我们不能在UNDO表空间上作其他操作:

    SQL> create table gototop_t1(c1 number) tablespace undotbs1;

    create table gototop_t1(c1 number) tablespace undotbs1

    *

    ERROR 位于第 1 行:

    ORA-30022: Cannot create segments in undo tablespace

    SQL> l

    1* create rollback segment ncn_rb1 tablespace undotbs1

    SQL> /

    create rollback segment ncn_rb1 tablespace undotbs1

    *

    ERROR 位于第 1 行:

    ORA-30019: Illegal rollback Segment operation in Automatic Undo mode

    3、一个实例职能使用一个UNDO表空间:

    除了在INIT.ORA中指定UNDO表空间外,我们还可以使用下面的语句来在线更改实例所用的UNDO表空间:

    SQL> alter system set undo_tablespace=undotbs2;

    系统已更改。

    四、撤销段的特性
    bbs.bitsCN.com
    1、撤销段自动创建:

    Ø n个撤销段(n基于SESSIONS参数,后面会详细讲)

    Ø 名字为_SYSSMUn$

    Ø OWNER为PUBLIC(在RAC配置中有用)

    Ø 选择AUM后,无法手动管理

    SQL> l

    1 select owner,segment_name,tablespace_name,status

    2* from dba_rollback_segs order by 4

    SQL> /


    OWNER SEGMENT_NAME TABLESPACE_NAME STATUS

    ---------- ------------------ -------------------- --------------------------------

    PUBLIC _SYSSMU1$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU2$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU3$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU5$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU7$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU9$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU10$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU8$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU6$ UNDOTBS1 OFFLINE

    PUBLIC RB1_CYX1 UNDOTBS1 OFFLINE

    PUBLIC RB1_CYX UNDOTBS1 OFFLINE

    SYS RB1_08 UNDOTBS1 OFFLINE

    SYS RB1_07 UNDOTBS1 OFFLINE

    SYS RB1_05 UNDOTBS1 OFFLINE

    SYS RB1_04 UNDOTBS1 OFFLINE

    SYS RB1_03 UNDOTBS1 OFFLINE

    SYS RB1_02 UNDOTBS1 OFFLINE

    SYS RB1_01 UNDOTBS1 OFFLINE

    SYS RB3_06 UNDOTBS3 OFFLINE

    SYS RB3_05 UNDOTBS3 OFFLINE

    SYS RB3_04 UNDOTBS3 OFFLINE

    SYS RB3_03 UNDOTBS3 OFFLINE

    SYS RB3_02 UNDOTBS3 OFFLINE

    SYS RB3_01 UNDOTBS3 OFFLINE

    SYS RB2 INDX OFFLINE

    PUBLIC _SYSSMU4$ UNDOTBS1 OFFLINE

    SYS SYSTEM SYSTEM ONLINE

    PUBLIC _SYSSMU11$ UNDOTBS2 ONLINE

    PUBLIC _SYSSMU12$ UNDOTBS2 ONLINE

    PUBLIC _SYSSMU13$ UNDOTBS2 ONLINE

    PUBLIC _SYSSMU14$ UNDOTBS2 ONLINE

    PUBLIC _SYSSMU15$ UNDOTBS2 ONLINE

    PUBLIC _SYSSMU16$ UNDOTBS2 ONLINE
     


    PUBLIC _SYSSMU17$ UNDOTBS2 ONLINE

    PUBLIC _SYSSMU18$ UNDOTBS2 ONLINE

    PUBLIC _SYSSMU19$ UNDOTBS2 ONLINE

    PUBLIC _SYSSMU20$ UNDOTBS2 ONLINE



    已选择37行。



    SQL>

    因为我在系统上作测试,之前手动建过回滚段,所以上面返回结果显一般多。

    2、只有活动的UNDO表空间上的撤销段和系统回滚段是ONLINE的,其他的撤销段都是OFFLINE的。

    这一点从上面的输出中可以清楚地看到。

    不过,也不一定一开始所有的撤销段都会ONLINE的,这要依赖于初始化参数SESSIONS的值,默认SESSIONS = 1.1 * PROCESSES + 5,他决定了系统的并发用户数。下面的实验可以让你对这一情况有个明确的认识。

    我们将SESSIONS调小后重起数据库,可以看到活动的UNDO表空间UNDOTBS1上共10个撤销段,但只ONLINE了5个。

    SQL> show parameter sessions



    NAME TYPE VALUE

    ------------------------------------ ---------------------- -----------

    java_max_sessionspace_size integer 0 

    java_soft_sessionspace_limit integer 0

    license_max_sessions integer 0

    license_sessions_warning integer 0

    logmnr_max_persistent_sessions integer 1

    mts_sessions integer 0

    sessions integer 27

    shared_server_sessions integer 0

    SQL> select owner,segment_name,tablespace_name,status

    2 from dba_rollback_segs;



    OWNER SEGMENT_NAME TABLESPACE_NAM STATUS

    ------------ -------------------- -------------- ----------

    SYS SYSTEM SYSTEM ONLINE

    PUBLIC _SYSSMU1$ UNDOTBS1 ONLINE

    PUBLIC _SYSSMU2$ UNDOTBS1 ONLINE

    PUBLIC _SYSSMU3$ UNDOTBS1 ONLINE

    PUBLIC _SYSSMU4$ UNDOTBS1 ONLINE

    PUBLIC _SYSSMU5$ UNDOTBS1 ONLINE

    PUBLIC _SYSSMU6$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU7$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU8$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU9$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU10$ UNDOTBS1 OFFLINE

    PUBLIC _SYSSMU11$ UNDOTBS2 OFFLINE

    PUBLIC _SYSSMU12$ UNDOTBS2 OFFLINE

    PUBLIC _SYSSMU13$ UNDOTBS2 OFFLINE

    PUBLIC _SYSSMU14$ UNDOTBS2 OFFLINE

    PUBLIC _SYSSMU15$ UNDOTBS2 OFFLINE

    PUBLIC _SYSSMU16$ UNDOTBS2 OFFLINE

    PUBLIC _SYSSMU17$ UNDOTBS2 OFFLINE

    PUBLIC _SYSSMU18$ UNDOTBS2 OFFLINE

    PUBLIC _SYSSMU19$ UNDOTBS2 OFFLINE

    PUBLIC _SYSSMU20$ UNDOTBS2 OFFLINE

    SYS RB1_01 UNDOTBS1 OFFLINE

    SYS RB1_02 UNDOTBS1 OFFLINE

    SYS RB1_0
     


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多