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