监控和管理Oracle UNDO表空间的使用

监控和管理Oracle UNDO表空间的使用

对Oracle数据库UNDO表空间的监控和管理是我们日常最重要的工作之一,UNDO表空间通常都是Oracle自动化管理(通过undo_management初始化参数确定);UNDO表空间是用于存储DML操作的前镜像数据,它是实例恢复,数据回滚,一致性查询功能的重要组件;我们常常会忽略对它的监控,这会导致UNDO表空间可能出现以下问题: 1).空间使用率100%,导致DML操作无法进行。 2).告警日志中出现大量的ORA-01555告警错误。 3).实例恢复失败,数据库无法正常打开。
一.对Oracle自动化管理UNDO进行干预。    由于UNDO是自动化管理,可干预的地方非常的少,更多的是监控,通过以下几个地方可对UNDO表空间实施一定的干预: 1).初始化参数 undo_management=AUTO     表示实例自动化管理UNDO表空间,从Oracle 9i开始,Oracle引进了AUM(Automatic Undo Management)。 undo_retention=900              事务提交后,相应的UNDO数据保留的时间,单位:秒。 undo_tablespace=UNDOTBS1 活动的UNDO表空间。 _smu_debug_mode=33554432 _undo_autotune=TRUE
2).Automatic UNDO Retention     Automatic UNDO Retention是10g的新特性,在10g和之后的版本的数据库,这个特性是默认启用的。     在Oracle Database 10g中当自动undo管理被启用,总是存在一个当前的undo retention,Oracle Database尝试至少保留旧的undo信息到该时间。数据库收集使用情况统计信息,基于这些统计信息和UNDO表空间大小来调整undo retention的时间。     Oracle Database基于undo表空间大小和系统活动自动调整undo retention,通过设置UNDO_RETENTION初始化参数指定undo retention的最小值。     查看Oracle自动调整UNDO RETENTION的值可以通过以下查询获得: SELECT TO_CHAR(BEGIN_TIME, ‘MM/DD/YYYY HH24:MI:SS‘) BEGIN_TIME,     TUNED_UNDORETENTION FROM V$UNDOSTAT;
    针对自动扩展的UNDO表空间,系统至少保留UNDO到参数指定的时间,自动调整UNDO RETENTION以满足查询对UNDO的要求,这可能导致UNDO急剧扩张,可以考虑不设置UNDO RETENTION值。
    针对固定的UNDO表空间,系统根据最大可能的undo retention进行自动调整,参考基于UNDO表空间大小和使用历史进行调整,这将忽略UNDO_RETENTION,除非表空间启用了RETENTION GUARANTEE。
自动调整undo retention不支持LOB,因为不能在undo表空间中存储任何有关LOBs事务的UNDO信息。
可以通过设置_undo_autotune=FALSE显示的关闭Automatic UNDO Retention功能。 3).TUNED_UNDORETENTION计算的值很大导致UNDO表空间增长很快?
    当使用的UNDO表空间非自动增长,tuned_undoretention是基于UNDO表空间大小的使用率计算出来的,在一些情况下,特别是较大的UNDO表空间时,这将计算出较大的值。
