Oracle UNDOTBS01.dbf 占用空间过大解决

Posted 巍巍之道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle UNDOTBS01.dbf 占用空间过大解决相关的知识,希望对你有一定的参考价值。

在无法使用第一种方法压缩占用空间的情况下,可以使用本方法。

 

UNDOTBS01.dbf是oracle系统undo_tablespace使用的,其作用为:
回退事务、读一致性、事务恢复、倒叙查询(FlashBack Query)

 

1、先查看在使用UNDOTBS01.dbf的undo_tablespace表名:

使用sqlplus连接数据库,输入命令

show parameter undo;


2、建立一张新的undo_tablespace:

create undo tablespace undotbs02 datafile \'D:\\Oracle\\oradata\\orcl\\UNDOTBS02.dbf\' size 100m autoextend on next 100m;
--注意:Linux下的目录分隔符要使用正斜杠“/”


3、将系统undo_tablespace指向新的表空间:

alter system set undo_tablespace=undotbs02;


4、删除原来的表空间及数据文件:

drop tablespace undotbs1 including contents and datafiles;


若要禁止undo_tablespace自动增长

alter database datafile \'D:\\Oracle\\oradata\\orcl\\UNDOTBS02.dbf\' autoextend off;

Oracle查看表占用空间

Oracle查看表占用空间

查看表空间对应日志文件

select
  tablespace_name, file_id, file_name,
  round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;

查看表空间总大小、使用率、剩余空间

select
  a.tablespace_name, total, free, total-free as used, substr(free/total * 100, 1, 5) as "FREE%", substr((total - free)/total * 100, 1, 5) as "USED%"
from
  (select tablespace_name, sum(bytes)/1024/1024 as total from dba_data_files group by tablespace_name) a,
  (select tablespace_name, sum(bytes)/1024/1024 as free from dba_free_space group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
order by a.tablespace_name;

查看具体表的占用空间大小

select * from (
  select t.tablespace_name,t.owner, t.segment_name, t.segment_type, sum(t.bytes / 1024 / 1024) mb
  from dba_segments t
  where t.segment_type='TABLE'
  group by t.tablespace_name,t.OWNER, t.segment_name, t.segment_type
) t
order by t.mb desc;

以上是关于Oracle UNDOTBS01.dbf 占用空间过大解决的主要内容,如果未能解决你的问题,请参考以下文章

undo表空间丢失损坏

oracle undo表空间被删除,数据库无法启动,请问如何恢复

Linux系统Oracle Temp01.dbf不断变大应该这样解决

转 关于oracle 分区表 表空间以及索引的总结

oracle 临时表空间 占用磁盘空间

oracle system01.dbf表空间满了,导致用户没法登入怎么办