服务器 频道

Oracle 9i的UNDO_Management回滚段自动管理

  【IT168 服务器学院】今天一早上班后,做例行的各项检查工作,发现新安装的一台数据库服务器(Oracle 9i/Windows2003 Server)的备份日志中有以下错误信息:

  EXP-00068: tablespace ROLLBACK_DATA is offline

  登录到数据库,发现该表空间的数据文件信息已经不正常了,显示"D:\Oracle\MISSING04",且显示该文件大小为0.显然,系统已经找不到数据文件,或是无法正常读写操作该文件了. 查看实际存放数据文件的目录,有一个RBS1SID.ora文件,实际大小为10M.

  手动Drop该Tablespace,关闭数据库(没人在用),再重新启动,重新创建ROLLBACK_DATA表空间,重新指定数据文件. 再次关闭数据库,重新启动. 检查表空间状态,一切正常.

  但是, 我又想到,既然回滚段表空间不正常了,为什么Oracle数据库还能正常使用呢???再看了一下,发现其实除了建库时必须用的的System回滚段(这个还是system专用的,并不是Public公用的回滚段)之外,根本没有其它回滚段.

  我一时有些迷惑,好像明明选择建立回滚段的,怎么就没有呢? 心里想,反正新的回滚段表空间也建好了,再重建呗!

  这里问题又来了,建立表空间时,出现如下错误提示:
  SQL> create public rollback segment rbs01 tablespace rollback_data storage(initi
  al 2m next 1m);
  create public rollback segment rbs01 tablespace rollback_data storage(initial 2m
   next 1m)
  *
  ERROR at line 1:
  ORA-30019: Illegal rollback Segment operation in Automatic Undo mode

  意思是在自动回滚模式下的非法回滚段操作.

  这下我彻底弄胡涂了, 到baidu上一搜索,发现原因了. 在Oracle9i版本中,有个数据库选项是"System Managed Undo and Rollback Segments",即由数据库自动管理回滚段以及Undo操作,在init.ora文件中指定一下内容即可:
  undo_management=AUTO      # 声明自动管理回滚段
  undo_retention=10800      # 见下面的说明  
  undo_tablespace=UNDOTBS1  # 指定使用的表空间

  其中undo_retention的含义如下(摘抄自eygle''s Oracle Blog http://www.eygle.com/archives/2005/03/oracle10gaeundo.html)
  在AUM模式下,我们知道UNDO_RETENTION参数用以控制事务提交以后undo信息保留的时间。该参数以秒为单位,9iR1初始值为900秒,在Oracle9iR2增加为10800秒。但是这是一个NO Guaranteed的限制。
  也就是说,如果有其他事务需要回滚空间,而空间出现不足时,这些信息仍然会被覆盖。

  这样终于弄明白些了,看了还要好好学习啊!!!

0
相关文章