幾種oracle數據庫恢復的練習示例

作爲一個dba,最重要的工作莫過於保證數據庫中數據的安全,當一個數據庫down掉之後,恢復舊變成了至關重要的事情。能否成功的恢復,並不在於數據庫down掉時採取的恢復策略,要保證數據的萬無一失,一套完整的備份方案是必須的。但作爲dba,還應該瞭解和掌握各種情況下應該採取哪些恢復措施,並且清楚的指導每一種恢復方式的會產生什麼樣的結果。以下是幾種常用的的備份和恢復方式的具體示例,是入門的dba必須掌握的。

    實例1:歸檔的數據庫,完整的數據庫全庫備份,完整的歸檔備份,此時數據庫down掉,只留下控制文件和日誌文件可用。
1:安全關閉當前數據庫。(確保當前數據庫處於歸檔模式下)。
2:copy所有的數據文件,日誌文件和控制文件到一個目錄下。
3:打開數據庫,建新用戶user1
create user user1 identified by aaaaaa;
grant dba to user1;
connect user1/aaaaaa;
4:在user1 下建表T1,向T1中插入10000條數據。
Begin
For I in 1..100000 loop
Insert into t1 values(i);
End loop;
Commit;
End;
/
5:切換幾次日誌,使所有日誌都已經歸檔。
Alter system switch log file;
6:正常關閉數據庫。Shutdown immediate;
7:恢復:
把當前數據庫所有文件移動到一個臨時文件夾裏,模擬數據庫損壞。
8:COPY最初複製的數據庫的所有文件,但控制文件和日誌文件要使用目前數據庫的。
9:啓動數據庫 startup
mount 後會提示SYSTEM表空間需要恢復。並給出恢復使用的歸檔日誌文檔。
確定歸檔日誌位置正確後,輸入auto.
ORACLE將一個一個的應用歸檔文檔。直至提示完全恢復成功。
10:打開數據庫 alter database open;
11:查看user1用戶及t1表中是否有剛纔插入的10000條記錄。
至此,整個使用歸檔日誌對完整的數據庫冷備份進行完全恢復的模擬成功完成。
實例2:上面的例子,並且在線日誌online redo也丟失,在這種情況下,只能做不完全恢復。前8步同上。
9:startup mount;
10:步完全恢復:
recover database until cance;
o mount 後會提示SYSTEM表空間需要恢復。並給出恢復使用的歸檔日誌文檔。
確定歸檔日誌位置正確後,回車,一個個應用歸檔日誌,直至最後提示的歸檔日誌用完後下一個歸檔日誌時輸入cancel.
Oracle 提示:
Log applied. ORA-00279: change 84852341 generated at 09/24/2003 12:16:41 needed for thread 1 ORA-00289: suggestion : D:/ORACLE/ORADATA/SAMPLE/ARCHIVE/TESTT001S01349.ARC ORA-00280: change 84852341 for thread 1 is in sequence #1349 ORA-00278: log file 'D:/ORACLE/ORADATA/SAMPLE/ARCHIVE/TESTT001S01348.ARC' no lon recovery Specify log: {<RET>=suggested | filename | AUTO | CANCEL} cancel Media recovery cancelled.
這是需要resetlogs參數打開數據庫。
Alter database open resetlogs;

實例3:上面的例子也可以做基於時間的不完全恢復,但時間必須是數據已經保留在歸檔日誌中的時間及以前。
9:startup mount;
10:基於時間點的不完全恢復:
recover database until time ‘2003-9-24 12:20’; SVRMGR> recover database until time '2003-9-24 11:20'; ORA-00279: ?? 84851370 (? 09/24/2003 11:16:01 ??) ???? 1 ???? ORA-00289: ??: D:/ORACLE/ORADATA/SAMPLE/ARCHIVE/TESTT001S01324.ARC ORA-00280: ?? 84851370 ???? 1 ???? # 1324 ??? 指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}
應用的記錄。
SVRMGR> alter database open resetlogs;
1
 實例4:歸檔模式下單個數據文件丟失或損壞,從冷備份中恢復的模擬練習
