热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

【翻译自mos文章】使用aum(AutomaticUndoManagement)时遇到ORA

使用aum(AutomaticUndoManagement)时遇到ORA-01555错误---原因和解决方案。参考原文:ORA-01555UsingAutomaticUndoManagement

使用aum( Automatic Undo Management) 时遇到 ORA-01555错误--- 原因和解决方案。 参考原文: ORA-01555 Using Automatic Undo Management - Causes and Solutions (Doc ID 269814.1) 适用于: Oracle Database - Enterprise Edition - Version 9.0.1.0 an


使用aum( Automatic Undo Management) 时遇到 ORA-01555错误--- 原因和解决方案。

参考原文:
ORA-01555 Using Automatic Undo Management - Causes and Solutions (Doc ID 269814.1)

适用于:
Oracle Database - Enterprise Edition - Version 9.0.1.0 and later
Information in this document applies to any platform.

目的:
本文讨论了当使用Automatic Undo Management 时(以下简称AUM)特性时,
一个查询返回ora-01555 "snapshot too old (rollback segment too small)" 错误的各种场景以及对该错误的各种解决方案

范围:
本文让用户体会下列错误:
ORA-1555: snapshot too old (rollback segment too small)

细节:
Checked for relevance on 26-Mar-2012

对于ora-01555错误,有很多原因。
当使用诸如 在oracle 8i或者更低版本中的 老rollback segments 管理方法时,其原因和解决方法在 Document 1005107.6 and Document 45895.1中。

这些原因和解决方法依然适用于oracle 9i及其更高版本,当解决ora-01555错误时,这些方法应该被考虑。
本文档的焦点在于oracle 9i或者更高版本情况下,当使用AUM特性时的ora-01555错误。


UNDO_RETENTION

若是UNDO_RETENTION参数设置的不合适,会导致ora-01555错误。Retention 是以秒为单位指定的。这个参数决定了undo retention的 低阈值(threshold )。
oracle 会尽力保留undo ,至少保留到该参数指定的时间。 The UNDO_RETENTION 参数只有在当前 undo表空间足够的情况下才会被使用(is only honoured )。
如果一个active的事务需要undo 空间,并且undo表空间没有空闲的空间,然后oracle启动 回收 unexpired undo space 的工作。这会导致一些查询失败,并报错ora-01555错误。

当需求产生时,一个新的extent 将会从undo tablespace中被分配,但是我们会尽量的将这种分配行为推迟。

在10.2.x及其更高版本中,使用extent的顺序如下:

1. 当undo 数据正在被写入到一个undo segment时,如果undo 数据已经到达当前extent的末尾,并且下一个extent包括 expired 的undo,
那么新的undo 数据(由当前事务产生的undo数据)将会 使用(wrap into)expired 的undo,而不是从 the undo tablespace free extent pool 中抓取 free的 extent。
新的extent空间不会被分配。


2.需要扩展undo segment的话,我们首先会查找undo tablespace内的空闲空间,而不是去扩展datafile,不论datafile的AUTOEXTEND 属性是否设置。
注意:本步骤在有些情况下被违反(broken),该bug在 9205 或者更高版本中被修复。

3. 如果我们暗示(hint)去收缩任何的undo segment以释放空间,然后我们去做了,然后看一下释放的空间是否满足我们的需要。

4.下一步,我们首先查找offline的segment 作为能reuse的 expired extents ,如果我们知道所有的offline的segment 都没有空间,那么我们会跳过本步。

5.我们是否能从其他online 的segment 中偷取 任何的 expired 的extent

6.如果表空间中有任何一个自动扩展的datafile,那么我们会在表空间中扩展数据文件以 分配空间。如果表空间中没有自动扩展的datafile,则跳过本步

7.如果retention 被保证,我们不能自动调优undo,然后我们会抛出一个错误。

8. 我们尝试使用一个低的UNDO_RETENTION 值,来确认 :
我们能否在不必违反任何retention guarantee的情况下(通过doing any hinted shrinking of segments) 释放一些空间

9.如果我们依然没有空间,并且正在保证 retention(are guaranteeing retention ),那么一个错误被抛出。

10.我们使用的是自动调优(auto tuned)并且不能保证(guaranteed)。我们开始此尝试从offline 的segment中偷取 UNEXPIRED extents

11.尝试把 从undo segment 分配的UNEXPIRED space 分配给当前 事务(transaction)

12.尝试从其他的online的segment中偷取 UNEXPIRED space。
注意:在一个特定并且罕见情况下,oracle可能不会重用(reuse) unexpired extents ,然后会报 ORA-30036 error


解决方案:

1. undo tablespace 太小,增大undo 表空间的大小。undo 表空间应该足够大,以满足存储 活动事务所产生的undo data 和 保持 honor the undo retention setting.

2.优化 UNDO_RETENTION 参数值。这对于系统中运行大的查询 十分重要。此参数值应该至少等于最长运行的那个查询的时间长度。
只要数据已经运行了一段时间,这个参数值可以通过查询V$UNDOSTAT视图来确定:

