在一次測試中,由於導入的數據量過大導致事務一直提交失敗因為磁盤空間不夠用了,一檢查發現是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 ,成功刪除未報之前的錯誤。