为了解决此行为,设置以下的实例参数: _smu_debug_mode=33554432
设置该参数,TUNED_UNDORETENTION就不基于undo表空间大小的使用率计算,代替的是设置(MAXQUERYLEN +300)和UNDO_RETENTION的最大值。 4).UNDO表空间数据文件自动扩展     如果UNDO表空间是一个自动扩展的表空间,那么很有可能UNDO表空间状态为EXPIRED的EXTENT不会被使用(这是为了减少报ORA-01555错误的几率),这将导致UNDO表空间变得很大;如果将UNDO表空间设置为非自动扩展,那么状态为EXPIRED的EXTENT就能被利用,这样可以一定程度控制UNDO表空间的大小,但这样会增加ORA-01555报错和UNDO空间不足报错的风险。合理的非自动扩展的UNDO表空间大小,以及合理的UNDO_RETENTION设置可以确保稳定的UNDO空间使用。 5).UNDO表空间guarantee属性     如果UNDO表空间是noguarantee状态,Oracle不确保提交后的事务对应的UNDO表空间中的数据会保留UNDO_RETENTION指定的时长,如果UNDO表空间不足,其他事务将可能偷盗相应的未过期的空间;将UNDO表空间设置为guarantee能够确保提交后的事务对应UNDO表空间中的数据在任何情况下都将保留UNDO_RETENTION指定的时长。      SQL> SELECT tablespace_name, retention FROM dba_tablespaces where tablespace_name=‘UNDOTBS1‘;
TABLESPACE_NAME                                              RETENTION ------------------------------------------------------------ ---------------------- UNDOTBS1                                                     NOGUARANTEE
SQL> alter tablespace undotbs1 retention guarantee;
表空间已更改。
SQL> SELECT tablespace_name, retention FROM dba_tablespaces where tablespace_name=‘UNDOTBS1‘;
TABLESPACE_NAME                                              RETENTION ------------------------------------------------------------ ---------------------- UNDOTBS1                                                     GUARANTEE 6).UNDO表空间大小    针对不同类型的业务系统,需要有充足的UNDO表空间,确保系统能够正常的运行。UNDO空间的大小跟业务系统有关系,也跟UNDO_RETENTION和UNDO表空间的GUARANTEE属性有关系,通常我们可以通过V$UNDOSTAT的统计信息估算出需要的UNDO表空间大小。
二.监控UNDO表空间使用情况    作为管理员来说,针对UNDO表空间更重要的是日常的监控工作,监控常用到以下的视图: a).DBA_ROLLBACK_SEGS DBA_ROLLBACK_SEGS describes rollback segments.
b).V$ROLLSTAT V$ROLLSTAT contains rollback segment statistics.
c).V$TRANSACTION V$TRANSACTION lists the active transactions in the system.
d).V$UNDOSTAT V$UNDOSTAT displays a histogram of statistical data to show how well the system is working. The available statistics include undo space consumption, transaction concurrency, and length of queries executed in the instance. You can use this view to estimate the amount of undo space required for the current workload. Oracle uses this view to tune undo usage in the system. The view returns NULL values if the system is in manual undo management mode.
Each row in the view keeps statistics collected in the instance for a 10-minute interval. The rows are in descending order by the BEGIN_TIME column value. Each row belongs to the time interval marked by (BEGIN_TIME, END_TIME). Each column represents the data collected for the particular statistic in that time interval. The first row of the view contains statistics for the (partial) current time period. The view contains a total of 576 rows, spanning a 4 day cycle.
e).DBA_UNDO_EXTENTS DBA_UNDO_EXTENTS describes the extents comprising the segments in all undo tablespaces in the database.  This view shows the status and size of each extent in the undo tablespace.
DBA_UNDO_EXTENTS.STATUS有三个值: ACTIVE      表示未提交事务还在使用的UNDO EXTENT,该值对应的UNDO SEGMENT的DBA_ROLL_SEGMENTS.STATUS一定是ONLINE或PENDING OFFLINE状态,一旦没有活动的事务在使用UNDO SEGMENT,那么对应的UNDO SEGMENT就变成OFFLINE状态。 EXPIRED     表示已经提交且超过了UNDO_RETENTION指定时间的UNDO EXTENT。 UNEXPIRED 表示已经提交但是还没有超过UNDO_RETENTION指定时间的UNDO EXTENT。
   Oracle重复使用UNDO EXTENT的原则如下: 1).ACTIVE状态的EXTENT在任何情况下都不会被占用。 2).如果是自动扩展的UNDO表空间,Oracle会保证EXTENT至少保留UNDO_RETENTION指定的时间。 3).如果自动扩展空间不足或者UNDO表空间是非自动扩展,Oracle会尝试重复使用同一个段下面EXPIRED状态的EXTENT,如果本段中没有这样的EXTENT,就会去偷别的段下面EXPIRED状态的EXTENT,如果依然没有这样的EXTENT,就会使用本段UNEXPIRED的EXTENT,如果还是没有,那么会去偷别的段的UNEXPIRED的EXTENT,这个都没有,就会报错。

