如何确定UNDO_RETENTION参数的值以避免ORA-1555 (Doc ID 822411.1)
How to Determine the Value Of UNDO_RETENTION Parameter to Avoid ORA-1555 (Doc ID 822411.1)
APPLIES TO:
Oracle Database - Enterprise Edition - Version 10.2.0.3 and later
Oracle Database Cloud Schema Service - Version N/A and later
Oracle Database Exadata Cloud Machine - Version N/A and later
Oracle Cloud Infrastructure - Database Service - Version N/A and later
Oracle Database Backup Service - Version N/A and later
Information in this document applies to any platform.
***Checked for relevance on 21-Jul-2017***
SYMPTOMS
The objective of this note is to explain how to set UNDO_RETENTION parameter and to clarify how the error ORA-1555 could be generated due to wrong setting of UNDO_RETENTION parameter value.
本文的目的是解释如何设置UNDO_RETENTION参数,并阐明由于错误设置UNDO_RETENTION参数值而导致如何生成错误ORA-1555
CAUSE
undo_retention sizing undo_retention大小调整
SOLUTION
You need to tune to increase to an optimum value the UNDO_RETENTION parameter. 您需要调整以将UNDO_RETENTION参数增加到最佳值
The value for this parameter is specified in seconds. 以秒为单位指定此参数的值
This is important for systems running long queries. 这对于运行长查询的系统很重要
That could be tuned by checking the maxquerylen from v$undostat; 可以通过检查 v$undostat 中的 maxquerylen 来调整
The UNDO_RETENTION value should at least be equal to the length of longest running query on a given database instance.
UNDO_RETENTION 值应至少等于给定数据库实例上运行时间最长的查询的长度。
This can be determined by querying V$UNDOSTAT view once the database has been running for a while.
数据库运行一段时间后,可以通过查询 V$UNDOSTAT 视图来确定
SQL> select max(maxquerylen) from v$undostat;
This needs to be captured when the system has been running for a while and is fully used.
当系统运行了一段时间并且已完全使用时,需要捕获此信息
The following two column are enough to check if you are detecting or not an out of space error and/or ora-1555 one :
以下两列足以检查您是否正在检测到空间不足 error and/or ora-1555
SSOLDERRCNT - The number of ORA-1555 errors that occurred during the interval 间隔期间发生的ORA-1555错误的数量
NOSPACEERRCNT - The number of Out-of-Space errors 空间不足错误数
The folowing Note 262066.1: How To Size UNDO Tablespace For Automatic Undo Management
explains how to set undo tablespace correctly to guarantee undo retention. 介绍了如何正确设置undo表空间以确保undo retention。
When this option is enabled the database never overwrites unexpired undo data that is, undo data whose age is less than the undo retention period.
启用此选项后,数据库将永远不会覆盖未过期的undo数据,即年龄小于undo保留期的undo数据。
The storage and used space for undo is then a direct consecuency on your undo_retention configuration.
这样,undo的存储空间和使用的空间就直接决定了undo_retention配置的安全性。
The recommend value for undo_retention is the value is length of longest running query on a given database instance.
undo_retention 的推荐值是该值是给定数据库实例上运行时间最长的查询的长度。
If you see a message in the trace file like "Query Duration=5095 " means that the Query was running for '5095 sec' when the error occured.
如果在跟踪文件中看到一条消息,例如 "Query Duration=5095 " ,则表示发生错误时查询正在运行 '5095 sec' 。
Note that the UNDO_RETENTION parameter works best if the current undo tablespace has enough space for the active transactions.
请注意,如果当前的undo表空间具有足够的空间用于活动事务,则UNDO_RETENTION参数最有效。
If an active transaction needs undo space and the undo tablespace does not have any free space, then the system will start reusing undo space that would have been retained.
如果活动事务需要undo空间,并且undo表空间没有任何可用空间,则系统将开始重新使用原本保留的undo空间。
This may cause long queries to fail. 这可能会导致长查询失败。
Be sure to allocate enough space in the undo tablespace to satisfy the space requirement for the current setting of this parameter.
确保在undo表空间中分配足够的空间,以满足该参数当前设置的空间要求。
REFERENCES
NOTE:262066.1 - How To Size UNDO Tablespace For Automatic Undo Management
NOTE:269814.1 - ORA-01555 Using Automatic Undo Management - Causes and Solutions