使用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.

【翻译自mos文章】使用aum( Automatic Undo Management) 时遇到 ORA-01555错误--- 原因和解决方式。的更多相关文章

  1. FAQ – Automatic Undo Management (AUM) / System Managed Undo (SMU) (Doc ID 461480.1)

    FAQ – Automatic Undo Management (AUM) / System Managed Undo (SMU) (Doc ID 461480.1) APPLIES TO: Orac ...

  2. 【翻译自mos文章】11.2.0.4及更高版本号的asm实例中MEMORY_TARGET 和 MEMORY_MAX_TARGET的默认值和最小值

    [翻译自mos文章]11.2.0.4及更高版本号的asm实例中MEMORY_TARGET 和 MEMORY_MAX_TARGET的默认值和最小值 来源于: Default and Minimum ME ...

  3. 如何为 Automatic Undo Management 调整 UNDO Tablespace 的大小 (Doc ID 262066.1)

    How To Size UNDO Tablespace For Automatic Undo Management (Doc ID 262066.1) APPLIES TO: Oracle Datab ...

  4. 【翻译自mos文章】ABMR:在asm 环境中測试Automatic Block Recover 特性的方法

    ABMR:在asm 环境中測试Automatic Block Recover 特性的方法 參考原文: ABMR: How to test Automatic Block Recover Feature ...

  5. 【翻译自mos文章】job 不能自己主动执行--这是另外一个mos文章,本文章有13个解决方法

    job 不能自己主动执行--这是另外一个mos文章 參考原文: Jobs Not Executing Automatically (Doc ID 313102.1) 适用于: Oracle Datab ...

  6. 【翻译自mos文章】v$undostat视图没有依照每10分钟进行更新,v$undostat仅仅有1行(one rows)

    v$undostat视图没有依照每10分钟进行更新,v$undostat仅仅有1行(one rows) 參考原文: The V$UNDOSTAT view is not getting updated ...

  7. 【翻译自mos文章】使用asmcmd命令在本地和远程 asm 实例之间 拷贝asm file的方法

    使用asmcmd命令在本地和远程 asm 实例之间 拷贝asm file的方法 參考原文: How to Copy asm files between remote ASM instances usi ...

  8. 【翻译自mos文章】oracle db 中的用户账户被锁--查看oracle用户的尝试次数

    參考原文: Users Accounts Getting Locked. (Doc ID 791037.1) 事实上这个文章是为oracle 别的软件产品写的,只是涉及到user 锁定问题.那还是跟d ...

  9. 【翻译自mos文章】使用asm来部署 超大数据库(10TB到PB 范围)--针对oracle 10G

    使用asm来部署 超大数据库(10TB到PB 范围) 參考原文: Deployment of very large databases (10TB to PB range) with Automati ...

随机推荐

  1. [ ZJOI 2010 ] 网络扩容

    \(\\\) Description 给定一张有向图,每条边都有一个容量 \(C\) 和一个扩容费用 \(W\). 这里扩容费用是指将容量扩大 \(1\) 所需的费用.求: 在不扩容的情况下, \(1 ...

  2. [ CodeForces 1059 D ] Nature Reserve

    \(\\\) \(Description\) 你现在有\(N\)个分布在二维平面上的整点\((x_i,y_i)\),现在需要你找到一个圆,满足: 能够覆盖所有的给出点 与\(x\)轴相切 现在需要你确 ...

  3. poj3411 Paid Roads

    思路: 搜索.注意点和边都有可能经过多次. 实现: #include <iostream> #include <cstdio> #include <vector> ...

  4. WordPress强制跳转https教程

    在互联网火热的今天,安全问题显得越来越重要,为了用户信息安全,很多热门网站都启用了https 有小伙伴就问:我启用了https,为什么访问的时候显示的还是http呢? 其实,有时候并不是因为我们ssl ...

  5. Qt 5.8.3 部署/添加 Crypto++第三方库(5.6.5版本)

    首先,Qt没有封装加解密算法库(其实有个哈希函数的函数).介于OpenSSL函数封装不友好,以及先前爆发的心脏滴血漏洞广受诟病,我们考虑在C++上使用一种新的,并且封装友好的,OOAD程度更高的加解密 ...

  6. MFC_2.5 选项卡控件的使用

    选项卡控件的使用 1.新建默认MFC文件. 2.资源-添加Dialog-添加类.(假设生成3个,Dialog1Dialog2Dialog3) 3.类向导,添加类,点小三角形,添加MFC类.添加CTab ...

  7. 梦想CAD控件关于id与handle问题

    ID和句柄具有各自的特点: (1) ID:在一个任务中,本次任务中都是独一无二的.在不同的任务中,同一个图形对象的ID可能不同. (2) 句柄:在一个任务中,不能保证每个对象的句柄都唯一,但是在一个图 ...

  8. ThinkPHP---案例1登录登出和添加部门

    配置文件分3类:系统配置文件,分组配置文件,应用配置文件 ①系统配置文件ThinkPHP/Conf/convention.php: ②分组 / 模块 /平台配置文件Home/Conf/config.p ...

  9. 在做导入一个excel文件的时候,数据有空值的时候

    StringUtil.isNotEmpty(i.getFname()),用这个方法可以解决 java string 去除前后两端的空格和空字符使用.trim()

  10. docker 1-->docker swarm 转载

    实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行.然而,面对 Kubernetes, Mesos 以及 Swarm 等众多容器集群系统,我们该如何选择 ...