Oracle UNDO表空間的管理

UNDO表空間的管理是Oracle DBA最重要的日常工作之一,UNDO表空間用來暫時存儲DML操作的數據,其主要作用有:

1、事務回滾

2、實例恢復

3、讀一致性

4、閃回

下面是對UNDO表空間的一些操作

1、查看某個實例都有哪些表空間:select tablespace_name, contents from dba_tablespaces where contents = 'UNDO';

163?method=get-resource&shareToken=66A60

我們也可以用show parameter undo_tablespace名稱查看,此命令只能查看當前默認UNDO表空間:

164?method=get-resource&shareToken=66A60

當然,我們也可以查看錶空間及其對應的數據文件:select substr(file_name,1,60) UNDO_FILES from dba_data_files where tablespace_name = 'UNDOTBS1' order by 1;

165?method=get-resource&shareToken=66A60

查看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';

166?method=get-resource&shareToken=66A60

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;

167?method=get-resource&shareToken=66A60

這還不算完,在數據庫中刪除表空間後,其數據文件還在物理磁盤上存在,需要刪除:

168?method=get-resource&shareToken=66A60

5、我們可以通過dba_undo_extents查看UNDO表空間的狀態:

169?method=get-resource&shareToken=66A60

其中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;

171?method=get-resource&shareToken=66A60

上面各列中:

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


更多精彩Oracle內容 請關注我:

api.php?bg=ffffff&fg=000000&gc=000000&el

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章