本文講解了用戶如何自定義的數據庫修復。
一、自動應用重做日志
1、 利用SET AUTORECOVERY命令自動應用重做日志,完成對數據文件的修復操作。
SQL>STARTUP MOUNT:啟動實例並加載數據庫。
SQL>SET AUTORECOVERY ON:啟用重做日志自動應用功能。
SQL>RECOVER DATABASE:恢復指定表空間、數據文件或整個數據庫。
SQL>ALTER DATABASE OPEN:完成恢復後打開數據庫。
2、 利用RECOVERY AUTOMATIC命令自動應用重做日志,完成對數據文件的修復操作。
SQL>STARTUP MOUNT:啟動實例並加載數據庫。
SQL>RECOVER AUTOMATIC DATABASE。
SQL>ALTER DATABASE OPEN:完成恢復後打開數據庫。
二、 不歸檔模式下的數據庫介質恢復
1、 將數據庫恢復到原來的位置上。
SQL>SHUTDOWN IMMEDIATE 如果數據庫仍然處於打開狀態,關閉數據庫;將數據庫文件恢復到原來的位置上,利用最近一次建立的一致性完全備份對整個數據庫進行恢復,必須對所有的數據文件與控制文件進行修復。
SQL>RECOVER DATABASE UNTIL CANCEL
SQL>CANCEL
SQL>ALTER DATABASE OPEN RESETLOGS;
將當前重做日志順序號設置為1。
2、 將數據庫恢復到新的位置上。
SQL>SHUTDOWN IMMEDIATE:如果數據庫仍然處於打開狀態,關閉數據庫;將數據庫文件恢復到新的位置上,利用最近一次建立的一致性完全備份對整個數據庫進行恢復,必須對所有的數據文件與控制文件進行修復;對初始化參數文件中的CONTROL_FILES參數進行編輯,使它執行保存在新位置中修復後的控制文件。
SQL>STARTUP MOUNT:如果修復後的數據庫文件處於新的位置,必須利用ALTER DATABASE RENAME FILE語句對控制文件進行修改,使它指向新位置中修復後的數據文件。如:
SQL>ALTER DATABASE RENAME FILE
‘I: ora9ioradatasystem01.dbf’ TO ‘K: Oracleoradatasystem01.dbf’;
SQL>RECOVER DATABASE UNTIL CANCEL
SQL>CANCEL
SQL>ALTER DATABASE OPEN RESETLOGS;
將當前重做日志順序號設置為1。
三、 歸檔模式下的完全介質恢復
1、 關閉狀態下的完全恢復。
SQL>SHUTDOWN ABORT(如果數據庫處於打開狀態,將它強行關閉):將數據文件恢復到原來的位置上,如果介質故障無法排除,需要將數據文件恢復到其它位置上;利用備份修復丟失或損壞的數據文件,也可利用ALTER DATABASE CREATE DATAFILE 語句重建一個空白的數據文件替換對視或損壞的數據文件。
SQL>STARTUP MOUNT:如果修復後的數據文件不在原來的位置上,需要使用ALTER DATABASE RENAME FILE …TO …語句在控制文件中更新它們的信息。
SQL>SELECT name,status FROM V$DATAFILE;
查詢數據文件的名稱和狀態。
SQL>ALTER DATABASE DATAFILE … ONLINE;
將脫機數據文件改未聯機。
SQL>RECOVER DATABASE
或 SQL>RECOVER TABLESPACE users
或 SQL>RECOVER DATAFILE ‘I: ora9ioradatausers0.dbf;
SQL>ALTER DATABASE OPEN;
2、 打開狀態下的完全介質恢復。
SQL>SELECT d.file# f#,d.name,d.status,
h.status from v$datafile d,v$datafile_header h
WHERE d.file#=h.file#;
查詢哪些數據文件被自動設置為脫機狀態;
SQL>ALTER TABLESPACE users OFFLINE TEMPORARY;
將包含損壞數據文件的表空間設置為脫機狀態;將數據文件恢復到原來的位置上,如果介質故障無法排除,需要將數據文件恢復到其它位置上;利用備份修復丟失或損壞的數據文件;如果修復後的數據文件不在原來的位置上,需要使用ALTER DATABASE RENAME FILE …TO …語句在控制文件中更新它們的信息。
SQL>RECOVER TABLESPACE users AUTOMATIC
對包含損壞數據文件的脫機表空間進行恢復;
SQL>ALTER TABLESPACE users ONLINE;
四、 歸檔模式下的不完全介質恢復
1、 不完全恢復的操作准則:
在恢復前後都對數據庫進行完全備份。
完成不完全介質恢復後,檢查數據庫是否已經恢復到了目標時刻下的狀態。
完成不完全介質恢復後,將歸檔重做日志文件移動到其它位置保存。
2、 基於時間的不完全恢復:
對數據庫進行一次完全備份,包括控制文件和所有的聯機重做日志文件。
SQL>SHUTDOWN ABORT:確定不完全介質恢復的目標時間,即你需要將數據庫恢復到哪個時刻下的狀態,然後確定需要使用哪些備份來對數據進行修復,數據庫修復所使用的控制文件備份應當能夠正確反映出目標時刻下數據庫的物理結構,所使用的數據文件備份應當是在目標時刻之前創建的,而且必須修復所有的數據文件,如果沒有在目標時刻之前建立的數據文件備份,需要重新創建空白的數據文件。
如果在數據庫中包含在目標時刻之後建立的數據文件,不要對這個數據文件進行修復,因為在完成不完全恢復後的數據庫中根本不應當存在這個數據文件;將數據文件恢復到原來的位置上,如果介質故障無法排除,則恢復到其它位置上;利用選定的備份文件修復所有的控制文件和數據文件。
SQL>STARTUP MOUNT 啟動實例並加載數據庫;如果修復後的數據文件不在它們原來的位置上,需使用ALTER DATABASE RENAME FILE … TO …語句在控制文件中更新它們的信息。
SQL>SELECT name,status FROM V$DATAFILE;
確定所有數據文件都處於聯機
SQL>ALTER DATABASE DATAFILE … ONLINE;
將數據文件恢復為聯機;
SQL>RECOVER DATABASE UNTIL TIME ‘2004-02-01:12:30:30’
如果控制文件是利用備份修復的,
必須在RECOVER名利中指定USING BACKUP CONTROLFILE子句;
SQL>ALTER DATABASE OPEN RESETLOGS;
立即對數據庫進行一次完全備份。
3、 基於撤銷的不完全恢復。
SQL>RECOVER DATABASE UNTIL CANCEL:其它步驟同基於時間的不完全恢復。
4、 基於SCN的不完全恢復。
在進行基於SCN的不完全恢復時,Oracle會在應用了所有具有小於等於指定SCN的事務的重做記錄之後終止恢復過程。
RESETLOGS選項在如下三種情況下,必須使用RESETLOGS選項打開數據庫:
1、 在執行任何類型的不完全介質恢復之後;
2、 在使用備份修復控制文件後(在RECOVER命令中使用USING BACKUP CONTROLFILE子句);
在沒有聯機重做日志文件備份的情況下對不歸檔數據庫進行完全恢復之後。