ORACLE資料檔案丟失導致資料庫無法啟動的處理過程記錄
ps:這裡只為了登入資料庫,不考慮資料的恢復
在一次使用IMPDP給我虛擬機器上資料庫導資料時候,因為資料量多導致在匯入的過程種虛擬機器有限的磁碟空間被佔滿,為此想到了先把不用的資料檔案刪除了釋放一部分空間讓資料先匯入,然後再處理刪除的資料檔案。
但是事與願違,資料檔案雖然刪除了(rm -rf),磁碟空間並沒有釋放出來,這個問題原因暫還沒找到,那咋辦呢,我想到了我還有歸檔日誌檔案可以刪,歸檔日誌基本佔了我一半的空間。然後同樣rm -rf 刪除歸檔日誌,至此空間釋放出來,匯入繼續。
下面進入正題:
1.重啟資料庫
--連線資料庫(不知道啥原因,直接使用sqlplus不能使用了,應該是環境變量出了點啥情況,這裡我直接切到bin下執行)
sqlplus / as sysdba
SQL> startup ORA-01081: cannot start already-running ORACLE - shut it down first SQL> connect admin/123456 ERROR: ORA-01033: ORACLE initialization or shutdown in progress Process ID: 0 Session ID: 0 Serial number: 0 Warning: You are no longer connected to ORACLE. SQL> shutdown normal ORA-01012: not logged on SQL> shutdowm immediate SP2-0734: unknown command beginning "shutdowm i..." - rest of line ignored. SQL> SHUTDOWN IMMEDIATE ORA-01012: not logged on SQL> startup ORA-01031: insufficient privileges SQL> shutdown immediate ORA-01012: not logged on SQL> exit [oracle@orcl bin]$ ps -ef|grep ora
也算是一波三折,啟動說是在執行,關閉也各種報錯,既然這樣我就考慮直接全關閉了,然後處理ora 01012的問題,再把資料庫關閉
這裡百度找了下01012的處理方式,把smon這個程序kill了再關閉
然後再關閉資料庫,提示資料庫狀態是無效的,說明殺了程序資料庫也隨著關閉了,二話不說直接啟動資料庫
2.將異常的檔案設為offline
SQL> startup ORACLE instance started. Total System Global Area 2421825536 bytes Fixed Size 2215744 bytes Variable Size 1392509120 bytes Database Buffers 1006632960 bytes Redo Buffers 20467712 bytes Database mounted. ORA-01157: cannot identify/lock data file 5 - see DBWR trace file ORA-01110: data file 5: '/data/oracle/oradata/ORCL/datafile/busi_data01.dbf' SQL> alter database datafile 2 offline; Database altered. SQL> alter datebase datafile 5 offline; alter datebase datafile 5 offline * ERROR at line 1: ORA-00940: invalid ALTER command SQL> alter database datafile 5 offline; Database altered.
因為要設的檔案多上面列出部分,其他的就迴圈操作就行(啟動資料庫會去找檔案從而提示某檔案出問題,這裡使用命令 根據檔案號將檔案設為離線 offline,設好更改資料庫狀態為open ,命令:alter database open ,然後根據提示重複 設定檔案離線--設open 直到啟動成功)
3.登入上資料庫後刪除這些表空間,然後再建立,直接刪除可能因還有物件沒刪除導致刪除失敗,這裡加入INCLUDING CONTENTS and DATAFILES
DROP TABLESPACE busi_data INCLUDING CONTENTS and DATAFILES; CREATE TABLESPACE busi_data DATAFILE '/data/oracle/oradata/ORCL/datafile/busi_data01.dbf' SIZE 50M AUTOEXTEND ON NEXT 10 M ;
4.其中包含一個數據庫自帶表空間資料檔案(2號檔案)狀態也還不是ONLINE,這個檔案當時沒有刪除,這裡需要個恢復操作,才能改變其狀態
SQL> ALTER DATABASE DATAFILE 2 online; ALTER DATABASE DATAFILE 2 online * ERROR at line 1: ORA-01113: file 2 needs media recovery ORA-01110: data file 2: '/data/oracle/oradata/ORCL/datafile/o1_mf_sysaux_jmn1kbhq_.dbf' SQL> recover datafile '/data/oracle/oradata/ORCL/datafile/o1_mf_sysaux_jmn1kbhq_.dbf'; ORA-00279: change 3366517 generated at 10/19/2021 19:16:08 needed for thread 1 ORA-00289: suggestion : /disk_sdb/oracles/archive/1_1655_1082840662.dbf ORA-00280: change 3366517 for thread 1 is in sequence #1655 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} ORA-00279: change 3387606 generated at 10/20/2021 09:27:15 needed for thread 1 ORA-00289: suggestion : /disk_sdb/oracles/archive/1_1656_1082840662.dbf ORA-00280: change 3387606 for thread 1 is in sequence #1656 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} Log applied. Media recovery complete. SQL> ALTER DATABASE DATAFILE 2 online; Database altered.
5.至此資料庫可以恢復使用了