1.UNDO表空间空间使用情况。 1).UNDO表空间总大小。    UNDO表空间下也以段的形式存储数据,每个事务对应一个段,这种类型的段通常被称为回滚段,或者UNDO段。默认情况下,数据库实例会初始化10个UNDO段,这主要是为了避免新生成的事务对UNDO段的争用。 UNDO表空间的总大小就是UNDO表空间下的所有数据文件大小的总和: SQL> select tablespace_name,contents from dba_tablespaces where tablespace_name=‘UNDOTBS1‘;
TABLESPACE_NAME                                              CONTENTS ------------------------------------------------------------ ------------------ UNDOTBS1                                                     UNDO
SQL> select tablespace_name,sum(bytes)/1024/1024 mb from dba_data_files where tablespace_name=‘UNDOTBS1‘  group by tablespace_name;
TABLESPACE_NAME                                                      MB ------------------------------------------------------------ ---------- UNDOTBS1                                                             90 2).查看UNDO表空间的使用情况。     该使用情况可以通过两个视图来查看: SQL> select owner,segment_name,bytes/1024/1024 mb from dba_segments where tablespace_name=‘UNDOTBS1‘;
OWNER      SEGMENT_NAME                           MB ---------- ------------------------------ ---------- SYS        _SYSSMU12_2867006942$                .125 SYS        _SYSSMU11_3120896088$                .125 SYS        _SYSSMU10_1735367849$               2.125 SYS        _SYSSMU9_3051513041$                2.125 SYS        _SYSSMU8_2280151962$                2.125 SYS        _SYSSMU7_825858386$                 .9375 SYS        _SYSSMU6_2597279618$                3.125 SYS        _SYSSMU5_247215464$                 3.125 SYS        _SYSSMU4_437228663$                 2.125 SYS        _SYSSMU3_3104504842$                5.125 SYS        _SYSSMU2_2464850095$                2.125 SYS        _SYSSMU1_2523538120$                3.125
已选择12行。
SQL>  select segment_name, v.rssize/1024/1024 mb   2    From dba_rollback_segs r, v$rollstat v   3    Where r.segment_id = v.usn(+)   4    order by segment_name ;
SEGMENT_NAME                           MB ------------------------------ ---------- SYSTEM                           .3671875 _SYSSMU10_1735367849$           2.1171875 _SYSSMU11_3120896088$ _SYSSMU12_2867006942$ _SYSSMU1_2523538120$            3.1171875 _SYSSMU2_2464850095$            2.1171875 _SYSSMU3_3104504842$            5.1171875 _SYSSMU4_437228663$             2.1171875 _SYSSMU5_247215464$             3.1171875 _SYSSMU6_2597279618$            3.1171875 _SYSSMU7_825858386$              .9296875 _SYSSMU8_2280151962$            2.1171875 _SYSSMU9_3051513041$            2.1171875
已选择13行。
    通过上面的两个查询可以看出,两个视图查询的值几乎一致,通常在巡检的时候,我们习惯查询dba_segments视图来确定UNDO表空间的使用情况,但查询V$ROLLSTAT数据更加准确。 3).查询事务使用的UNDO段及大小。     很多客户想知道,我的UNDO表空间超过了90%,是哪些会话的事务占用了这些空间: SQL>  select s.sid,s.serial#,s.sql_id,v.usn,segment_name,r.status, v.rssize/1024/1024 mb   2    From dba_rollback_segs r, v$rollstat v,v$transaction t,v$session s   3    Where r.segment_id = v.usn and v.usn=t.xidusn and t.addr=s.taddr   4    order by segment_name ;
       SID    SERIAL# SQL_ID                            USN SEGMENT_NAME                                         STATUS                                   MB ---------- ---------- -------------------------- ---------- ------------------------------------------------------------ -------------------------------- ----------          8        163                                     5 _SYSSMU5_247215464$                                  ONLINE                            3.1171875
    通过这个SQL语句可以查询到会话对应的活动事务使用的UNDO段名称,以及该段占用的UNDO空间大小,对于非活动事务占用了UNDO空间是由Oracle实例根据参数配置自动化管理的。
