1.查看UNDO表空間使用情況
select tablespace_name,
round(sum(decode(status, 'ACTIVE', bytes, 'UNEXPIRED', bytes, 0)) * 100 /
sum(bytes),
2) || '%' "used %"
from DBA_UNDO_EXTENTS
group by tablespace_name
order by 1;

V$ROLLSTAT
只有在 automatic undo management mode 模式下有效,包含回滾段的一些行為。
V$UNDOSTAT
這個視圖只在 automatic undo management mode 模式下才有意義。包含監控和調試 UNDO 表空間的信息,通過這個視圖可以估計現有數據庫所需的 UNDO 表空間的大小。
2.查看回滾段信息
select rownum,sys.dba_rollback_segs.segment_name Name,v$rollstat.extents Extents,
v$rollstat.rssize Size_in_Bytes,v$rollstat.xacts XActs,
v$rollstat.gets Gets,v$rollstat.waits Waits,v$rollstat.writes Writes,sys.dba_rollback_segs.status status
from v$rollstat,sys.dba_rollback_segs,v$rollname
where v$rollname.name(+) = sys.dba_rollback_segs.segment_name and v$rollstat.usn(+) = v$rollname.usn
order by rownum;

3.查看表空間數據文件所在位置
select file_name,tablespace_name from dba_data_files where tablespace_name = 'UNDOTBS1';

檢查數據庫的undo表空間是否自動擴展
select FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE,STATUS,MAXBYTES,USER_BYTES from dba_data_files where tablespace_name like '%UNDO%';

4.修改UNDO表空間數據文件大小
alter database datafile '/oradata/datafile/UNDOTBS01.DBF' resize 300M;
alter database datafile '/oradata/datafile/UNDOTBS01.DBF' AUTOEXTEND ON NEXT 100M MAXSIZE 1000M;
5.UNDO表空間添加數據文件
SQL> alter tablespace UNDOTBS1 add datafile '/oradata/datafile/undotbs1_02.dbf' size 32000M;
Tablespace altered.
如果是自動擴展改成
SQL> alter tablespace UNDOTBS1 add datafile '/oradata/datafile/undotbs1_02.dbf' SIZE 5000M AUTOEXTEND ON NEXT 1000M MAXSIZE 32000M;
6.也可以考慮切換UNDO表空間
方法一
新建undo表空間,switch到新表空間,在把舊的undo表空間刪除,具體操作如下:(不關閉數據庫的情況下)
create tablespace new_name datafile 'D:\APP\ORADATA\ORCL\EXAMPLE01.DBF' size 2G;
alter system set undo_tablespace=new_name;
等待舊的undo表空間事物全部結束后執行:
alter database datafile 'D:\APP\SUNMI\ORADATA\ORCL\UNDOTBS01.DBF' offline;
alter database datafile 'D:\APP\SUNMI\ORADATA\ORCL\UNDOTBS01.DBF' offline drop ;
方法二
把數據庫先mount起來,在把undo表空間刪除,重新建立,在打開數據庫就可以了(關閉數據庫的情況)
7.undo_retention設置以及優化(默認900秒)

針對自動拓展的undo表空間設置undo_retention是有效的,在undo_retention的范圍內,undo表空間中的數據將盡量不被重新覆蓋,僅僅是盡量,不是完全。但是打開了自動拓展之后,有可能在undo_retention時間段內擴展到很大,造成隱患。
針對沒有開自動拓展的undo表空間,設置了undo_retention之后,在oracle 10g之后會忽略掉該設置,而是根據undo表空間的大小和使用率來自動調整undo信息的保留時間。
ALTER SYSTEM SET undo_retention=10800 SCOPE=BOTH;
