監控和管理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表空間總大小。
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle undo 表空間管理Oracle
- oracle undo表空間管理Oracle
- Oracle的UNDO表空間管理總結Oracle
- oracle表空間增加監控Oracle
- oracle undo 表空間Oracle
- 監控oracle表空間指令碼Oracle指令碼
- oracle重建UNDO表空間Oracle
- Oracle undo 表空間使用情況分析Oracle
- Oracle 釋放過度使用的Undo表空間Oracle
- oracle空間使用監控指令碼Oracle指令碼
- oracle UNDO表空間一個bug——undo表空間快速擴充套件Oracle套件
- 【UNDO】使用重建UNDO表空間方法解決UNDO表空間過大問題
- oracle監控表空間,JOB,rman備份Oracle
- Oracle - 回滾表空間 Undo 的整理Oracle
- Oracle Undo使用情況監控Oracle
- ORACLE線上切換undo表空間Oracle
- Oracle undo表空間切換(ZT)Oracle
- oracle回滾段 undo 表空間Oracle
- ORACLE撤銷表空間(Undo Tablespaces)Oracle
- 10.管理UNDO表空間.(筆記)筆記
- Oracle undo表空間爆滿的解決Oracle
- 自動undo表空間模式下切換新的undo表空間模式
- 理解UNDO表空間
- Oracle 表空間的管理Oracle
- Oracle的表空間管理Oracle
- 表空間監控(三)tablespace detailAI
- 多臺ORACLE資料庫表空間監控方案Oracle資料庫
- [原創] 利用Oracle metric(threshold)監控表空間Oracle
- WINDOWS 環境下 監控ORACLE臨時表空間WindowsOracle
- 利用Oracle threshold(度量閥值)監控表空間Oracle
- Oracle表空間管理Oracle
- Oracle 表空間管理Oracle
- Oracle undo表空間爆滿的處理方法Oracle
- 【UNDO】Oracle undo表空間使用率過高,因為一個查詢Oracle
- Oracle切換undo表空間操作步驟Oracle
- Oracle基礎 03 回滾表空間 undoOracle
- 如何計算自動管理的UNDO表空間大小
- oracle本地管理的表空間Oracle