2.根据Oracle对UNDO表空间的统计信息调整UNDO参数及大小。     最后我们要谈谈V$UNDOSTAT视图,该视图的作用是用于指导管理员调整UNDO表空间的参数及表空间大小,每行表示的是10分钟的数据,最多可保留576行,4天一个周期,如果该视图没有数据,那么UNDO可能是手动管理方式。下面对该视图字段的含义进行说明:

BEGIN_TIME DATE Identifies the beginning of the  time interval  时间间隔开始时间。
END_TIME DATE Identifies the end of the time  interval    时间间隔结束时间。
UNDOTSN NUMBER Represents the last active undo  tablespace in the duration of time. The tablespace ID of the active undo  tablespace is returned in this column. If more than one undo tablespace was  active in that period, the active undo tablespace that was active at the end of  the period is reported.  时间间隔活动的UNDO表空间个数,返回的是活动UNDO表空间的ID号,如果大于1个活动的UNDO表空间,将报告在时间间隔最后被激活的UNDO表空间ID号。
UNDOBLKS NUMBER Represents the total number of undo  blocks consumed. You can use this column to obtain the consumption rate of undo  blocks, and thereby estimate the size of the undo tablespace needed to handle  the workload on your system.  表示总共消费的UNDO块数,可以使用这个字段获得undo块的消费比率,由此来估算处理系统负载需要的UNDO表空间大小。
TXNCOUNT NUMBER Identifies the total number of  transactions executed within the period  在这个时期内总共执行的事务数。
MAXQUERYLEN NUMBER Identifies the length of the  longest query (in seconds) executed in the instance during the period. You can  use this statistic to estimate the proper setting of the UNDO_RETENTION initialization parameter. The length of a query is  measured from the cursor open time to the last fetch/execute time of the cursor.  Only the length of those cursors that have been fetched/executed during the  period are reflected in the view.  在这个时期该实例执行的最长查询时间(单位:秒),可以使用这个统计信息估算UNDO_RETENTION初始化参数的大概值。查询的时间精确到从游标打开到最后提取/执行时间。只有当这些游标的查询时间在这个时期被提取/执行才能被反映到该视图。
MAXQUERYID VARCHAR2(13) SQL identifier of the longest  running SQL statement in the period  在这个时期运行最长时间的SQL语句标识符。
MAXCONCURRENCY NUMBER Identifies the highest number of  transactions executed concurrently within the period  在这个时期并行执行的最大事务数。
UNXPSTEALCNT NUMBER Number of attempts to obtain undo  space by stealing unexpired extents from other transactions  尝试从其他事务通过偷盗的方式获得的未过期的undo空间区间数。
UNXPBLKRELCNT NUMBER Number of unexpired blocks removed  from certain undo segments so they can be used by other transactions  从某些UNDO段移除未过期的块数,他们被用于其它事务。
UNXPBLKREUCNT NUMBER Number of unexpired undo blocks  reused by transactions  事务重新使用未过期的undo块数。
EXPSTEALCNT NUMBER Number of attempts to steal  expired undo blocks from other undo segments  尝试从其他UNDO段偷盗过期的UNDO块数。
EXPBLKRELCNT NUMBER Number of expired undo blocks  stolen from other undo segments  从其他UNDO段偷盗的过期的UNDO块数。
EXPBLKREUCNT NUMBER Number of expired undo blocks  reused within the same undo segments  在相同UNDO段重新使用的过期的UNDO块数。
SSOLDERRCNT NUMBER Identifies the number of times the  error ORA-01555 occurred. You can use this statistic to decide  whether or not the UNDO_RETENTION initialization parameter is set  properly given the size of the undo tablespace. Increasing the value of UNDO_RETENTION can reduce the occurrence of this error.  标识ORA-01555错误发生的次数,可以使用这个统计信息决定针对给定的UNDO表空间是否设置UNDO_RETENTION初始化参数。增加UNDO_RETENTION的值可以减少这个错误的发生。
NOSPACEERRCNT NUMBER Identifies the number of times  space was requested in the undo tablespace and there was no free space  available. That is, all of the space in the undo tablespace was in use by active  transactions. The corrective action is to add more space to the undo  tablespace.  在UNDO表空间没有自由空间活动的情况下,空间请求的次数,所有UNDO表空间的空间被活动的事务使用,这需要添加更多的空间到UNDO表空间。
ACTIVEBLKS NUMBER Total number of blocks in the  active extents of the undo tablespace for the instance at the sampled time in  the period  在时间间隔,针对该实例,UNDO表空间活动区间的块个数。
UNEXPIREDBLKS NUMBER Total number of blocks in the  unexpired extents of the undo tablespace for the instance at the sampled time in  the period  在时间间隔,针对该实例,UNDO表空间未过期的块个数。
EXPIREDBLKS NUMBER Total number of blocks in the  expired extents of the undo tablespace for the instance at the sampled time in  the period  在时间间隔,针对该实例,UNDO表空间过期区间的块个数。
TUNED_UNDORETENTION NUMBER Amount of time (in seconds) for  which undo will not be recycled from the time it was committed. At any point in  time, the latest value of TUNED_UNDORETENTION is used to determine  whether data committed at a particular time in the past can be recycled.  提交之后UNDO不能被回收的总时间(单位:秒)。

