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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM