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