下面是查询V$UNDOSTAT的例子: SELECT TO_CHAR(BEGIN_TIME, ‘MM/DD/YYYY HH24:MI:SS‘) BEGIN_TIME,     TO_CHAR(END_TIME, ‘MM/DD/YYYY HH24:MI:SS‘) END_TIME,     UNDOTSN, UNDOBLKS, TXNCOUNT, MAXCONCURRENCY AS "MAXCON",    MAXQUERYLEN, TUNED_UNDORETENTION     FROM v$UNDOSTAT; 
通常当字段UNXPSTEALCNT和EXPBLKREUCNT是非零值,表示有空间压力。 如果字段SSOLDERRCNT是非零值,表示UNDO_RETENTION设置不合理。 如果字段NOSPACEERRCNT是非零值,表示有一系列空间问题。 在10g DBA_HIST_UNDOSTAT视图包括了V$UNDOSTAT快照统计信息。 注意:如果参数_undo_autotune=FALSE,X$KTUSMST2将没有数据生成,该表是DBA_HIST_UNDOSTATS视图的源表。 三.释放UNDO表空间。     UNDO表空间被撑得过大,有些时候我们需要释放这些空间,通常的做法是新建一个UNDO,然后设置使用新建的UNDO表空间,最后DROP原有UNDO表空间。下面通过一个例子来演示这个过程: SQL> col segment_name format a30 SQL> col tablespace_name format a30 SQL> SQL> select segment_name, tablespace_name, r.status,   2    (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,   3    max_extents, v.curext CurExtent   4    From dba_rollback_segs r, v$rollstat v   5    Where r.segment_id = v.usn(+)   6    order by segment_name ;
SEGMENT_NAME                   TABLESPACE_NAME                STATUS                           INITIALEXTENT NEXTEXTENT MAX_EXTENTS  CUREXTENT ------------------------------ ------------------------------ -------------------------------- ------------- ---------- ----------- ---------- SYSTEM                         SYSTEM                         ONLINE                                  112            56       32765          4 _SYSSMU10_1735367849$          UNDOTBS1                       ONLINE                                  128            64       32765          2 _SYSSMU11_3120896088$          UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU12_2867006942$          UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU1_2523538120$           UNDOTBS1                       ONLINE                                  128            64       32765          2 _SYSSMU2_2464850095$           UNDOTBS1                       ONLINE                                  128            64       32765          2 _SYSSMU3_3104504842$           UNDOTBS1                       ONLINE                                  128            64       32765          2 _SYSSMU4_437228663$            UNDOTBS1                       ONLINE                                  128            64       32765          2 _SYSSMU5_247215464$            UNDOTBS1                       ONLINE                                  128            64       32765          3 _SYSSMU6_2597279618$           UNDOTBS1                       ONLINE                                  128            64       32765          3 _SYSSMU7_825858386$            UNDOTBS1                       ONLINE                                  128            64       32765          9 _SYSSMU8_2280151962$           UNDOTBS1                       ONLINE                                  128            64       32765          3 _SYSSMU9_3051513041$           UNDOTBS1                       ONLINE                                  128            64       32765          2
已选择13行。 当前所有的回滚段在属于UNDOTBS1表空间。
SQL> create undo tablespace undotbs2 datafile ‘E:\APP\ORADATA\ORCL3\undotbs02.dbf‘ size 20m autoextend on next 100m;
表空间已创建。
SQL> show parameter undo
NAME                                 TYPE                   VALUE ------------------------------------ ---------------------- ------------------------------ undo_management                      string                 AUTO undo_retention                       integer                900 undo_tablespace                      string                 UNDOTBS1 SQL> alter system set undo_tablespace=‘UNDOTBS2‘;
系统已更改。
SQL> show parameter undo
NAME                                 TYPE                   VALUE ------------------------------------ ---------------------- ------------------------------ undo_management                      string                 AUTO undo_retention                       integer                900 undo_tablespace                      string                 UNDOTBS2 SQL> select segment_name, tablespace_name, r.status,   2    (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,   3    max_extents, v.curext CurExtent   4    From dba_rollback_segs r, v$rollstat v   5    Where r.segment_id = v.usn(+)   6    order by segment_name ;
SEGMENT_NAME                   TABLESPACE_NAME                STATUS                           INITIALEXTENT NEXTEXTENT MAX_EXTENTS  CUREXTENT ------------------------------ ------------------------------ -------------------------------- ------------- ---------- ----------- ---------- SYSTEM                         SYSTEM                         ONLINE                                  112            56       32765          5 _SYSSMU10_1735367849$          UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU11_3120896088$          UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU12_2867006942$          UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU13_3398750080$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU14_3208386744$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU15_2082453576$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU16_2746861185$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU17_3752120760$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU18_3475721077$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU19_1407063349$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU1_2523538120$           UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU20_910603223$           UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU21_1261247597$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU22_1117177365$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU2_2464850095$           UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU3_3104504842$           UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU4_437228663$            UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU5_247215464$            UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU6_2597279618$           UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU7_825858386$            UNDOTBS1                       ONLINE                                  128            64       32765          9 _SYSSMU8_2280151962$           UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU9_3051513041$           UNDOTBS1                       OFFLINE                                 128            64       32765
已选择23行。     虽然将数据库实例使用的UNDO表空间指向了新表空间,但是依然有过去的事务在使用UNDOTBS1表空间下面的段,这个时候不能直接DROP UNDOTBS1(执行DROP命令也会报错),必须等待UNDOTBS1表空间下的所有段状态变成OFFLINE才能DROP。
SQL> r   1  select segment_name, tablespace_name, r.status,   2    (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,   3    max_extents, v.curext CurExtent   4    From dba_rollback_segs r, v$rollstat v   5    Where r.segment_id = v.usn(+)   6*   order by segment_name
SEGMENT_NAME                   TABLESPACE_NAME                STATUS                           INITIALEXTENT NEXTEXTENT MAX_EXTENTS  CUREXTENT ------------------------------ ------------------------------ -------------------------------- ------------- ---------- ----------- ---------- SYSTEM                         SYSTEM                         ONLINE                                  112            56       32765          5 _SYSSMU10_1735367849$          UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU11_3120896088$          UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU12_2867006942$          UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU13_3398750080$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU14_3208386744$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU15_2082453576$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU16_2746861185$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU17_3752120760$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU18_3475721077$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU19_1407063349$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU1_2523538120$           UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU20_910603223$           UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU21_1261247597$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU22_1117177365$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU2_2464850095$           UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU3_3104504842$           UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU4_437228663$            UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU5_247215464$            UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU6_2597279618$           UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU7_825858386$            UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU8_2280151962$           UNDOTBS1                       OFFLINE                                 128            64       32765 _SYSSMU9_3051513041$           UNDOTBS1                       OFFLINE                                 128            64       32765
已选择23行。     UNDOTBS1表空间下的所有段状态都变成了OFFLINE,这个时候可以DROP UNDOTBS1来释放空间。
SQL> drop tablespace undotbs1 including contents and datafiles;
表空间已删除。
    虽然能DROP,只是说明没有事务在使用旧的UNDO表空间,这并不表示所有的UNDO EXTENT已经过期(DBA_UNDO_EXTENTS.STATUS),如果有某些查询需要用到这些存储在旧UNDO表空间上过期或未过期的EXTENT时,将收到ORA-01555的报错。 SQL> select segment_name, tablespace_name, r.status,   2    (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,   3    max_extents, v.curext CurExtent   4    From dba_rollback_segs r, v$rollstat v   5    Where r.segment_id = v.usn(+)   6    order by segment_name ;
SEGMENT_NAME                   TABLESPACE_NAME                STATUS                           INITIALEXTENT NEXTEXTENT MAX_EXTENTS  CUREXTENT ------------------------------ ------------------------------ -------------------------------- ------------- ---------- ----------- ---------- SYSTEM                         SYSTEM                         ONLINE                                  112            56       32765          5 _SYSSMU13_3398750080$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU14_3208386744$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU15_2082453576$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU16_2746861185$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU17_3752120760$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU18_3475721077$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU19_1407063349$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU20_910603223$           UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU21_1261247597$          UNDOTBS2                       ONLINE                                  128            64       32765          0 _SYSSMU22_1117177365$          UNDOTBS2                       ONLINE                                  128            64       32765          0
已选择11行。
   有益的补充《Oracle 11gR2 Database UNDO表空间使用率居高不下》:http://blog.itpub.net/23135684/viewspace-1406011/
    有关AUM更多详细的信息,请参考文章:    《FAQ – Automatic Undo Management (AUM) / System Managed Undo (SMU) (文档 ID 461480.1)》    《AUM 常用分析/诊断脚本 (文档 ID 1526122.1)》 --end--

时间: 2024-12-15 22:37:16

监控和管理Oracle UNDO表空间的使用的相关文章

第15章 oracle undo表空间管理

2015-10-23 目录 参考资料 [1] 林树泽.Oracle 11g R2 DBA操作指南[M].北京:清华大学出版社,2013 [2] Oracle undo 表空间管理 [3] undo表空间概述 [4] Oracle UNDO表空间的管理 [5] Oracle的UNDO表空间管理总结 [6] UNDO表空间的管理 [7] UNDO表空间的管理 [8] 监控和管理Oracle UNDO表空间的使用 [9] 谈谈undo表空间

Oracle UNDO表空间的管理

UNDO表空间的管理是Oracle DBA最重要的日常工作之一,UNDO表空间用来暂时存储DML操作的数据,其主要作用有: 1.事务回滚 2.实例恢复 3.读一致性 4.闪回 下面是对UNDO表空间的一些操作 1.查看某个实例都有哪些表空间:select tablespace_name, contents from dba_tablespaces where contents = 'UNDO'; 我们也可以用show parameter undo_tablespace名称查看,此命令只能查看当前

Oracle undo 表空间不可用

由于某次不小心操作,在切换表空间时没有成功,但是由于把parameter undo的undo_management值改为了MANUAL所以在启动数据库时没有报任何错误,但是给表插入数据时报错了,回滚段不可用的错误.然后查询了错误原因. 1 首先看数据库中undo信息 SQL> show parameter undo; NAME TYPE VALUE------------------------------------ ----------- --------------------------

oracle undo表空间

查询undo表空间状态 SELECT tablespace_name, status, SUM (bytes) / 1024 / 1024 "Bytes(M)" FROM dba_undo_extents GROUP BY tablespace_name, status; Undo表空间的状态(STATUS)有三种取值------- ACTIVE, EXPIRED, UNEXPIRED,  他们的含义是: ACTIVE:  正在使用的undo表空间区域, 例如: 正在执行的没有comm

Oracle 11gR2 Database UNDO表空间使用率居高不下-转载

客户的数据库是Oracle Database 11.2.0.3.0 for AIX 6.1 64bit的单机数据库.客户查询DBA_FREE_SPACE发现UNDO表空间的使用率高达98%以上.客户的UNDO表空间已经手动扩展到了25GB,且一直在增加,为了UNDO表空间能及时的被释放,UNDO表空间对应的所有数据文件自动扩展都被关闭.查询DBA_UNDO_EXTENTS发现在UNDO表空间中当前没有ACTIVE的EXTENT存在,UNEXPIRED的占到总空间的60%,有30%是EXPIRED

记一次ORACLE的UNDO表空间爆满分析过程

这篇文章是记录一次ORACLE数据库UNDO表空间爆满的分析过程,主要整理.梳理了同事分析的思路.具体过程如下所示: 早上收到一数据库服务器的UNDO表空间的告警邮件,最早一封是7:55发出的(监控作业是15分钟一次),从告警邮件分析,好像是UNDO表空间突然一下子被耗尽了. DB Tablespace Allocated Free Used % Free % Used 192.168.xxx.xxx:1521 UNDOTBS1 16384 190.25 16193.75 1.16 99 使用一

Oracle之表空间、索引、管理权限及角色

Oracle表空间 表空间是数据库的逻辑组成部分,从物理上讲,数据库数据存放在数据文件中 从逻辑上讲,数据库则是存放在表空间中,表空间由一个或多个数据文件组成 数据库的逻辑结构 oracle中逻辑结构包括表空间.段.区和块 说明一下数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而 区又是由oracle块构成的这样的一种结构,可以提高数据的效率 表空间用于从逻辑上组织数据库的数据.数据库逻辑上是由一个或是多个表空间组成的 通过表空间可以达到以下作用: 1.控制数据库占用的磁盘空间 2

【oracle11g,13】表空间管理2:undo表空间管理(调优) ,闪回原理

一.undo空间原理: dml操作会产生undo数据. update时,sever process 会在databuffer 中找到该记录的buffer块,没有就从datafile中找并读入data buffer.在修改之前,原始数据先放到undo段,并在数据块头记录undo段(acitve 状态)中该数据块的位置,读写这个块时会占用事务槽,会将该事务号记录在数据块的头部.然后在进行update,并将该块放到dirty list检查点队列,等待dbwr进行写操作. 二.创建新的undo表空间替换

oracle表空间查询维护命令大全之二(undo表空间)

--undo表空间汇总 --查看所有的表空间名字 select name from v$tablespace; --创建新的UNDO表空间,并设置自动扩展参数; create undo tablespace undotbs2 datafile 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS02.DBF' size 10m reuse autoextend on next 100m maxsize unlimited; --注意:在OPEN状态下某些时