首页 > Linux操作系统 > Linux操作系统 > Undo Tablespace
After a
transaction is committed, undo data is no longer needed for rollback or
transaction recovery purposes. However, for consistent read purposes,
long-running queries may require this old undo information for producing older
images of data blocks. Furthermore, the success of several Oracle Flashback
features can also depend
upon the availability of older undo information.
For these reasons, it is desirable to retain the old undo information for as
long as possible.
When automatic undo management is enabled, there
is always a current undo retention period, which is the minimum amount of time
that Oracle Database attempts to retain old undo information before overwriting
it. Old (committed) undo information that is older than the current undo
retention period is said to be expired. Old undo information with an age that
is less than the current undo retention period is said to be unexpired.
Oracle Database automatically tunes the undo
retention period based on undo tablespace size and system activity. You can
specify a minimum undo retention period (in seconds) by setting the
UNDO_RETENTION initialization parameter. The database makes its best effort to
honor the specified minimum undo retention period, provided that the undo
tablespace has space available for new transactions. When available space for
new transactions becomes short, the database begins to overwrite expired undo.
If the undo tablespace has no space for new transactions after all expired undo
is overwritten, the database may begin overwriting unexpired undo information.
If any of this overwritten undo information is required for consistent read in
a current long-running query, the query could fail with the snapshot too old
error message.
The following points explain the exact impact of
the UNDO_RETENTION parameter on undo retention:
The UNDO_RETENTION parameter is ignored for a
fixed size undo tablespace. The database may overwrite nexpired undo
information when tablespace space becomes low.For an undo tablespace with the AUTOEXTEND
option enabled, the database attempts to honor the minimum retention period
specified by UNDO_RETENTION. When space is low, instead of overwriting
unexpired undo information, the tablespace auto-extends. If the MAXSIZE clause
is specified for an auto-extending undo tablespace, when the maximum size is
reached, the database may begin to overwrite unexpired undo information.
Retention Guarantee
To guarantee the success of
long-running queries or Oracle Flashback operations, you can enable retention
guarantee. If retention guarantee is enabled, the specified minimum undo
retention is guaranteed; the database never overwrites unexpired undo data even
if it means that transactions fail due to lack of space in the undo tablespace.
If retention guarantee is not enabled, the database can overwrite unexpired
undo when space is low, thus lowering the undo retention for the system. This
option is disabled by default.
WARNING: Enabling retention guarantee can cause
multiple DML operations to fail. Use with caution.
You enable retention guarantee by specifying the
RETENTION GUARANTEE clause for the undo tablespace when you create it with
either the CREATE DATABASE or CREATE UNDO TABLESPACE statement. Or, you can
later specify this clause in an ALTER TABLESPACE statement. You disable
retention guarantee with the RETENTION NOGUARANTEE clause.You can use the
DBA_TABLESPACES view to determine the retention guarantee setting for the undo
tablespace. A column named RETENTION contains a value of GUARANTEE,
NOGUARANTEE, or NOT APPLY (used for tablespaces other than the undo
tablespace).
Automatic Tuning of Undo
Retention
Oracle Database automatically tunes the undo
retention period based on how the
undo tablespace is configured.If the undo
tablespace is fixed size, the database tunes the retention period for the best
possible undo retention for that tablespace size and the current system load.
This tuned retention period can be significantly greater than the specified
minimum retention period.
If the undo tablespace is configured with the
AUTOEXTEND option, the database tunes the undo retention period to be somewhat
longer than the longest-running query on the system at that time. Again, this
tuned retention period can be greater than the specified minimum retention
period.Note: Automatic tuning of undo
retention is not supported for LOBs. This is because undo information for LOBs
is stored in the segment itself and not in the undo tablespace. For LOBs,
the database attempts to honor the minimum undo retention period specified by
UNDO_RETENTION. However, if space becomes low, unexpired LOB undo information
may be overwritten.
You can determine the current retention period by
querying the TUNED_UNDORETENTION column of the V$UNDOSTAT view. This view
contains one row for each 10-minute statistics collection interval over the
last 4 days. (Beyond 4 days, the data is available in the DBA_HIST_UNDOSTAT
view.) TUNED_UNDORETENTION is given in seconds.
select to_char(begin_time, 'DD-MON-RR HH24:MI')
begin_time,
to_char(end_time, 'DD-MON-RR HH24:MI') end_time,
tuned_undoretention
from v$undostat order by end_time;
External Views
Monitor transaction and undo information with
V$TRANSACTION and V$ROLLSTAT.
For automatic undo management, the information in
V$ROLLSTAT reflects the
behaviors of the automatic undo management undo
segments.
The V$UNDOSTAT view displays a histogram of
statistical data to show how well the
system is working. You can see statistics such as
undo consumption rate, transaction
concurrency, and lengths of queries run in the
instance. Using this view, you can better
estimate the amount of undo space required for the
current workload.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1698901/viewspace-613084/ ,如需转载,请注明出处,否则将追究法律责任。