監控和管理Oracle UNDO表空間的使用

531968912發表於2016-01-21

    對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--

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-1980185/,如需轉載,請註明出處,否則將追究法律責任。

相關文章