缩小Oracle目录下UNDOTBS01.DBF文件的大小

使用sys用户登录Oracle

方法一:重置表空间大小

linux下执行

ALTER DATABASE DATAFILE '/opt/oracle/oradata/res/undotbs01.dbf' RESIZE 100M;

windows下执行ALTER DATABASE DATAFILE 'E:\ORACLE\ORADATA\UNDOTBS01.DBF' RESIZE 100M;

其中 '/opt/oracle/oradata/res/undotbs01.dbf' 为您系统中UNDOTBS01.DBF文件的存储路径;100M为重置后的大小,根据需要修改。

如果方法一无法执行,可使用方法二

方法二:新建UNDO表空间,替换原来的UNDO表空间

1. 创建一个新的小的undo表空间

linux下执行:

create undo tablespace undotbs2 datafile '/opt/oracle/oradata/res/undotbs02.dbf' size 100M reuse autoextend on;//‘/opt/oracle/oradata/res/undotbs02.dbf’为表空间文件想要存储的位置,100M表示新的表空间的初始大小并自动增长。或create undo tablespace undotbs2 datafile '/u01/app/oracle/oradata/orcl/undotbs02.dbf' size 100M reuse autoextend on next 5m maxsize 1024M;//‘/opt/oracle/oradata/res/undotbs02.dbf’为表空间文件想要存储的位置。100M表示新的表空间的初始大小,按5M增加最大到1G。

windows下执行:

CREATE UNDO TABLESPACE UNDOTBS2 DATAFILE 'E:\oradata\UNDOTBS02.DBF' SIZE 100M REUSE AUTOEXTEND ON;

2. 设置新的表空间为系统的Undo表空间

--(1)设置新的表空间为系统undo_tablespace 

alter system set undo_tablespace=undotbs2; 

ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;

--(2)删除旧的Undo表空间  

drop tablespace undotbs1 including contents;

依旧使用sys用户登录,执行

DROP TABLESPACE UNDOTBS01 INCLUDING CONTENTS AND DATAFILES;

3. 重启数据库

可以使用sys用户,从sqlplus登录,执行startup force命令,强制重启

若觉得强制重启不安全的话,可以先shutdown immediate在启动数据库startup

至此,UNDOTBS01.DBF文件缩小完毕,如果想要还原原来的表空间名称,重新执行方法二即可。

方法三:禁止undo tablespace自动增长

alter database datafile '/u01/app/oracle/oradata/orcl/undotbs01.dbf' autoextend off;alter database datafile 'D:\app\Administrator\oradata\undotbs01.dbf' autoextend off;