一、引數檔案
1、作業系統檔案復制
如果使用作業系統命令復制過引數檔案,還原只要復制回去就行,
2、備份集恢復
rman恢復需要啟動實體,SQL*PLUS在沒有引數檔案的情況下不能打開,但是rman可以在沒有引數檔案的情況下,通過內置的引數打開,
RMAN> startup nomount;
手動備份恢復
RMAN> restore spfile from '/xxx/xxx/xxxx/xxxx';
如果使用了快速恢復區,自動備份,可以使用以下命令
RMAN> restore spfile from autobackup db_name=orcl db_recovery_file_dest='/xxx/xxxx/';
如果沒有使用快速恢復區,控制檔案保存在dbs目錄下,可以通過指定DBID
RMAN> set dbid 1112231231231;
RMAN> restore spfile from autobackup;
啟動實體
SQL> startup force;
3、實體沒有關閉的情況下恢復
先從自動備份中獲取spfile到臨時目錄,然后通過作業系統命令進行替換,
RMAN> restore spfile to '/home/oracle/spfileorcl.ora' from autobackup;
$ cp /home/oracle/spfileorcl.ora $ORACLE_HOME/dbs
二、控制檔案
資料庫訪問控制檔案,讀取引數檔案中配置的第一個控制檔案,寫所有的控制檔案,所以,第一個控制檔案出問題,讀寫操作都會出問題,其他控制檔案出問題,只有寫操作才會出錯,
資料庫啟動時候,控制檔案損壞,會報ORA-00205(識別控制檔案有誤)或者ORA-00227(控制檔案存在壞塊),
實體open,控制檔案損壞,但是不能保證所有功能正常,直到CKPT發起檢查點的時候,實體最終被強制關閉,遇到這種情況,立刻提交所有操作commit,然后等實體自動關倍訓者shutdown abort,
建議開啟自動備份,在資料庫物理結構發生變化的時候都會自動備份,
RMAN> configure controlfile autobackup on;
控制檔案恢復的時候,雖然可以通過start nomount命令啟動,但是建議以startup命令,使資料庫產生更多有價值的資訊,
1、在線副本
控制檔案存在多個副本,存在沒有損壞的副本,首先對所有的檔案通過作業系統檔案復制保持,
將損壞的檔案替換成完好的檔案,啟動資料庫,
2、結構備份,資料庫結構相同,但是檢查點和SCN等資訊比較舊,這里就是開啟了控制檔案自動備份,
資料庫到nomount狀態
RMAN> resotre controlfile from autobackup;
RMNA> mount database;
RMAN> recover database;
RMAN> alter database open resetlogs;
3、歷史備份,所有的資訊都不一致
(1)備份了控制檔案后,創建了添加了表空間,添加日志組,洗掉日志組,
這種recover可以自動修復,
RMAN> resotre controlfile from '/xxx/xxx';
RMAN> mount database;
RMAN> recover database;
RMAN> alter database open resetlogs;
(2)備份控制檔案后,洗掉表空間
RMAN> resotre controlfile from '/xxx/xxx';
RMAN> mount database;
SQL> alter database datafile 6 offline; #將洗掉表空間的檔案都下線
SQL> recover database using backup controlfile; #輸入AUTO
可能再次報錯,提示沒有歸檔日志,其實是某個還沒來得及歸檔的在線日志,通過查詢可以得知是某個在線日志,再次執行命令
SQL> recover database using backup controlfile; #輸入查詢出來的在線日志路徑
或者使用跳過表空間的方式
RMAN> recover database skip tablespace examples;
RMAN> alter database open resetlogs;
4、缺失歸檔日志
確認問題只和控制檔案相關,如果資料檔案損壞就需要不完全恢復,
恢復控制檔案,加載到mount狀態后
RMAN> recover database;
報錯,顯示找不到歸檔,
SQL> alter database backup controlfile to trace;
SQL> select value from v$diag_info where name='Default Trace File';
SQL> startup force nomount;
在追蹤檔案中找到NORESETLOGS的創建陳述句,并執行后,資料庫已經到mount狀態,
RMAN> recover database;
再次報錯,提示找不到歸檔日志,但是此時的歸檔日志和上面不一樣,這是因為恢復只查找歸檔日志,無視了在線日志,
SQL> recover database using backup contrilfile; #輸入在線日志路徑
SQL> alter database open resetlogs;
SQL> alter tablespace temp add tempfile '/xxx/xxx/xxx/xx.dbf' reuse;
三、資料檔案
1、關鍵資料檔案損壞(system表空間和撤銷表空間),一定是在mount狀態下恢復,
如果實體沒有崩潰使,則先關閉
SQL> shutdown abort;
關鍵資料檔案損壞可能登陸不了資料庫,需要手動關閉行程,
kill -9 `ps aux |grep ora_smon_orcl |grep -v grep | wak '{pring $2}'`
恢復system資料檔案
run{
startup mount;
restore datafile 1;
recover database;
alter database open;
}
2、普通資料檔案損壞,可以在open狀態下恢復
除了system表空間、undo_tablespace表空間、臨時表空間和只讀表空間,屬于普通資料檔案,損壞后最多導致用戶資料不可訪問,不會導致資料庫例外,
啟動時候發現普通資料檔案不存在或者頭部損壞,可以先讓該檔案下線,資料庫能正常啟動,
SQL> alter database datafile 5 offline;
SQL> alter database open;
如果資料庫運行的時資料庫檔案頭損壞,發生檢查點的時候會強制將這個檔案下線,此時重啟能正常重啟,
(1)如果資料檔案沒有強制下線
可以關閉實體進行恢復
run{
shutdown abort;
startup mount;
restore datafile ''/xxx/xxxx/dd.dbf;
recover database;
alter database open;
}
也可以在實體啟動的時候進行恢復
run{
sql 'alter database datafile 5 offline';
restore datafile 5;
recover datafile 5;
sql 'alter database datafile 5 online'
}
如果實體已經關閉,提高資料庫可用性的情況下,先啟動資料庫實體
run{
startup mount;
sql 'alter database datafile 5 offline';
alter database open;
restore datafile 5;
recover datafile 5;
sql 'alter database datafile 5 online';
}
(2)資料檔案被強制下線
資料檔案的頭部損壞后,檢查點要強制將檔案下線,恢復這個檔案的時候會報錯,
采用啟動實體到mount,然后使資料檔案在線,然后恢復的方式,
run{
shutdown abort;
startup mount;
sql 'alter database datafile 5 online';
resotre datafile 5;
recover database;
alter database open;
}
(推薦)洗掉資料檔案,在資料庫open的狀態下恢復,
rm -rf /eee/ddd/xxx.dbf
run{
sql 'alter database datafile 5 offline';
restore datafile 5;
recover datafile 5;
sql 'alter database datafile 5 online';
}
3、只讀資料檔案
只讀檔案損壞后,檢查點不會對只讀檔案進行操作,實體不會崩潰,也不會強制下線,
和普通檔案恢復的區別:只讀狀態不變的情況下,不需要recover,在修改只讀狀態的情況下,可能需要兩次recover,
在只讀表空間備份了控制和資料檔案,后來改為讀寫,資料檔案和控制檔案損壞了,沒有最新的備份,重啟資料庫到nomount狀態
從備份中還原控制檔案,這時候控制檔案記錄的表空間為只讀,
啟動到mount,還原資料檔案,
第一次recover database恢復了控制檔案,但是此時表空間記錄為只讀,所以忽略了,
第二次recover database通過最新的控制檔案恢復表空間,
四、不完全資料庫恢復
歸檔或者active的在線日志、current的在線日志丟失或者損壞,
認為操作錯誤想要回退到某個時間點,
恢復到指定的日志
run{
startu force mount;
set until sequence 100;
restore database;
recover database;
alter database open resetlogs;
}
到指定時間
set until time "sysdate-interval '10' minute";
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/256865.html
標籤:其他