SQL> select max(maxquerylen) from v$undostat;

V$UNDOSTAT 视图以10分钟为间隔保留 udno 统计信息,
这个视图按照instance 展示统计数据,例如 begin time, end time,对于每一个实例来说,统计值是一个唯一的间隔

该视图包括如下列:

Column name Meaning
BEGIN_TIME 区间检查的开始时间
END_TIME 区间检查的结束时间
UNDOTSN undo 表空间号
UNDOBLKS 在间隔期间内使用的undo block的总数
TXNCOUNT 在间隔期间内的事务总数
MAXQUERYLEN 在间隔期间内的一个查询最大的持续时间(以秒为单位)
MAXCONCURRENCY 在间隔期间内,最高的事务数
UNXPSTEALCNT -----当 unexpired blocks 从其他 undo segments 中被偷取以满足空间需求的尝试次数。
UNXPBLKRELCNT 从undo segment 中remove掉用于其他事务的 unexpired blocks 数量。
UNXPBLKREUCNT 被事务重用(reuse)的unexpired undo blocks的 数量
EXPSTEALCNT 当expired extents 从其他 undo segments 中被偷取以满足空间需求的尝试次数。
EXPBLKRELCNT expired extents的数量,这些 expired extents 从其他 undo segments 中被偷取以满足空间需求
EXPBLKREUCNT -----在同一个undo segment中被重用的 expired undo blocks 的数量。
SSOLDERRCNT 在间隔期间 ora-1555错误发生的次数。
NOSPACEERRCNT Out-of-Space errors的个数。


当UNXPSTEALCNT 列通过 EXPBLKREUCNT列 持有了一个非零值,这是空间压力的一个标志。
如果列SSOLDERRCNT 非零,那么UNDO_RETENTION 没有被正确设置。
如果列NOSPACEERRCNT非零,那么有 相当严重的空间问题。

3. oracle10g中,有一个 guaranteed undo retention 选项。当此选项 被启用,数据库永远不会覆盖unexpired undo data。
比如,undo data的 存在时间小于 undo retention 期间。
务必保证undo tablespace 足够大,以满足guarantee requirement。

你可以启用 guarantee option ,
启用方法是当创建undo tablespace的时候 为undo tablespace 指定RETENTION GUARANTEE 子句
或者 使用alter tablespace 语句:
SQL> alter tablespace undotbs1 retention guarantee;

4.需要的空间依赖于 特定期间内需要的undo block数量,它是与UNDO_RETENTION 呈线性关系。
使用Document 262066.1 提到的公式来计算undo tablespace的大小。

注意:关于oracle 10gR2,Enterprise Manager里边有一个undo advisor,使用Enterprise Manager,你可以管理undo

a)From the Database Control home page, click Administration. The Administration property page appears.
b)In the Database Configuration section, click Undo Management. You can use the Undo Management page to view the following about your undo configuration:
■Name and size of undo tablespace
■Auto-extend tablespace setting
■Auto-tuned undo retention period
■Minimum retention period
See the Oracle Database 2 Day DBA manual for more details.


推荐阅读
  • 周排行与月排行榜开发总结
    本文详细介绍了如何在PHP中实现周排行和月排行榜的开发,包括数据库设计、数据记录和查询方法。涉及的知识点包括MySQL的GROUP BY、WEEK和MONTH函数。 ... [详细]
  • 如何在不同数据库中提取前N%的记录
    本文详细介绍了如何在SQL Server、Oracle和MySQL等不同数据库中提取前N%的记录。通过具体的示例和代码,帮助读者理解和掌握这些方法。 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • 在将Web服务器和MySQL服务器分离的情况下,是否需要在Web服务器上安装MySQL?如果安装了MySQL,如何解决PHP连接MySQL服务器时出现的连接失败问题? ... [详细]
  • SQL 连接详解与应用
    本文详细介绍了 SQL 连接的概念、分类及实际应用,包括内连接、外连接、自连接等,并提供了丰富的示例代码。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 本文介绍了如何在 Spring 3.0.5 中使用 JdbcTemplate 插入数据并获取 MySQL 表中的自增主键。 ... [详细]
  • BIEE中的最终用户界面被称为Presentation Layer(展现层)。展现层呈现的内容与用户在Web报表开发界面中看到的一致,使用业务语言进行描述,隐藏了技术细节,如星型模型。本文将详细介绍展现层的设计要点及其与业务模型层的关系。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • PHP 使用 Cookie 进行访问授权的方法
    本文介绍了如何使用 PHP 和 Cookie 实现访问授权,包括表单验证、数据库查询和会话管理等关键步骤。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 操作系统如何通过进程控制块管理进程
    本文详细介绍了操作系统如何通过进程控制块(PCB)来管理和控制进程。PCB是操作系统感知进程存在的重要数据结构,包含了进程的标识符、状态、资源清单等关键信息。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
author-avatar
清皮皮
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有