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
 
 更多精彩Oracle內容 請關注我:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM