UNDOTBS1是一个回滚表空间,它会随着oracle数据库的数据事务运行使用,默认情况下表空间是自动扩展。
但是当它增大到一定程度,占用了过多的磁盘空间时,就会需要进行清理。
本期主题就是【Oracle UNDOTBS1表空间越来越大,解决办法】
步骤一:
查数据库UNDO表空间占用空间情况以及数据文件存放位置;
SQL>select file_name,bytes/1024/1024 from dba_data_files
where tablespace_name like 'UNDOTBS1';
步骤二:
看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)。
SQL> select s.username, u.name from v$transaction t,v$rollstat r,
v$rollname u,v$session s where s.taddr=t.addr and
t.xidusn=r.usn and r.usn=u.usn order by s.username;
步骤三:
检查UNDO Segment状态;
SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
from v$rollstat order by rssize;
步骤四:
创建一个新的回滚段表空间:
SQL> create undo tablespace undotbs02 datafile '/原始路径/undotbs02.dbf' size 500M;
Tablespace created.
步骤五:
将回滚段指向新的表空间:
SQL> alter system set undo_tablespace=undotbs02 scope=spfile;
System altered.
步骤六:
等待原UNDO表空间所有UNDO SEGMENT OFFLINE;
SQL> select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
from v$rollstat order by rssize;
步骤七:
再执行看UNDO表空间所有UNDO SEGMENT ONLINE;
SQL> select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
from v$rollstat order by rssize;
步骤八:
SQL> drop tablespace undotbs1 including contents and datafiles;
Tablespace dropped.
该步骤只能删除数据库对该空间的管理信息,要想完全删除该表空间文件,需要到相应的目录下手动删除;
步骤九:
确认删除是否成功;
SQL> select name from v$tablespace;
步骤十:
结束




