Oracle的undotbs01.dbf文件太大(占用大量磁盘空间)处理方法 ORA-01654 空间不足 ORA-01653

有一次朝表中插入10万条数据,插入失败,提示空间不足,发现是undotbs01.dbf这个文件太大了。ORA-01654

登录到oracle服务器, 查看磁盘空间命令:df -h ,我这里的结果为 /oradata  使用100%,查看/oradata里面文件,undotbs01.dbf,大小为32G。既然已经定位到问题,想法就是把undotbs01.dbf减小;
1.以dba用户登录oracle,

export ORACLE_SID=DB
sqlplus / as sysdba
2.我的oracle数据目录下就一个undotbs文件,所以基本确认使用的undo空间就是undotbs01,为了保险起见,还是查一下;

show parameter undo_tablespace;
  查询结果为:

name type value
undo_tablespace string undotbs1
3.查看表空间和文件的对应关系

select file_name, tablespace_name, online_status from dba_data_files where tablespace_name='UNDOTBS1';
  查询结果为:

file_name tablespace_name online_status
/oradata/DB/undotbs01.dbf UNDOTBS1 ONLINE
 

4.查询当前回退表空间状态

select tablespace_name, status from dba_rollback_segs;
查询结果为:10条UNDOTBS1,状态全部为ONLINE; 

5.undo_tablespace 是一个必须一直存在的表空间,要想删除当前的,我们必须设置一个临时空间供undo_tablespace 使用;

create undo tablespace UNDOTBS2 datafile '/oradata2/DB/undotbs02.dbf' size 100M;
alter system set undo_tablespace=UNDOTBS2;
6.重新查询当前回退表空间状态

select tablespace_name, status from dba_rollback_segs;
查询结果为:10条UNDOTBS1,状态全部为OFFLINE;10条UNDOTBS2,状态全部为ONLINE;证明回退表空间已经设置到UNDOTBS2;

7.删除回退表空间UNDOTBS1

drop tablespace UNDOTBS1 including contents and datafiles;
 此时已经删除掉了文件,其他教程中说此处不需要重启oracle服务,但是我重新查看磁盘空间,发现文件已经不存在,但是空间是没有释放,因此我对oracle进行了重启;在sqlplus中执行命令:(关闭->启动)

shutdown immediate;
startup;
因为我是将数据文件放在了其他盘符下,作为一个强迫症患者,我还是将回退表空间重新设置回来了;重复以上命令,不再解释

create undo tablespace UNDOTBS1 datafile '/oradata/DB/undotbs1.dbf' size 100M autoextend on maxsize 25G;
alter system set undo_tablespace=UNDOTBS1;
select tablespace_name, status from dba_rollback_segs;
drop tablespace UNDOTBS2 including contents and datafiles;

shutdown immediate;
startup;

posted @ 2020-04-28 14:54  鸾舞春秋  阅读(1070)  评论(0编辑  收藏  举报