學習目標 確定是否需要執行恢復 訪問不同的界面(如Enterprise Manager和命令行) 描述並使用可用的方案,如Recovery Manager(RMAN)和數據恢復指導 對以下文件執行恢復 -控制文件 -重做日誌文件 -數據文件 打開資料庫 要打開資料庫,必須滿足以下條件 -所有控制文件 ...
學習目標 確定是否需要執行恢復 訪問不同的界面(如Enterprise Manager和命令行) 描述並使用可用的方案,如Recovery Manager(RMAN)和數據恢復指導 對以下文件執行恢復 -控制文件 -重做日誌文件 -數據文件 打開資料庫 要打開資料庫,必須滿足以下條件 -所有控制文件都必須存在且已同步 -所有聯機數據文件都必須存在且已同步 -每個重做日誌組必須至少有一個成員存在 資料庫從關閉階段轉為完全打開的幾個階段 NOMOUNT:讀取初始化參數文件。實例進入NOMOUNT狀態時,不會檢查任何資料庫文件。 MOUNT:實例進入MOUNT時,會檢查初始化參數文件中列出的所有控制文件是否都存在且已同步。即使有一個控制文件缺失或損壞,實例會返回錯誤並保持NOMOUNT狀態。 OPEN:實例從MOUNT狀態轉為OPEN狀態時,它會執行以下操作 -檢查控制文件已知的所有重做日誌是否至少有一個成員存在,任何缺失的成員會記錄在預警日誌中。 -驗證控制文件已知的所有數據文件是否存在,但不驗證離線文件。當實例發現缺失文件時,錯誤消息只顯示導致問題的第一個文件,可以查詢v$recover_file動態性能視圖來獲取需要恢復的文件列表。 -驗證所有未離線數據文件或只讀數據文件是否與控制文件同步。必要時實例會自動執行恢復。如果某個文件不同步,導致無法通過使用聯機重做日誌組進行恢復,DBA必須執行介質恢復。v$recover_file視圖會列出完整的需恢複列表。 使資料庫保持在打開狀態 打開資料庫後,如果有以下項丟失,資料庫會失敗 -任何控制文件 -屬於系統表空間(SYSTEM)或還原表空間(UNDOTBS1)的數據文件 -整個重做日誌組 (只要組中至少有一個成員可用,實例就會保持打開狀態) Data Recovery Advisor(數據恢復指導) 快速檢測、分析和修複故障 停機和運行時的故障 將對用戶的干擾降到最低 用戶界面 -Enterprise Manager GUI -RMAN命令行 支持的資料庫配置 -單實例 -非RAC -支持故障轉移到備用資料庫,但不支持分析和修複備用資料庫 丟失控制文件 如果控制文件丟失或損壞,則實例通常會中止。 使用ASM存儲,並且至少還有一個控制文件副本,可以使用Enterprise Manager執行指導式恢復,或者使用RMAN執行手動恢復 1.將資料庫置於NOMOUNT模式 2.連接到RMAN執行restore controlfile命令來從現有的控制文件恢復損壞或丟失的控制文件 restore controlfile from '+DATA/orcl/controlfile/current.260.696209463'; 3.成功恢復控制文件後,打開資料庫。 如果使用常規文件系統則: 1.關閉資料庫 2.複製現有的控制文件來替代丟失或損壞的控制文件 3.成功恢復控制文件後,打開資料庫。 如果所有的控制文件丟失或損壞,可以重建控制文件來修複: ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/u01/backup_control.trc'; 註意‘NORESETLOGS FORCE ’和‘RESETLOGS FORCE ’的區別,RESETLOGS FORCE 會重置重做日誌序號,有導致數據丟失的風險。
CREATE CONTROLFILE REUSE DATABASE "<database_name>" NORESETLOGS FORCE LOGGING ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 400 MAXINSTANCES 8 MAXLOGHISTORY 4672 LOGFILE GROUP 1 ( '/u01/redo/redo01_1.log', '/u01/redo/redo01_2.log' ) SIZE 100M BLOCKSIZE 512, GROUP 2 ( '/u01/redo/redo02_1.log', '/u01/redo/redo02_2.log' ) SIZE 100M BLOCKSIZE 512, GROUP 3 ( '/u01/redo/redo03_1.log', '/u01/redo/redo03_2.log' ) SIZE 100M BLOCKSIZE 512, GROUP 4 ( '/u01/redo/redo04_1.log', '/u01/redo/redo04_2.log' ) SIZE 100M BLOCKSIZE 512, GROUP 5 ( '/u01/redo/redo05_1.log', '/u01/redo/redo05_2.log' ) SIZE 100M BLOCKSIZE 512, GROUP 6 ( '/u01/redo/redo06_1.log', '/u01/redo/redo06_2.log' ) SIZE 100M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/u01/app/oracle/oradata/<database_name>/system01.dbf', .... '/u01/app/oracle/oradata/<database_name>/undotbs01.dbf', CHARACTER SET AL32UTF8 ; CREATE CONTROLFILE REUSE DATABASE "<database_name>" RESETLOGS FORCE LOGGING ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 400 MAXINSTANCES 8 MAXLOGHISTORY 4672 LOGFILE GROUP 1 ( '/u01/redo/redo01_1.log', '/u01/redo/redo01_2.log' ) SIZE 100M BLOCKSIZE 512, GROUP 2 ( '/u01/redo/redo02_1.log', '/u01/redo/redo02_2.log' ) SIZE 100M BLOCKSIZE 512, GROUP 3 ( '/u01/redo/redo03_1.log', '/u01/redo/redo03_2.log' ) SIZE 100M BLOCKSIZE 512, GROUP 4 ( '/u01/redo/redo04_1.log', '/u01/redo/redo04_2.log' ) SIZE 100M BLOCKSIZE 512, GROUP 5 ( '/u01/redo/redo05_1.log', '/u01/redo/redo05_2.log' ) SIZE 100M BLOCKSIZE 512, GROUP 6 ( '/u01/redo/redo06_1.log', '/u01/redo/redo06_2.log' ) SIZE 100M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/u01/app/oracle/oradata/<database_name>/system01.dbf', .... '/u01/app/oracle/oradata/<database_name>/undotbs01.dbf', CHARACTER SET AL32UTF8 ;丟失重做日誌文件 丟失了重做日誌文件組中的某個成員,並且組中至少還有一個成員: -不會影響實例的正常操作。 -預警日誌中會收到一條信息,通知您無法找到某個成員 -可以通過刪除丟失的重做日誌成員並添加新成員來恢復丟失的日誌文件 -如果包含丟失日誌文件的組已歸檔,您可以清除日誌組來重新創建丟失的文件 恢復步驟: 1.確定是否有缺失的日誌文件 2.恢復丟失的文件時,先刪除丟失的重做日誌成員 ALTER DATABASE DROP LOGFILE MEMBER '+DATA/orcl/onlinelog/group_1.261.691672257'; 3.然後添加新成員來替代丟失的日誌成員 ALTER DATABASE ADD LOGFILE MEMBER '+DATA' TO GROUP 2; 4.如果介質故障是由於磁碟或控制器缺失而造成的,需重命名丟失文件。 5.如果重做日誌組已歸檔,或者處於NOARCHIVELOG模式下,則可選擇在清除日誌組後重新創建缺失來解決問題, ALTER DATABASE CLEAR LOGFILE GROUP n; 註意:清除未歸檔的日誌組,應立即對整個資料庫執行完全備份,否則,在發生其它故障的情況下,會導致數據丟失。 ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP #;
NOARCHIVELOG模式下丟失了數據文件 資料庫處於NOARCHIVELOG模式時,如果丟失任何數據文件,執行以下步驟 1.如果實例尚未關閉,請關閉實例 2.從備份還原整個資料庫,包括所有數據文件和控制文件 3.打開資料庫 4.讓用戶重新輸入自上次備份以來所做的所有更改 ARCHIVELOG模式下丟失了非關鍵性數據文件(SYSTEM,UNDO除外) 僅僅恢復當前數據文件不用整庫恢復,不需要停機 1.數據文件離線 2.restore數據文件,介質恢復 3.recover事務 4.數據文件聯機 ARCHIVELOG模式下丟失了關鍵性數據文件(SYSTEM,UNDO...) 資料庫關鍵性數據文件丟失,需要停機恢復 1.實例可能會也可能不會自動關閉。如果未自動關閉,請使用SHUTDOWN ABORT關閉實例 2.裝載資料庫,MOUNT 3.還原並恢復缺失的數據文件,restore datafile/database 4.recover datafile/database 5.打開資料庫 數據故障:示例 組件無法訪問:缺少操作系統級別的數據文件、訪問許可權不正確、表空間離線 物理損壞:塊校驗和錯誤、塊頭欄位值無效 邏輯損壞:目錄不一致;行片段、索引條目或事務處理損壞 不一致:控制文件早於或晚於數據文件和連接重做日誌 I/O故障:超出打開文件數限制、通道無法訪問、網路或I/O錯誤 數據恢復指導 1.評估數據故障 2.按嚴重程度列出故障 3.提供修複建議 4.選擇並執行恢復 5.執行預先檢查 RMAN> list failure; RMAN> advise failure; RMAN> repair failure; 數據恢復指導視圖 V$IR_FAILURE:列出所有故障,其中包括已關閉的故障(LIST FAILURE命令的結果) V$IR_MANUAL_CHECKLIST:列出手動建議(ADVISE FAILURE命令的結果) V$IR_REPAIR:列出修複(REPAIR FAILURE命令的結果) V$IR_FAILURE_SET:交叉引用故障和建議標識符
SQL> select * from v$ir_failure; no rows selected SQL> select * from v$ir_manual_checklist; no rows selected SQL> select * from v$ir_repair; no rows selected SQL> select * from v$ir_failure_set; no rows selected總結: 資料庫保存OPEN狀態的條件:所有控制文件存在、關鍵數據文件存在、重做日誌組成員存在並且文件之間同步正常 資料庫從shutdown到open的幾個階段:SHUTDOWN ->NOMOUNT->MOUNT->OPEN Data Recover Advisor工具適用環境及使用:Enterprise Manager 和RMAN命令行,單實例可進行指導,RAC環境不可以。支持Standby故障轉移,但不能執行分析和修複 丟失了控制文件、重做日誌文件、非歸檔模式下數據文件、歸檔模式下非關鍵數據文件、歸檔模式下關鍵數據文件的修複 數據恢復指導視圖