問題描述:
客戶的數據庫文件保存在/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