`
wsql
  • 浏览: 11794680 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

undo系列学习之如何计算最优的undo_retention及undo_retention的初体验

 
阅读更多

undo_retention简单定义,就是最多数据的最少保留时间。AUM模式下,undo_retention参数用于事务commit后undo数据保留的时间。单位为秒。这是个no guarantee的限制。也就是,若空间足够,他只是个‘花瓶’;当可用空间不足而又有事务需要回滚空间,则这些数据依然会被覆盖。这个行为可能会导致ORA-01555错误,这些数据被记忆的时间可用v$undostat里面的字段TUNED_UNDORETENTION来查询。

很多时候,我们希望undo数据能够被留存,而不是被覆盖。那么在10g,oracle对undo增加了guarantee控制,也就是,用户可以指定undo表空间必须满足undo_retention的限制。

alter tablespace undotbs1 retention guarantee|noguarantee;


通过设置期望的保留时间,修改undo表空间属性,就可以使undo表空间运行在guarantee模式。下面我们用一个实验体验一下,noguarantee和guarantee有什么区别:

sys@ORCL> select tablespace_name,contents,retention from dba_tablespaces where tablespace_name like '%UNDOTBS%';

TABLESPACE_NAME                CONTENTS  RETENTION
------------------------------ --------- -----------
UNDOTBS1                       UNDO      NOGUARANTEE

sys@ORCL> alter system set undo_retention=800;

System altered.

sys@ORCL> alter tablespace undotbs1 retention guarantee;

Tablespace altered.

sys@ORCL> select tablespace_name,contents,retention from dba_tablespaces where tablespace_name like '%UNDOTBS%';

TABLESPACE_NAME                CONTENTS  RETENTION
------------------------------ --------- -----------
UNDOTBS1                       UNDO      GUARANTEE
将undo表空间自动扩展属性取消
sys@ORCL> select file_name,tablespace_name,bytes/1024/1024 m from dba_data_files where tablespace_name like '%UNDOTBS%';

FILE_NAME                                                                TABLESPACE_NAME                         M
------------------------------------------------------------------------ ------------------------------ ----------
/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_8050fkc6_.dbf       UNDOTBS1                               30

sys@ORCL> alter database datafile '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_8050fkc6_.dbf' autoextend off;

Database altered.
尝试循环小批量删除数据,在guarantee设置下,很快会出现ORA-30036错误:
hr@ORCL> select count(*) from t;

  COUNT(*)
----------
   1462140

hr@ORCL> begin
  2        for i in 1..1000
  3       loop
  4         delete from t where rownum<1001;
  5          commit;
  6       end loop;
  7      end;
  7  /
begin
*
ERROR at line 1:
ORA-30036: unable to extend segment by 8 in undo tablespace 'UNDOTBS1'
ORA-06512: at line 4
hr@ORCL> select count(*) from t;

  COUNT(*)
----------
   14620000
而在修改了undo表空间retention属性后,删除可以顺利完成
hr@ORCL> begin
  2        for i in 1..1000 
  3       loop
  4         delete from t where rownum<1001;
  5         commit;
  6       end loop;
  7      end;
  8  /

PL/SQL procedure successfully completed.


undo_retention的设置可尽责于闪回功能。对于列的类型为LOB的,自动undo数据的记忆是不支持LOBs,必须设置undo_retention的值来尽力挽留之。oracle在undo segment header上创建一个retention table用于记录相关undo存储的提交时间,从而实现其保留策略。

最优的undo_retention如何计算?

模糊计算可以借助:

如果你的事务隔离级别是 serializable或read only ,你可以让undo_retention稍微长于最长运行的事务;
如果你的事务隔离级别是read commited,你可以让undo_retention稍微长于最长运行的语句(DML)。

精确计算可以借助公式:

我们需要选一段比较有代表性的时间段来测试,或者去多段,然后加权平均

 SELECT d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]",
 SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]",
 ROUND((d.undo_size / (to_number(f.value) *
 g.undo_block_per_sec)))"OPTIMAL UNDO RETENTION [Sec]"
 FROM (
 SELECT SUM(a.bytes) undo_size
 FROM v$datafile a,
 v$tablespace b,
 dba_tablespaces c
 WHERE c.contents = 'UNDO'
 AND c.status = 'ONLINE'
 AND b.name = c.tablespace_name
 AND a.ts# = b.ts#
 ) d,
 v$parameter e,
 v$parameter f,
 (
 SELECT MAX(undoblks/((end_time-begin_time)*3600*24))undo_block_per_sec
 FROM v$undostat
 ) g
 WHERE e.name = 'undo_retention'
 AND f.name = 'db_block_size'
 
 ACTUAL UNDO SIZE [MByte] UNDO RETENTION [Sec]            OPTIMAL UNDO RETENTION [Sec]

                      30    900                                                   40421
分享到:
评论

相关推荐

    达梦修改UNDO_RETENTION.zip

    达梦修改UNDO_RETENTION.zip

    如何计算自动管理的UNDO表空间大小

     因此,以下公式可用于计算佳 undo 表空间大小:  从 Oracle 10g 开始,您可以选择使用 GUARANTEE 选项,以确保在定义的 undo_retention 时间之前,undo 信息不会被覆盖。  UNDO表空间大小由三部

    oracle误删数据表还原的二种方法(oracle还原)

    命令查看当时的数据库参数undo_retention设置。 显示如下: 代码如下:undo_management string AUTO undo_retention integer 10800 undo_suppress_errors boolean FALSE undo_tablespace string UNDOTBS1 undo...

    Oracle误删除表数据后的数据恢复详解

    使用show parameter undo命令查看当前的数据库参数undo_retention设置。 显示如下: SQL&gt; show parameter undo NAME TYPE VALUE ———————————— ———– —————————— undo_management 

    Oracle 9i中自动撤销管理的优点分析

    可以通过设置UNDO_RETENTION参数来实现这一过程。这一参数的缺省值为900秒(即15分钟),但你可以设置这一参数以保证 Oracle保留撤销日志。无需定义和管理回滚段,你就可以简单地指定一个撤销表空间而减轻Oracle9i的...

    oracle中关于flashback闪回的介绍

    必须设定undo保留时间足够大以能够重构需要闪回的数据 ALTER SYSTEM SET UNDO_RETENTION=; seconds值是undo数据保持的秒数。 Flashback view是由undo retention interval来限制的。

    深入解析OracleDBA入门进阶与诊断案例 3/4

     8.17 诊断案例之一:释放过度扩展的UNDO空间   8.18 特殊情况的恢复   8.19 诊断案例之二:回滚段损坏的恢复  第9章 等待事件   9.1 等待事件的源起   9.2 从等待发现瓶颈   9.3 Oracle 10g的...

    深入解析OracleDBA入门进阶与诊断案例 2/4

     8.17 诊断案例之一:释放过度扩展的UNDO空间   8.18 特殊情况的恢复   8.19 诊断案例之二:回滚段损坏的恢复  第9章 等待事件   9.1 等待事件的源起   9.2 从等待发现瓶颈   9.3 Oracle 10g的...

    深入解析OracleDBA入门进阶与诊断案例 4/4

     8.17 诊断案例之一:释放过度扩展的UNDO空间   8.18 特殊情况的恢复   8.19 诊断案例之二:回滚段损坏的恢复  第9章 等待事件   9.1 等待事件的源起   9.2 从等待发现瓶颈   9.3 Oracle 10g的...

    ORACLE数据库 安装配置规范 (V2.0.1)

    6.2.3.1 UNDO_RETENTION 41 6.2.3.2 SESSIONS 41 6.2.3.3 TRANSACTIONS 42 6.2.3.4 DB_KEEP_CACHE_SIZE 42 6.2.3.5 LOCK_SGA 43 6.2.3.6 DB_FILES 43 6.2.3.7 DB_FILE_MULTIBLOCK_READ_COUNT 43 6.2.3.8 LOG_BUFFER ...

    oracle表数据误删还原

    ORACLE 表删除 后还原的几种办法 通过oracle提供的回闪功能:oracle保存在回滚保持段里的数据时间有一定的时间限制由undo_retention 这个参数值。。等等。。

    [Oracle] 浅析令人抓狂的ORA-01555问题

    因此,在数据库的日常维护工作中,如果只是一次两次碰到ORA-01555错误,一般都先忽略...1) undo太小比较直观的解决方法是DBA告诉数据库应用最长的查询需要多长时间,并把UNDO_RETENTION设为这个值,同时相应增大undo表

    深入解析Oracle.DBA入门进阶与诊断案例

    针对数据库的启动和关闭、控制文件与数据库初始化、参数及参数文件、数据字典、内存管理、Buffer Cache与Shared Pool原理、重做、回滚与撤销、等待事件、性能诊断与SQL优化等几大Oracle热点主题,本书从基础知识入手...

    Oracle9i的init.ora参数中文说明

    该参数是构成某个例程的总 SGA 要求的若干参数之一。 默认值 : 派生: SESSIONS 参数的值 (如果正在使用共享服务器体系结构); 否则为 0。 Mts_multiple_listeners: 说明: 指定多个监听程序的地址是分别指定的, ...

    OCP认证考试2014年9月底-053

    Undo retention guarantee for the database must be configured D. ”EXECUTE “ permission on the DBMS_FLASHBACK package must be granted to the user Answer: ABD Explanation/Reference: Section: Flashback...

Global site tag (gtag.js) - Google Analytics