1:已經做了冷備份。
2:abort方式關掉前的數據庫,模擬由於數據文件丟失造成數據庫非正常關閉。
3:從冷備份當中copy丟失的數據文件。
4:startup mount;
5:只對這個文件進行恢復。
Recover datafile 'D:/ORACLE/ORADATA/SAMPLE/DR01.DBF';
ORA-00279: 更改 84851719 (在 09/24/2003 12:15:51 生成) 對於線程 1 是必需的
ORA-00289: 建議: D:/ORACLE/ORADATA/SAMPLE/ARCHIVE/TESTT001S01330.ARC
ORA-00280: 更改 84851719 對於線程 1 是按序列 # 1330 進行的
ORA-00278: 此恢復不再需要日誌文件 'D:/ORACLE/ORADATA/SAMPLE/ARCHIVE/TESTT001S01329.ARC'
指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}
auto 指定爲自動恢復。
應用的記錄。

直至完成。
ORA-00278: 此恢復不再需要日誌文件 'D:/ORACLE/ORADATA/SAMPLE/ARCHIVE/TESTT001S01343.ARC'
應用的記錄。
完成介質的恢復。
6:打開數據庫
alter database open;

另一種方法:
1:startup mount;
2:alter database datafile 'D:/ORACLE/ORADATA/SAMPLE/DR01.DBF' offline;
3:alter database open;
4:recover datafile 'D:/ORACLE/ORADATA/SAMPLE/DR01.DBF';;
5:alter database datafile 'D:/ORACLE/ORADATA/SAMPLE/DR01.DBF' online;
1
實例4:歸檔模式下熱備份的恢復模擬練習
1:對某個表空間進行熱備份.
Ater tablespace user begin backup
2:在os下把USER表空間對應的文件複製到備份的目錄下。
3:結束熱備。
Alter tablespace user end backup.
4:shutdown abort;
5:刪除該表空間的數據文件。
6:startup;
7:提示文件不存在。
8:還原熱備的文件,令該文件脫機。
Alter database datafile ‘88888888’ offline;
9:打開數據庫。
10:恢復該文件。
Recover databfile ‘88888888’;
11:alter database datafile online.

也可以對所有的表空間進行熱備,刪除數據庫所有文件,還原熱備文件。利用歸檔日誌進行恢復,方法同上。
注:一定要保留熱備之後的所有歸檔日誌,聯機日誌和控制文件,如果聯機日誌丟失(指狀態爲active或者current的日誌文件),只能進行不完全恢復。方法是按照提示輸入日誌文件,知道最後一個沒有歸檔的日誌文件時CANCEL掉就可以了。

一點心得:
在數據庫歸檔模式下,即使是數據庫非正常DOWN掉,通過歸檔日誌和聯機日誌都可以進行完全恢復。可是如果某個狀態爲ACTIVE或者CURRENT的日誌文件丟失或者損壞,ORACLE肯定不能完整的打開,即使使用
recover database until cancel時,也基本上會報:
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 將出現如下錯誤
ORA-01194: 文件1需要更多的恢復來保持一致性
ORA-01110: 數據文件 1: 'D:/ORACLE/ORADATA/SAMPLE/SYSTEM01.DBF'
這種情況下由於數據庫不能恢復到一致的狀態,
一種方法:
在數據庫中加入:
_allow_resetlogs_corruption=true
讓ORACLE不驗證數據一致性的情況下強行打開數據庫。
然後EXPORT出數據,重建數據庫。
或者:
把以前的的數據文件拿來,做不完全恢復,一直恢復到提示使用丟失的聯機日誌序列號時時打入cancel
recover database until cancel;
然後使用resetlogs的選項打開數據庫
alter database open resetlogs;
所以在歸檔模式下當前數據庫的控制文件和聯機日誌文件在恢復時候至關重要:
其中控制文件用來對舊數據進行恢復,應用歸檔日誌。
而聯機日誌則可以保證數據庫恢復到發生事故時的狀態,算是完全恢復。
如果沒歸檔的聯機日誌丟失(狀態爲ACTIVE或者CURRENT),則只能使用歸檔日誌恢復到最後一個歸檔日誌的地方,是不完全恢復。
發佈了83 篇原創文章 · 獲贊 0 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章