Oracle 不同故障的恢復方案
在非Catalog模式下, 備份的資訊儲存在controlfile中。 所以在RMAN 備份的時候,別忘了備份控制檔案。
1. SPFILE丟失
startup nomount;
set dbid 3988862108;
restore spfile from autobackup;
或者通過某個檔案
restore spfile from 'path/file_name'
shutdown immediate;
set dbid 3988862108;
startup;
2. Controlfile全部丟失
控制檔案做了3個冗餘,很少會發生全部丟失的情況,當遇到控制檔案所有都丟失,恢復需要以下步驟:
RMAN>set dbid 3988862108;
RMAN>startup nomount;
RMAN>restore controlfile from autobackup;
或者從檔案恢復
RMAN>restore controlfile from 'file_name';
RMAN>alter database mount;
RMAN>recover database; (保證資料一致,因為控制檔案裡scn發生改變)
RMAN>alter database open resetlogs;
resetlogs命令表示一個資料庫邏輯生存期的結束和另一個資料庫邏輯生存期的開始,每次使用resetlogs命令的時候,SCN不會被重置,不過oracle會重置日誌序列號,而且會重置聯機重做日誌內容. 這樣做是為了防止不完全恢復後日志序列會發生衝突(因為現有日誌和資料檔案間有了時間差)。
3. Redo Log File損壞
重做日誌檔案在資料庫中是要求最高的元件,首先其對磁碟的IO要求極高,其次一旦CURRENT組發生故障,資料庫會立即崩潰,並且100%會發生資料丟失,所以ORACLE建議至少每個組需要兩個成員,並且在資料庫執行過程中日誌檔案會一直被鎖定,以防不測。
Redo log的恢復分為兩種:CURRENT 和 非CURRENT
3.1 CURRENT 情況
造成redo 損壞,很多情況是與突然斷電有關。這種情況下是比較麻煩的。
(1)如果有歸檔和備份,可以用不完全恢復。
SQL>startup mount;
SQL>recover database until cancel; 先選擇auto,儘量恢復可以利用的歸檔日誌,然後重新執行:
SQL>recover database until cancel; 這次輸入cancel,完成不完全恢復,
用resetlogs開啟資料:
SQL>alter database open resetlogs; 開啟資料庫
(2)強制恢復, 這種方法可能會導致資料不一致
sql>startup mount;
sql>alter system set "_allow_resetlogs_corruption"=true scope=spfile;
sql>recover database until cancel;
sql>alter database open resetlogs;
運氣好的話,資料庫能正常開啟,但是由於使用_allow_resetlogs_corruption方式開啟,會造成資料的丟失,且資料庫的狀態不一致。因此,這種情況下Oracle建議通過EXP方式匯出資料庫。重建新資料庫後,再匯入。
redo 的損壞,一般還容易伴隨以下2種錯誤:ORA-600[2662](SCN有關)和 ORA-600[4000](回滾段有關)。
metalink上的兩篇文章介紹了兩種情況的處理方法:
TECH: Summary For Forcing The Database Open With `_ALLOW_RESETLOGS_CORRUPTION` with Automatic Undo Management [ID 283945.1]
http://space.itpub.net/28673746/viewspace-757850
ORA-600 [2662] Block SCN is ahead of Current SCN [ID 28929.1]
http://space.itpub.net/28673746/viewspace-757414
這兩種情況下的恢復有點複雜,回頭單獨做個測試,在補充進來。
3.2 非CURRENT 情況
這種情況下的恢復比較簡單,因為redo log 是已經完成歸檔或者正在歸檔。 沒有正在使用。可以通過v$log 檢視redo log 的狀態。
(1)如果STATUS是INACTIVE,則表示已經完成了歸檔,直接清除掉這個redo log即可。
SQL>startup mount;
SQL> alter database clear logfile group 3 ;
SQL>alter database open;
(2)如果STATUS 是ACTIVE ,表示正在歸檔, 此時需要使用如下語句:
SQL>startup mount;
SQL> alter database clear unarchived logfile group 3 ;
SQL>alter database open;
4. 非系統表空間損壞
若出現介質故障導致某表空間不可用,恢復可以在資料庫處於 open 或 mount 狀態下進行,步驟如下:
1. 將該表空間置於offline狀態
2. 修復表空間資料
3. 恢復表空間並處於一致性
4. 將表空間online
rman> sql 'alter tablespace dave offline';
如果檔案不存在,就加immediate引數
rman> sql 'alter tablespace dave offline immediate';
rman>restore tablespace dave;
rman>recover tablespace dave;
rman>sql 'alter tablespace dave online';
5. 資料檔案損壞
如果出現介質故障導致某表空間資料檔案丟失(這種情況也可以參照表空間損壞的恢復)。
恢復可以在 資料庫處於 open 或 mount 狀態下進行,只需4個步驟
1. 將該資料檔案置於 offline 狀態
2. 修復資料檔案(指定資料檔案編號)
3. 恢復資料檔案
4. 將資料檔案 online
rman> sql 'alter datafile 8 offline ';
rman>restore datafile 8;
rman>recover datafile 8;
rman>sql 'alter datafile 8 online';
6. 基於時間點/SCN/日誌序列的不完全恢復
基於時間點/SCN/日誌序列的不完全恢復,可以將資料庫、表空間、資料檔案等恢復至恢復備份集儲存時間中的任何一個時間點/SCN/日誌序列,但須謹慎,操作前一定需要做好備份,具備條件的情況下最好先恢復到異機。
6.1 基於時間點
run{
set until time "to_date(12/29/10 23:00:00','mm/dd/yy hh24:mi:ss')";
restore database;
recover database;
alter database open resetlogs;
}
SQL>STARTUP NOMOUNT;
SQL>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
SQL> recover database until time '2010-12-29 23:19:00';
SQL>ALTER DATABASE OPEN RESETLOGS;
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
SQL>startup mount;
SQL>restore database until time "to_date('2010-12-29 23:19:00','YYYY-MM-DD HH24:MI:SS')";
SQL>recover database until time "to_date('2010-12-29 23:19:00','YYYY-MM-DD HH24:MI:SS')";
SQL>alter database open resetlogs;
6.2 基於 SCN:
SQL>startup mount;
SQL>restore database until scn 10000;
SQL>recover database until scn 10000;
SQL>alter database open resetlogs;
6.3 基於日誌序列
SQL>startup mount;
SQL>restore database until SEQUENCE 100 thread 1; //100是日誌序列
SQL>recover database until SEQUENCE 100 thread 1;
SQL>alter database open resetlogs;
日誌序列檢視命令:
SQL>select sequence from v$log;
resetlogs就會把sequence 置為1
7. 非catalog下完全恢復
SQL>startup nomount;
SQL>restore controlfile from autobackup;
SQL>alter database mount;
SQL>restore database;
SQL>recover database;
SQL>alter database open resetlogs;
示例:
oracle ora10g> rm *;
oracle ora10g> ls;
oracle ora10g> //資料檔案,控制檔案全部刪除
oracle ora10g> rman target /; //因為controlfile 丟失,不能夠連線到rman
oracle ora10g> sqlplus /nolog;
oracle ora10g> connect / as sysdba;
oracle ora10g> shutdown abort;
oracle ora10g> rman target /
rman> startup nomount;
rman> restore controlfile from autabackup;
rman> alter database mount;
rman> restore database;
rman> recover database; //online redolog 不存在
SQL>recover database until cancel; //當redo log丟失,資料庫在預設的方式下,是不容許進行recover操作的,那麼如何在這種情況下操作呢
SQL>create pfile from spfile;
vi /u01/product/10.20/dbs/initora10g.ora,在這個檔案的最後一行新增
*.allow_resetlogs_corruption='TRUE'; //容許resetlog corruption
SQL>shutdown immediate;
SQL>startup pfile='/u01/product/10.20/dbs/initora10g.ora' mount;
SQL>alter database open resetlogs;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28673746/viewspace-757851/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫不同故障的恢復方式資料庫
- Oracle ASM故障資料恢復解決方案OracleASM資料恢復
- ORACLE 常見故障恢復Oracle
- Oracle資料庫Redo故障的恢復Oracle資料庫
- rman恢復方案和oracle異機恢復Oracle
- 【伺服器資料恢復】xen server常見故障的資料恢復方案伺服器資料恢復Server
- Oracle Redo丟失恢復方案Oracle
- Oracle資料庫故障恢復資料庫系統故障恢復效能優化指南大全Oracle資料庫優化
- 伺服器資料恢復-RAID5常見故障的資料恢復方案伺服器資料恢復AI
- postgreSQL 恢復至故障點 精準恢復SQL
- Oracle不同檔案丟失/損壞的恢復方法Oracle
- DM7使用DMRAMN對多次故障恢復後使用不同資料庫的歸檔進行恢復資料庫
- 伺服器資料恢復—不同型號伺服器RAID5故障的資料恢復案例伺服器資料恢復AI
- Oracle 目錄許可權丟失故障恢復Oracle
- Oracle Redo(重做日誌) 模擬故障和恢復Oracle Redo
- 資料庫資料恢復-ORACLE資料庫的常見故障&各種故障下的資料恢復可能性資料庫資料恢復Oracle
- 【伺服器資料恢復】xen server儲存庫(sr)常見故障的資料恢復方案伺服器資料恢復Server
- 3.6遷移故障恢復
- ORACLE資料庫事務處理和故障恢復Oracle資料庫
- Oracle資料庫不同損壞級別的恢復詳解Oracle資料庫
- 詳細講解Oracle資料庫中不同的恢復特性Oracle資料庫
- 用DUL恢復故障的資料庫資料庫
- SQLServer異常故障恢復(二)SQLServer
- Ceph monitor故障恢復探討
- MySQL資料庫故障恢復MySql資料庫
- 用Windows XP故障恢復控制檯恢復系統(轉)Windows
- 【資料庫資料恢復】誤truncate table的Oracle資料庫資料恢復方案資料庫資料恢復Oracle
- 恢復伺服器故障硬碟的資料伺服器硬碟
- MySQL 組複製故障恢復的有效策略MySql
- Oracle-真實環境的丟失current redo log file的故障恢復Oracle
- 【伺服器資料恢復】HP EVA虛擬化磁碟陣列常見故障和資料恢復方案伺服器資料恢復陣列
- 【北亞資料恢復】硬碟壞道故障如何恢復資料?資料恢復硬碟
- AIX系統儲存故障後的Oracle 10g RAC恢復過程AIOracle 10g
- 記一次Kafka叢集的故障恢復Kafka
- 東芝硬碟的故障表現及資料恢復硬碟資料恢復
- Oracle 11g Data guard 物理備庫故障恢復重建例項Oracle
- NBU恢復oracleOracle
- SeSparse資料恢復方案研究及恢復方法演示資料恢復