在ORACLE的日常管理中,需要定期對備份進行測試,以檢測備份文件是否可用。以下對常見的恢復場景進行簡單介紹。
一、備份前的準備工作
1、查看參數文件的位置
SQL> show parameter spfile;
2、查看控制文件的位置
SQL> show parameter control;
3、查看數據文件的位置
SQL> select name from v$datafile;
SQL> select file_name from dba_data_files;
4、查看臨時文件的位置
SQL> select name from v$tempfile;
SQL> select file_name from dba_temp_files;
5、查看dump目錄
SQL> show parameter dump;
6、查看數據庫名和dbid
SQL> select name,dbid from v$database;
二、執行全庫備份
run{
backup database format 'd:\rman\full_%d_%T_%s_%p';
sql 'alter system archive log current';
sql 'alter system archive log current';
sql 'alter system archive log current';
backup archivelog all format 'd:\rman\arch_%d_%T_%s_%p';
backup current controlfile format 'd:\rman\ctl_%d_%T_%s_%p';
}
注:在備份時將控制文件自動備份打開,這樣可以自動備份控制文件和參數文件
三、常見情況的備份與恢復
1、一個數據文件損壞(非system和Undo)後的恢復實驗
1) 進入數據文件的目錄,刪除一個數據文件(非system和Undo文件)
注:windows環境下在未關閉數據庫的情況下數據文件無法刪除,可以先關閉數據庫再刪除文件
2)關閉數據庫,再次啓動,會報錯
SQL> shutdown immediate;
SQL> startup;
3)啓動數據庫到mount狀態,並將刪除的數據文件設置爲offline
SQL> alter database mount;
SQL> alter database datafile '刪掉文件的絕對路徑+文件名' offline;
4)打開數據庫
SQL> alter database open;
5)還原並恢復刪除的數據文件
RMAN> restore datafile '刪掉文件的絕對路徑+文件名';
RMAN> recover datafile '刪掉文件的絕對路徑+文件名';
6)將刪除的數據文件設置爲online狀態
SQL> alter database datafile '刪掉文件的絕對路徑+文件名' online;
2、所有數據文件損壞後的恢復實驗
1)進入數據文件的目錄,刪除所有數據文件。
2)關閉數據庫
SQL> shutdown immediate;
注:在windows平臺下操作時步驟1和2需要反過來執行。
3)啓動數據庫到mount狀態
SQL> startup mount;
4)還原並恢復數據庫
RMAN> restore database;
RMAN> recover database;
5)打開數據庫
SQL> alter database open;
3、SYSTEM或者UNDO損壞後的恢復實驗
1)進入數據文件的目錄,刪除SYSTEM01.DBF文件
2)關閉數據庫。
SQL> shutdown immediate;
注:在windows平臺下操作時步驟1和2需要反過來執行。
3)啓動數據庫到mount狀態
SQL> startup mount;
4)還原並恢復SYSTEM01.DBF文件
RMAN> restore datafile '文件路徑/SYSTEM01.DBF';
RMAN> recover datafile '文件路徑/SYSTEM01.DBF';
5)打開數據庫
SQL> alter database open;
4、參數文件損壞後的恢復實驗
1)全庫備份:數據文件+歸檔日誌+控制文件+參數文件(過程略)
2)一致的關閉數據庫
SQL> shutdown immediate;
3)刪除參數文件initSID.ora和spfileSID.ora
4)自己在$ORACLE_HOME/dbs目錄手動創建一個參數文件:initSID.ora,內容如下
*.db_name='數據庫名'
5)啓動數據庫到nomount狀態
SQL> startup nomount;
6)恢復參數文件
RMAN> restore spfile from 'd:\rman\c-xxxxxxxxx'; 注:c-xxxxx爲最後備份的參數文件
7)關閉數據庫
SQL> shutdown immediate;
8)打開數據庫
SQL> startup;
5、控制文件損壞後的恢復
1)執行一次全庫備份:數據文件+歸檔日誌+控制文件+參數文件
2)一致的關閉數據庫
SQL> shutdown immediate;
3)刪除所有的控制文件
4)啓動數據庫到nomount狀態
SQL> startup nomount;
5)恢復控制文件
RMAN> restore controlfile from 'd:\rman\ctl-xxxx'; 注:ctl-xxxx爲最後備份的控制文件
6)啓動數據庫到mount狀態
SQL> alter database mount;
7)恢復並還原數據庫
RMAN> restore database;
RMAN> recover database;
8)打開數據庫
SQL> alter database open resetlogs;
注:以resetlogs方式打開後,需要立即對數據庫做一個全庫備份。