Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1143315
  • 博文数量: 231
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 16:35
个人简介

学无止境

文章分类

全部博文(231)

文章存档

2014年(7)

2013年(103)

2011年(11)

2010年(53)

2009年(57)

分类: Oracle

2013-09-18 11:07:54

与UNDO相关的参数主要有3个:
undo_management   AUTO为自动管理,MANUAL为手动管理,推荐设置为AUTO
undo_retention    该动态参数指定了保存UNDO的时间,该值是一个意向值,并不是一定能保存这么长时间
undo_tablespace   指定使用的UNDO表空间
 
undo_retention参数用来指定undo 记录保存的最长时间,以秒为单位,是个动态参数,完全可以在实例运行时随时修改通常默认是900 秒,也就是15 分钟。
一定要注意,undo_retention 只是指定undo 数据的过期时间,并不是说,UNDO中的数据一定会在undo表空间中保存15 分钟,比如说刚一个新事务开始的时候,如果undo 表空间已经被写满,则新事务的数据会自动覆盖已提交事务的数据,而不管这些数据是否已过期,因此当创建一个自动管理的undo 表空间时,还要注意其空间大小,要尽可能保证undo表空间有足够的存储空间。
 
估算当前数据库所需的UNDO表空间大小:

select (UR*(UPS*DBS))+(DBS*24) as "Bytes"
from (select value as UR
from v$parameter
where name='undo_retention'),
(select (sum(undoblks)/sum(((end_time-begin_time)*86400))) as UPS
from v$undostat),
(select value as DBS
from v$parameter
where name='db_block_size');
 
 
同时还要注意,也并不是说,undo_retention中指定的时间一过,已经提交事务中的数据就立刻无法访问,它只是到期,只要不被别的事务覆盖,它会仍然存在,并可随时被flashback特性引用。如果undo表空间足够大,而数据库又不是那么繁忙,那么其实undo_retention 参数的值并不会影响到你,哪怕你设置成1,只要没有事务去覆盖undo数据,它就会持续有效,从10g版本开始,ORACLE数据库会尽可能地保存UNDO信息。因此最主要关心的是UNDO表空间的大小,保证其有足够的存储空间。
 

只有在一种情况下,UNDO表空间能够确保undo中的数据在undo_retention指定时间过期前一定有效,就是为undo表空间指定Retention Guarantee,指定之后,ORACLE对于UNDO表空间中未过期的undo数据不会覆盖,但这样存在的隐患是,在事务繁忙的系统,且又undo_retention设置得较大的情况下,需要一个极大的的UNDO表空间。
例如:
 
SQL> select tablespace_name,status,contents,retention from dba_tablespaces where tablespace_name='UNDOTBS1';
 
TABLESPACE_NAME                STATUS    CONTENTS  RETENTION
------------------------------ --------- --------- -----------
UNDOTBS1                       ONLINE    UNDO      NOGUARANTEE
 
SQL> Alter tablespace undotbs1 retention guarantee;
 
表空间已更改。
 
SQL> select tablespace_name,status,contents,retention from dba_tablespaces where tablespace_name='UNDOTBS1';
 
TABLESPACE_NAME                STATUS    CONTENTS  RETENTION
------------------------------ --------- --------- -----------
UNDOTBS1                       ONLINE    UNDO      GUARANTEE
 

禁止undo 表空间retention guarantee:

SQL> Alter tablespace undotbs1 retention noguarantee;
 
表空间已更改。

阅读(708) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~