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名稱檢視,此指令隻能檢視目前預設UNDO表空間:
當然,我們也可以檢視表空間及其對應的資料檔案:select substr(file_name,1,60) UNDO_FILES from dba_data_files where tablespace_name = 'UNDOTBS1' order by 1;
檢視UNDO表空間的大小、可用空間:
select * from (select
a.tablespace_name,
sum(a.bytes)/(1024*1024) total_space_MB,
round(b.free,2) Free_space_MB,
round(b.free/(sum(a.bytes)/(1024*1024))* 100,2) percent_free
from dba_data_files a,
(select tablespace_name,sum(bytes)/(1024*1024) free from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name(+)
group by a.tablespace_name,b.free)
where tablespace_name = 'UNDOTBS1';
2、建立UNDO表空間:
create undo tablespace undotbs3 datafile '/data1/oradata/undotbs03_1.dbf' size 100M autoextend on next 20M maxsize 500M;
上面指令中,指定UNDO表空間名稱、對應資料檔案、初始大小、自動擴充、每次擴充大小、最大擴充到多大
給UNDO表空間增加資料檔案:
ALTER TABLESPACE UNDOTBS3 ADD DATAFILE ''/data1/oradata/undotbs03_2.dbf' SIZE 1024M AUTOEXTEND ON NEXT 100M MAXSIZE 2048M;
3、切換預設UNDO表空間:
alter system set undo_tablespace = UNDOTBS3;
4、删除不用的UNDO表空間:
首先查找都有哪些UNDO表空間及其名字;
然後查找預設UNDO表空間;
之後查找要删除的UNDO表空間的資料檔案;
删除不用的UNDO表空間:drop tablespace UNDOTBS2;
這還不算完,在資料庫中删除表空間後,其資料檔案還在實體磁盤上存在,需要删除:
5、我們可以通過dba_undo_extents檢視UNDO表空間的狀态:
其中STATUS的狀态有三個:UNEXPIRED、EXPIRED、ACTIVE
ACTIVE說明此時有大量的DML操作在寫UNDO,UNEXPIRED狀态是由ACTIVE狀态的資料轉換過來的,至于UNEXPIRED狀态何時轉換成EXPIRED,這個由目前系統的undo retention決定。
我們也可以通過v$UNDOSTAT來檢視詳細的UNDO資訊:
SELECT TO_CHAR(BEGIN_TIME, 'MM/DD/YYYY HH24:MI:SS') BEGIN_TIME,TO_CHAR(END_TIME, 'MM/DD/YYYY HH24:MI:SS') ND_TIME,
UNDOTSN, UNDOBLKS, TXNCOUNT, MAXCONCURRENCY AS "MAXCON" FROM v$UNDOSTAT WHERE rownum <= 100;
上面各列中:
BEGIN_TIME表示每條記錄UNDO事務開始的時間
END_TIMEE表示每條記錄UNDO事務結束的時間
上面每條記錄的間隔是10分鐘
UNDOTSN 在這段時間undo事務的數量
UNDOBLKS在這段時間占用的undo塊的數量
TXNCOUNT事務的總數量
MAXCON這些UNDO事務過程中的最大資料庫連接配接數
6、更改UNDO RETENTION
alter system set UNDO_RETENTION = 1800;
7、涉及到UNDO表空間的系統表:
V$UNDOSTAT
V$ROLLSTAT
V$TRANSACTION
DBA_UNDO_EXTENTS
WRH$_UNDOSTAT
WRH$_ROLLSTAT
