天天看點

Oracle UNDO表空間的管理 Oracle UNDO表空間的管理

Oracle UNDO表空間的管理

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

1、事務復原

2、執行個體恢複

3、讀一緻性

4、閃回

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

1、檢視某個執行個體都有哪些表空間:select tablespace_name, contents from dba_tablespaces where contents = 'UNDO';

Oracle UNDO表空間的管理 Oracle UNDO表空間的管理

我們也可以用show parameter undo_tablespace名稱檢視,此指令隻能檢視目前預設UNDO表空間:

Oracle UNDO表空間的管理 Oracle UNDO表空間的管理

當然,我們也可以檢視表空間及其對應的資料檔案:select substr(file_name,1,60) UNDO_FILES from dba_data_files where tablespace_name = 'UNDOTBS1' order by 1;

Oracle UNDO表空間的管理 Oracle UNDO表空間的管理

檢視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';

Oracle UNDO表空間的管理 Oracle UNDO表空間的管理

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;

Oracle UNDO表空間的管理 Oracle UNDO表空間的管理

這還不算完,在資料庫中删除表空間後,其資料檔案還在實體磁盤上存在,需要删除:

Oracle UNDO表空間的管理 Oracle UNDO表空間的管理

5、我們可以通過dba_undo_extents檢視UNDO表空間的狀态:

Oracle UNDO表空間的管理 Oracle 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;

Oracle UNDO表空間的管理 Oracle UNDO表空間的管理

上面各列中:

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 UNDO表空間的管理 Oracle UNDO表空間的管理
Oracle UNDO表空間的管理 Oracle UNDO表空間的管理
Oracle UNDO表空間的管理 Oracle UNDO表空間的管理
Oracle UNDO表空間的管理 Oracle UNDO表空間的管理
Oracle UNDO表空間的管理 Oracle UNDO表空間的管理
Oracle UNDO表空間的管理 Oracle UNDO表空間的管理
Oracle UNDO表空間的管理 Oracle UNDO表空間的管理
Oracle UNDO表空間的管理 Oracle UNDO表空間的管理