Oracle UNDOTBS表空间的查看与扩容

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 5000AUTOEXTEND ON NEXT 1000M MAXSIZE 32000M;

6.也可以考虑切换UNDO表空间

方法一

新建undo表空间,switch到新表空间,在把旧的undo表空间删除,具体操作如下:(不关闭数据库的情况下)

create tablespace new_name datafile 'D:APPORADATAORCLEXAMPLE01.DBF' size 2G;

alter system set undo_tablespace=new_name;

等待旧的undo表空间事物全部结束后执行:

alter database datafile 'D:APPSUNMIORADATAORCLUNDOTBS01.DBF' offline;

alter database datafile 'D:APPSUNMIORADATAORCLUNDOTBS01.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;

原文地址:https://www.cnblogs.com/zhm1985/p/13175654.html