system表空間的數據文件損壞:
1. 以mount方式啟動數據庫
svrmgrl>startup mount;
2. 從相應的備份結果集中恢復關於這個數據文件的最近的備份。對於沒有采用帶庫備份的點可以直接從磁帶上恢復;對於用帶庫備份的點用相應的rman腳本來恢復。
3. 恢復system表空間:
svrmgrl>alter database recover datafile ‘datafile_name’;
4. 打開數據庫:
svrmgrl>alter database open;
5. 用適當的方法進行數據庫全備份。
表空間損壞:
若非system表空間已經損壞,則數據庫仍然可以處於打開狀態可以進行操作,只是損壞的表空間不能訪問。這樣在數據庫打開狀態下可以單獨對損壞的表空間進行恢復。若是system表空間損壞則數據庫系統會異常終止。這時數據庫只能以Mount方式打開,然後再對表空間進行恢復。可以通過查看數據庫日志文件來判斷當前損壞的表空間是否是system表空間.
非system表空間損壞:
1. 將損壞的表空間處於offline狀態:
svrmgrl>alter tablespace ‘tablespace_name’ offline;
2. 從相應的備份結果集中恢復關於這個表空間最近的備份。對於沒有采用帶庫備份的點可以直接從磁帶上恢復;對於用帶庫備份的點用相應的rman腳本來恢復。
3. 恢復表空間:
svrmgrl>alter database recover tablespace ‘tablespace_name’;
4. 使表空間online:
svrmgrl>alter tablespace ‘tablespace_name’ online;
5. 用適當的方法進行數據庫全備份.
system表空間損壞:
1. 以mount方式啟動數據庫
svrmgrl>startup mount;
2. 從相應的備份結果集中恢復system表空間最近的備份。對於沒有采用帶庫備份的點可以直接從磁帶上恢復;對於用帶庫備份的點用相應的rman腳本來恢復。
3. 恢復system表空間:
svrmgrl>alter database recover tablespace system;
4. 打開數據庫:
svrmgrl>alter database open;
5. 用適當的方法進行數據庫全備份。
整個數據庫的所有文件損壞:
整個數據庫所有文件的損壞一般是在共享磁盤陣列發生無法恢復的災難時才發生,這種情況下只能對數據庫進行恢復。若數據庫的歸檔目錄也已經丟失,則數據庫不可能做完全恢復,會有用戶數據的丟失。
沒采用帶庫備份的現場:
1. 將最近的備份從磁帶上把各個文件解包到相應的目錄下。
2. 以mount方式打開數據庫:
svrmgrl>startup mount;
3. 恢復數據庫:
svrmgrl>recover database until cancel;
4. 打開數據庫:
svrmgrl>alter database open resetlogs;
5. 用適當的方法進行數據庫全備份。
采用帶庫備份的現場:
1. 以nomount方式打開數據庫:
svrmgrl>startup nomount;
2. 通過相應的rman腳本進行數據庫軟恢復。
$rman cmdfile=hot_database_restore.rcv
3. 打開數據庫:
svrmgrl>alter database open resetlogs;
4. 用適當的方法進行數據庫全備份。
存在最近的數據庫完整冷備份前提下的一些經典緊急情況的處理:
數據文件,歸檔重作日志和控制文件同時丟失或損壞:
無新增archives 時的狀況:
條件和假設:自上次鏡像備份以來尚未生成新的archive log(s); Archivelog Mode; 有同步的datafile(s) 和control file(s) 的鏡像(冷)拷貝
恢復步驟:
1. 將鏡像拷貝的datafile(s) 和control file(s) 抄送回原始地點:
$ cp /backup/good_one.dbf /orig_loc/bad_one.dbf
$ cp /backup/control1.ctl /disk1/control1.ctl
2. 以mount 選項啟動數據庫:
$ svrmgrl
svrmgrl> connect internal
svrmgrl> startup mount
3. 以舊的control file 來恢復數據庫:
svrmgrl> recover database using backup controlfile until cancel;
*** 介質恢復完成
(必須馬上cancel )
4. Reset the logfiles (對啟動而言不可省略):
svrmgrl> alter database open resetlogs;
5. 關閉數據庫並做一次全庫冷備份。