Oracle 不小心刪除undo數據文件以及磁盤空間不足導致不能登錄的解決辦法


  

  在一次測試中,由於導入的數據量過大導致事務一直提交失敗因為磁盤空間不夠用了,一檢查發現是undo表空間不夠用,於是重新創建了一個表空間,准備把之前的undo表空間刪除,刪除時卻發現一直刪不掉,因為它一直在使用,於是關閉數據庫,手動的刪掉。然后重啟數據庫,於是乎各種問題來了

 

  1 使用SYS 賬號登錄時報錯:ORA-09817: Write to audit file failed

  然后在使用df -h命令系統檢查一下,發現Oracle安裝目錄所對應的磁盤空間已滿,於是刪除3天以前的trace文件,然后看到之前的undo表空間對應的數據文件也順便給刪了結果就悲劇了

 

  刪除trace文件之后,可以使用 SYS AS SYSDBA命令登錄到數據庫了,但是啟動數據庫時報錯,在啟動到open階段時報錯,能夠啟動到mount階段。

ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/usr/oracle/app/oradata/orcl/undotbs01.dbf'

 

2 ORA-01157與ORA-01110錯誤

先查看具體的錯誤,登錄到RAM模式,輸入命令: list failure;

 RMAN> list failure 

using target database control file instead of recovery catalog
List of Database Failures
=========================

Failure ID Priority Status Time Detected Summary
---------- -------- --------- ------------- -------
42 HIGH OPEN 24-MAY-17 One or more non-system datafiles are missing

報告顯示數據文件丟失

 

查資料輸入命令以下即可:

alter database datafile 7 offline drop;

但是這樣操作有可能丟失部分數據,慎用

然后shutdown immediate,再startup,數據庫成功啟動。

 

3 刪除undo表空間報錯:ORA_01548

數據庫成功啟動之后,查詢之前的UNDOTBS1還在,於是使用刪除語句

drop tablespace UNDOTBS1 including contents; 報錯

  ORA-01548: active rollback segment '_SYSSMU6_2443381498$', terminated drop tablespace;

  查詢UNDOTBS1處於非offline的segment

select segment_name,tablespace_name,status
from dba_rollback_segs;

 

修改文件/usr/oracle/app/admin/orcl/pfile/init.ora.95201623739(先備份再修改),如下:
undo_management=manual
undo_retention=10800
undo_tablespace=UNDOTBS2
_CORRUPTED_ROLLBACK_SEGMENTS =(_SYSSMU6_2443381498$) -- 此處要將所有處於NEEDS RECOVERY狀態的 segment全部放進來

 

關閉數據庫: shutdown immediate

使用修改后的pfile啟動數據:startup pfile='/usr/oracle/app/admin/orcl/pfile/init.ora.95201623739';

 

然后再刪除UNDOTBS1 ,成功刪除未報之前的錯誤。

 

 


免責聲明!

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



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