问题描述:
客户的数据库文件保存在/u02磁盘分区下,整个分区的大小是2G,但只剩余30M空间。这样很有可能导致数据库无法正常运行。
解决方法:
经查明,其中一个数据库文件UNDOTBS01.dbf大小是18G,这个文件里包含了回滚段的数据,解决办法就是缩小这个文件的大小。
Step1 :查询这个表空间里的回滚段有哪些。
select owner,segment_name,tablespace_name, status from dba_rollback_segs
Step2:在另外一个磁盘分区上创建一个回滚数据库。
CREATE UNDO TABLESPACE "UNDOTBS2" DATAFILE
'/o01/oradata/orcl920/undotbs01.dbf' SIZE 500M REUSE AUTOEXTEND OFF;
(附:DROP TABLESPACE UNDOTBS INCLUDING CONTENTS and datafiles;)
Step3: 编辑init.ora文件,末尾加入下面的内容。
undo_tablespace=UNDOTBS2
_OFFLINE_ROLLBACK_SEGMENTS=("_SYSSMU16$", "_SYSSMU17$", "_SYSSMU18$","_SYSSMU19$", "_SYSSMU20$", "_SYSSMU21$", "_SYSSMU22$","_SYSSMU23$","_SYSSMU24$","_SYSSMU25$")
_CORRUPTED_ROLLBACK_SEGMENTS=("_SYSSMU16$", "_SYSSMU17$", "_SYSSMU18$","_SYSSMU19$", "_SYSSMU20$", "_SYSSMU21$", "_SYSSMU22$","_SYSSMU23$","_SYSSMU24$","_SYSSMU25$")
Step4: 关闭数据库。
shutdown immediate
Step5: 用配置文件启动数据库。
startup pfile=/u01/app/oracle/admin/hello/pfile/init.ora.39200721655
Step6: 删除大表空间里的回滚段。
DROP ROLLBACK SEGMENT "_SYSSMU16$";
DROP ROLLBACK SEGMENT "_SYSSMU17$";
DROP ROLLBACK SEGMENT "_SYSSMU18$";
DROP ROLLBACK SEGMENT "_SYSSMU19$";
DROP ROLLBACK SEGMENT "_SYSSMU20$";
DROP ROLLBACK SEGMENT "_SYSSMU21$";
DROP ROLLBACK SEGMENT "_SYSSMU22$";
DROP ROLLBACK SEGMENT "_SYSSMU23$";
DROP ROLLBACK SEGMENT "_SYSSMU24$";
DROP ROLLBACK SEGMENT "_SYSSMU25$";
Step7: 缩小表空间的大小。
ALTER DATABASE DATAFILE '/u02/oradata/hello/undotbs01.dbf' RESIZE 1000M;
Step8: 控制表空间的最大容量。
ALTER DATABASE
DATAFILE '/u02/oradata/hello/undotbs01.dbf '
AUTOEXTEND
ON NEXT 1000M MAXSIZE 5000M