Oracle歸檔模式下各種情況的恢復


一、部分備份數據文件損壞(除了control file和online redo)
完全恢復
前提條件:
曾對系統文件作過BACKUP。且備份后的所有的AF必須存在。RECOVR 期間用戶不能訪問數據庫。
恢復結果:出現故障時已提交的數據能被RECOVER,未提交的資料不能被RECOVER
1、系統表空間損壞(system tablesapce)
故障模擬:
   
   作數據庫完全熱備,所有AF存在
  
   
   SQL>archive log list
       數據庫日志模式            存檔模式
       自動存檔             啟用
       存檔終點            e:Softwareoracle9iadminoratestarchive2
       最早的概要日志序列     17
       下一個存檔日志序列   19
       當前日志序列           19
   
   故障模擬
   SQL>alter system checkpoint;
   SQL>host copy c:dd.txt E:Softwareoracle9ioradataoratestSYSEM01.DBF
   SQL> alter system checkpoint;  
 alter system checkpoint
 *
 ERROR 位於第 1 行:
 ORA-03113: 通信通道的文件結束
   SQL>connect / as sysdba
   SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 數據庫裝載完畢。
 ORA-01122: 數據庫文件 1 驗證失敗
 ORA-01110: 數據文件 1: 'E:SOFTWAREORACLE9IORADATAORATESTSYSTEM01.DBF'
 ORA-01251: 文件號1的未知文件標題版本讀取
   SQL>shudown immediate;
   SQL>host copy e:backupSYSTEM01.bak E:Softwareoracle9ioradataoratestSYSTEM01.DBF
   SQL> startup mount;
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 數據庫裝載完畢。
 SQL> alter database open;  //打開時提示需要介質恢復
 alter database open
 *
 ERROR 位於第 1 行:
 ORA-01113: 文件 1 需要介質恢復
 ORA-01110: 數據文件 1: 'E:SOFTWAREORACLE9IORADATAORATESTSYSTEM01.DBF'
   SQL> recover datafile 1;
 ORA-00279: 更改 734610 (在 04/26/2005 08:50:12 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_8_001.ARC
 ORA-00280: 更改 734610 對於線程 1 是按序列 # 8 進行的

 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
 auto                                                       //指定為auto自動
 ORA-00279: 更改 734775 (在 04/26/2005 08:51:09 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_9_001.ARC
 ORA-00280: 更改 734775 對於線程 1 是按序列 # 9 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_8_001.ARC'

 ORA-00279: 更改 734787 (在 04/26/2005 08:51:14 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_10_001.ARC
 ORA-00280: 更改 734787 對於線程 1 是按序列 # 10 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_9_001.ARC'

 ORA-00279: 更改 734874 (在 04/26/2005 08:51:35 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_11_001.ARC
 ORA-00280: 更改 734874 對於線程 1 是按序列 # 11 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_10_001.ARC'

 ORA-00279: 更改 734884 (在 04/26/2005 08:51:40 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_12_001.ARC
 ORA-00280: 更改 734884 對於線程 1 是按序列 # 12 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_11_001.ARC'

 ORA-00279: 更改 734894 (在 04/26/2005 08:51:46 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_13_001.ARC
 ORA-00280: 更改 734894 對於線程 1 是按序列 # 13 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_12_001.ARC'

 ORA-00279: 更改 734897 (在 04/26/2005 08:51:47 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_14_001.ARC
 ORA-00280: 更改 734897 對於線程 1 是按序列 # 14 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_13_001.ARC'

 ORA-00279: 更改 734905 (在 04/26/2005 08:51:53 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_15_001.ARC
 ORA-00280: 更改 734905 對於線程 1 是按序列 # 15 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_14_001.ARC'

 ORA-00279: 更改 741087 (在 04/26/2005 09:32:00 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_16_001.ARC
 ORA-00280: 更改 741087 對於線程 1 是按序列 # 16 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_15_001.ARC'

 已應用的日志。
 完成介質恢復。
 SQL> alter database open;
 SQL> archive log list;
 數據庫日志模式            存檔模式
 自動存檔             啟用
 存檔終點            e:Softwareoracle9iadminoratestarchive2
 最早的概要日志序列     18
 下一個存檔日志序列   20
 當前日志序列           20
 SQL>
   
2、undo表空間損壞

        SQL> show parameter undo;   //查看undo表空間
 NAME                                 TYPE        VALUE
 ------------------------------------ ----------- ------------------------------
 undo_management                      string      AUTO
 undo_retention                       integer     10800
 undo_suppress_errors                 boolean     FALSE
 undo_tablespace                      string      UNDOTBS1
 SQL>
 SQL> col file_name for a60;
 SQL> col tablespace_name for a20;
 SQL> select file_name,tablespace_name from dba_data_files;
 FILE_NAME                                                    TABLESPACE_NAME
 ------------------------------------------------------------ --------------------
 E:SOFTWAREORACLE9IORADATAORATESTSYSTEM01.DBF            SYSTEM
 E:SOFTWAREORACLE9IORADATAORATESTUNDOTBS01.DBF           UNDOTBS1
 E:SOFTWAREORACLE9IORADATAORATESTCWMLITE01.DBF           CWMLITE
 E:SOFTWAREORACLE9IORADATAORATESTDRSYS01.DBF             DRSYS
 E:SOFTWAREORACLE9IORADATAORATESTEXAMPLE01.DBF           EXAMPLE
 E:SOFTWAREORACLE9IORADATAORATESTINDX01.DBF              INDX
 E:SOFTWAREORACLE9IORADATAORATESTODM01.DBF               ODM
 E:SOFTWAREORACLE9IORADATAORATESTTOOLS01.DBF             TOOLS
 E:SOFTWAREORACLE9IORADATAORATESTUSERS01.DBF             USERS
 E:SOFTWAREORACLE9IORADATAORATESTXDB01.DBF               XDB
 E:SOFTWAREORACLE9IORADATAORATESTUSERS02.DBF             USERS
 SQL>
        故障模擬
      
 SQL>host copy  d:backuphotbackup.sql E:Softwareoracle9ioradataoratestUNDOTBS01.DBF 
        SQL> shutdown immediate;
 ORA-01122: 數據庫文件 2 驗證失敗
 ORA-01110: 數據文件 2: 'E:SOFTWAREORACLE9IORADATAORATESTUNDOTBS01.DBF'
 ORA-01251: 文件號2的未知文件標題版本讀取
 SQL> shutdown abort;
 ORACLE 例程已經關閉。
 SQL>
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 數據庫裝載完畢。
 ORA-01122: 數據庫文件 2 驗證失敗
 ORA-01110: 數據文件 2: 'E:SOFTWAREORACLE9IORADATAORATESTUNDOTBS01.DBF'
 ORA-01251: 文件號2的未知文件標題版本讀取  
 SQL>shutdown abort
    SQL>host copy e:backupUNDOTBS01.bak E:SOFTWAREORACLE9IORADATAORATESTUNDOTBS01.DBF  //講備份文件拷貝過去
 SQL>startup  mount
 SQL> select * from v$recover_file;  //查看需要恢復的文件的狀態
      FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME
 ---------- ------- ------- ----------------------------------------------------------------- ---------- ----------
         2 ONLINE  ONLINE  WRONG FILE TYPE                                                            0   
 
 也可以用alter database datafile 2 offline 將該文件離線
 然后在恢復,但是恢復完成后用alter database datafile 2 online 使undo在線
 SQL> recover datafile 2;
 ORA-00279: 更改 734789 (在 04/26/2005 08:51:15 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_10_001.ARC
 ORA-00280: 更改 734789 對於線程 1 是按序列 # 10 進行的

 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
 auto
 ORA-00279: 更改 734874 (在 04/26/2005 08:51:35 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_11_001.ARC
 ORA-00280: 更改 734874 對於線程 1 是按序列 # 11 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_10_001.ARC'

 ORA-00279: 更改 734884 (在 04/26/2005 08:51:40 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_12_001.ARC
 ORA-00280: 更改 734884 對於線程 1 是按序列 # 12 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_11_001.ARC'

 ORA-00279: 更改 734894 (在 04/26/2005 08:51:46 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_13_001.ARC
 ORA-00280: 更改 734894 對於線程 1 是按序列 # 13 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_12_001.ARC'

 ORA-00279: 更改 734897 (在 04/26/2005 08:51:47 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_14_001.ARC
 ORA-00280: 更改 734897 對於線程 1 是按序列 # 14 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_13_001.ARC'

 ORA-00279: 更改 734905 (在 04/26/2005 08:51:53 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_15_001.ARC
 ORA-00280: 更改 734905 對於線程 1 是按序列 # 15 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_14_001.ARC'

 ORA-00279: 更改 741087 (在 04/26/2005 09:32:00 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_16_001.ARC
 ORA-00280: 更改 741087 對於線程 1 是按序列 # 16 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_15_001.ARC'

 ORA-00279: 更改 741732 (在 04/26/2005 09:36:04 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_17_001.ARC
 ORA-00280: 更改 741732 對於線程 1 是按序列 # 17 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_16_001.ARC'

 已應用的日志。
 完成介質恢復。
 SQL>
3、非系統(system) 表空間數據文件損壞
 要求:DATAFILE備份后的所有AF必須存在。RECOVER期間充許用戶正常使用未出故障的TABLESPACE。
 結果:出故障時,屬於故障數據文件且未提交的數據不能RECOVER。
 當然可以停掉數據庫恢復,恢復跟恢復系統表空間一樣,這里只模擬用戶正常使用的情況。
 SQL> host copy d:backupaa.txt E:Softwareoracle9ioradataoratestUSERS01.DBF
 已復制         1 個文件。
 SQL> host copy d:backupaa.txt E:Softwareoracle9ioradataoratestUSERS02.DBF
 已復制         1 個文件。
 SQL> select * from test;
 select * from test
              *
 ERROR 位於第 1 行:
 ORA-01115: 從文件 11 讀取塊時出現 IO 錯誤 (塊 # 12)
 ORA-01110: 數據文件 11: 'E:SOFTWAREORACLE9IORADATAORATESTUSERS02.DBF'
 ORA-27091: skgfqio: 無法進行 I/O 操作
 ORA-27070: skgfdisp: 異步讀取/寫入失敗
 OSD-04006: ReadFile() 失敗, 無法讀取文件
 O/S-Error: (OS 38) 到達文件結尾。
 SQL>
 SQL>select d.file#,d.name,d.status,h.status from v$datafile d,v$datafile_header h where d.file#=h.file#  //查看文件狀態
 
     FILE# NAME                                     STATUS  STATUS
 --------- ---------------------------------------- ------- -------
        1 E:SOFTWAREORACLE9IORADATAORATESTSYS SYSTEM  ONLINE
          TEM01.DBF
        2 E:SOFTWAREORACLE9IORADATAORATESTUND ONLINE  ONLINE
          OTBS01.DBF
        3 E:SOFTWAREORACLE9IORADATAORATESTCWM ONLINE  ONLINE
          LITE01.DBF
        4 E:SOFTWAREORACLE9IORADATAORATESTDRS ONLINE  ONLINE
          YS01.DBF
     FILE# NAME                                     STATUS  STATUS
 --------- ---------------------------------------- ------- -------
        5 E:SOFTWAREORACLE9IORADATAORATESTEXA ONLINE  ONLINE
          MPLE01.DBF
        6 E:SOFTWAREORACLE9IORADATAORATESTIND ONLINE  ONLINE
          X01.DBF
        7 E:SOFTWAREORACLE9IORADATAORATESTODM ONLINE  ONLINE
          01.DBF
        8 E:SOFTWAREORACLE9IORADATAORATESTTOO ONLINE  ONLINE
     FILE# NAME                                     STATUS  STATUS
 --------- ---------------------------------------- ------- -------
          LS01.DBF
        9 E:SOFTWAREORACLE9IORADATAORATESTUSE ONLINE  ONLINE
          RS01.DBF
       10 E:SOFTWAREORACLE9IORADATAORATESTXDB ONLINE  ONLINE
          01.DBF
       11 E:SOFTWAREORACLE9IORADATAORATESTUSE ONLINE  ONLINE
          RS02.DBF
 
 SQL> alter database datafile 9 offline ;
 SQL> alter database datafile 11 offline ;
 SQL> select d.file#,d.name,d.status,h.status from v$datafile d,v$datafile_header h where d.file#=h.file#
      FILE# NAME                                     STATUS  STATUS
 ---------- ---------------------------------------- ------- -------
         9 E:SOFTWAREORACLE9IORADATAORATESTUSE RECOVER OFFLINE
           RS01.DBF
        10 E:SOFTWAREORACLE9IORADATAORATESTXDB ONLINE  ONLINE
           01.DBF
        11 E:SOFTWAREORACLE9IORADATAORATESTUSE RECOVER OFFLINE
           RS02.DBF
 SQL>host copy e:backupUSERS01.bak E:SOFTWAREORACLE9IORADATAORATESTUSERS01.DBF
 SQL>host copy e:backupUSERS02.bak E:SOFTWAREORACLE9IORADATAORATESTUSERS02.DBF
 SQL>recover datafile 9;
         auto
  ...
 已應用的日志。
 完成介質恢復。
 SQL>recover datafile 11;
  auto
 ....
 已應用的日志。
 完成介質恢復。
 SQL>alter database datafile 9 online;
 SQL>alter database datafile 11 online;
 SQL> select * from test;
         A B
 ---------- -
         1 1
         1 1
         2 2
 SQL>
4、普通文件損壞,沒有數據文件備份
 要求:檔建立后,所有的AF必須存在。且檔不是SYSTEM的檔。
 這里的AF存在的意思是,從這個檔建立之后的AF文件。
 故障模擬:
 SQL>create tablespace abc datafile 'E:SOFTWAREORACLE9IORADATAORATESTabc.dbf' size 5M ;
 SQL>select d.file#,d.name,d.status,h.status from v$datafile d,v$datafile_header h where d.file#=h.file#;
    FILE# NAME                                     STATUS  STATUS
 -------- ---------------------------------------- ------- -------
       12 E:SOFTWAREORACLE9IORADATAORATESTABC ONLINE  ONLINE
         .DBF
 SQL>archive log list
 數據庫日志模式            存檔模式
 自動存檔             啟用
 存檔終點            e:Softwareoracle9iadminoratestarchive2
 最早的概要日志序列     21
 下一個存檔日志序列   23
 當前日志序列           23
 SQL> alter system switch logfile;
 SQL> archive log list;
 數據庫日志模式            存檔模式
 自動存檔             啟用
 存檔終點            e:Softwareoracle9iadminoratestarchive2
 最早的概要日志序列     22
 下一個存檔日志序列   24
 當前日志序列           24
 SQL> alter system switch logfile;
 SQL> alter system switch logfile;
 SQL> archive log list;
 數據庫日志模式            存檔模式
 自動存檔             啟用
 存檔終點            e:Softwareoracle9iadminoratestarchive2
 最早的概要日志序列     24
 下一個存檔日志序列   26
 當前日志序列           26
 SQL> shutdown immediate
 數據庫已經關閉。
 已經卸載數據庫。
 ORACLE 例程已經關閉。
 SQL> host del E:SOFTWAREORACLE9IORADATAORATESTABC.DBF
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 數據庫裝載完畢。
 ORA-01157: 無法標識/鎖定數據文件 12 - 請參閱 DBWR 跟蹤文件
 ORA-01110: 數據文件 12: 'E:SOFTWAREORACLE9IORADATAORATESTABC.DBF'
 SQL> select * from v$recover_file;
      FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME
 ---------- ------- ------- ----------------------------------------------------------------- ---------- ----------
        12 ONLINE  ONLINE  FILE NOT FOUND   
                                                          0
 SQL>alter database datafile 12 offline ;
 SQL> select * from v$recover_file;
      FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME
 ---------- ------- ------- ----------------------------------------------------------------- ---------- ----------
        12 OFFLINE  OFFLINE  FILE NOT FOUND                                                             0
 SQL> alter database open;
 SQL> create tablespace abc datafile 'E:SOFTWAREORACLE9IORADATAORATESTABC.DBF' size 5M;//用這個命令創建表空間失敗,控制文件中仍然記錄該表空間
 create tablespace abc datafile 'E:SOFTWAREORACLE9IORADATAORATESTABC.DBF' size 5M
 *
 ERROR 位於第 1 行:
 ORA-01543: 表空間 'ABC' 已經存在
 SQL> alter database create datafile 'E:SOFTWAREORACLE9IORADATAORATESTABC.DBF' as 'E:SOFTWAREORACLE9IORADATAORATESTABC01.DBF';
 SQL> alter database datafile 12 online;
 alter database datafile 12 online
 *
 ERROR 位於第 1 行:
 ORA-01113: 文件 12 需要介質恢復
 ORA-01110: 數據文件 12: 'E:SOFTWAREORACLE9IORADATAORATESTABC01.DBF'
 SQL> recover datafile 12 ;
 ORA-00279: 更改 880858 (在 04/26/2005 14:12:10 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_23_001.ARC
 ORA-00280: 更改 880858 對於線程 1 是按序列 # 23 進行的

 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
 auto
 已應用的日志。
 完成介質恢復。
 SQL> select * from v$recover_file; //需要恢復的文件已經沒有了
 SQL> select d.file#,d.name,d.status,h.status from v$datafile d,v$datafile_header h where d.file#=h.file#;//name已經變為新的文件了,但是還是處於offline
      FILE# NAME                                     STATUS  STATUS
 ---------- ---------------------------------------- ------- -------
        12 E:SOFTWAREORACLE9IORADATAORATESTABC OFFLINE OFFLINE
           01.DBF
 SQL>alter database datafile 12 online; //使文件online;
 SQL> select d.file#,d.name,d.status,h.status from v$datafile d,v$datafile_header h where d.file#=h.file#;
      FILE# NAME                                     STATUS  STATUS
 ---------- ---------------------------------------- ------- -------
         12 E:SOFTWAREORACLE9IORADATAORATESTABC ONLINE  ONLINE
            01.DBF
 //恢復完成
 SQL> create table x (n number, b char) tablespace abc;//在表空間上創建表成功
二、控制文件損壞
     1、多個控制文件,一個損壞
 故障模擬
 SQL> select name from v$controlfile;
 NAME
 ----------------------------------------
 E:SOFTWAREORACLE9IORADATAORATESTCON
 TROL01.CTL
 E:SOFTWAREORACLE9IORADATAORATESTCON
 TROL02.CTL
 E:SOFTWAREORACLE9IORADATAORATESTCON
 TROL03.CTL
 SQL>host copy d:backupaa.txt E:SOFTWAREORACLE9IORADATAORATESTCONTROL01.CTL
 執行操作出現錯誤
 SQL> select name from v$tablespace;
 select name from v$tablespace
 *
 ERROR 位於第 1 行:
 ORA-12571: TNS: 包寫入程序失敗
 SQL> conn / as sysdba
 已連接到空閑例程。
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 ORA-00227: ????????????: (? 1?# ? 1)
 ORA-00202: ????: 'E:SOFTWAREORACLE9IORADATAORATESTCONTROL01.CTL'
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 數據庫裝載完畢。
 數據庫已經打開。
        解決方法是將該控制文件刪除,拷貝另一個一個替換他
      
       2、全部控制文件損壞
 前提條件:是保留有所有數據備份或歸檔日值和alter database backup controlfile to trace文件備份
 
 故障模擬
 
 
 
 SQL> create table con (a number ,c char) tablespace abc;
 表已創建。
 SQL> insert into con values(2,2);
 已創建 1 行。
 SQL> insert into con values(3,2);
 已創建 1 行。
 SQL> commit;
 提交完成。
 SQL> archive log list
 數據庫日志模式            存檔模式
 自動存檔             啟用
 存檔終點            e:Softwareoracle9iadminoratestarchive2
 最早的概要日志序列     41
 下一個存檔日志序列   43
 當前日志序列           43
 SQL>
 SQL> alter system switch logfile;
 系統已更改。
 SQL> alter system switch logfile;
 系統已更改。
 SQL> alter system switch logfile;
 系統已更改。
 SQL> archive log list;
 數據庫日志模式            存檔模式
 自動存檔             啟用
 存檔終點            e:Softwareoracle9iadminoratestarchive2
 最早的概要日志序列     44
 下一個存檔日志序列   46
 當前日志序列           46
 SQL>

 SQL> host copy d:backupaa.txt E:SOFTWAREORACLE9IORADATAORATESTCONTROL01.CTL
 已復制         1 個文件。
 SQL> host copy d:backupaa.txt E:SOFTWAREORACLE9IORADATAORATESTCONTROL02.CTL
 已復制         1 個文件。
 SQL> host copy d:backupaa.txt E:SOFTWAREORACLE9IORADATAORATESTCONTROL03.CTL
 已復制         1 個文件。
 SQL> create table aaa (a number b char) tablespace user; 
 create table aaa (a number b char) tablespace user
 *
 ERROR 位於第 1 行:
 ORA-01092: ORACLE 例程終止。強行斷開連接
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 ORA-00227: ????????????: (? 1?# ? 1)
 ORA-00202: ????: 'E:SOFTWAREORACLE9IORADATAORATESTCONTROL01.CTL'

 SQL> shutdown abort
 ORACLE 例程已經關閉。
 SQL> startup nomount //啟動到nomount狀態,這個狀態不打開控制文件
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 SQL> CREATE CONTROLFILE REUSE DATABASE "ORATEST" NORESETLOGS  ARCHIVELOG  //選擇NORESETLOGS,創建控制文件,前提是online redo完好
   2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
   3      MAXLOGFILES 50
   4      MAXLOGMEMBERS 5
   5      MAXDATAFILES 100
   6      MAXINSTANCES 1
   7      MAXLOGHISTORY 226
   8  LOGFILE
   9    GROUP 1 'E:SOFTWAREORACLE9IORADATAORATESTREDO01.LOG'  SIZE 100M,
  10    GROUP 2 'E:SOFTWAREORACLE9IORADATAORATESTREDO02.LOG'  SIZE 100M,
  11    GROUP 3 'E:SOFTWAREORACLE9IORADATAORATESTREDO03.LOG'  SIZE 100M
  12  -- STANDBY LOGFILE
  13  DATAFILE
  14    'E:SOFTWAREORACLE9IORADATAORATESTSYSTEM01.DBF',
  15    'E:SOFTWAREORACLE9IORADATAORATESTUNDOTBS01.DBF',
  16    'E:SOFTWAREORACLE9IORADATAORATESTCWMLITE01.DBF',
  17    'E:SOFTWAREORACLE9IORADATAORATESTDRSYS01.DBF',
  18    'E:SOFTWAREORACLE9IORADATAORATESTEXAMPLE01.DBF',
  19    'E:SOFTWAREORACLE9IORADATAORATESTINDX01.DBF',
  20    'E:SOFTWAREORACLE9IORADATAORATESTODM01.DBF',
  21    'E:SOFTWAREORACLE9IORADATAORATESTTOOLS01.DBF',
  22    'E:SOFTWAREORACLE9IORADATAORATESTUSERS01.DBF',
  23    'E:SOFTWAREORACLE9IORADATAORATESTXDB01.DBF',
  24    'E:SOFTWAREORACLE9IORADATAORATESTUSERS02.DBF',
  25    'E:SOFTWAREORACLE9IORADATAORATESTABC01.DBF'
  26  CHARACTER SET ZHS16GBK
  27  ;
 控制文件已創建
 SQL> shutdown abort
 ORACLE 例程已經關閉。
 SQL> conn / as sysdba
 已連接到空閑例程。
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 數據庫裝載完畢。
 ORA-01113: 文件 1 需要介質恢復
 ORA-01110: 數據文件 1: 'E:SOFTWAREORACLE9IORADATAORATESTSYSTEM01.DBF'

 SQL> recover database;
 完成介質恢復。
 SQL> alter database open;
 數據庫已更改。
 SQL>
 SQL> alter database open;
 數據庫已更改。
 SQL> select * from con;
         A C
 ---------- -
         1 1
         2 2
         3 2
 已選擇3行。
 SQL>
        還有一種情況是備份的是控制文件的二進制文件,online redo完好,並且保存了所有archive log
 這時所有控制文件壞了需要將控制文件和數據文件全部restore,確保init文件設置與控制文件一致
 然后利用recover database until cancel using backup controlfile;  
 alter database open resetlogs|noresetlogs  打開數據庫
三、在線redo損壞
 1、當前日志組損壞
 
 前提是,數據庫數據文件全備份和archive log全備份
 故障模擬
 
 SQL> insert into con1 values(11,1);
 已創建 1 行。
 SQL> select * from con1;
         A B
 ---------- -
         1 1
        11 1
 SQL> commit;
 提交完成。

 SQL> select * from v$log;
     GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
 ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
         1          1         13  104857600          1 YES INACTIVE               1673370 2005/04/30/14:48:36
         2          1         14  104857600          1 NO  CURRENT                1673377 2005/04/30/14:48:37
         3          1         12  104857600          1 YES INACTIVE               1673360 2005/04/30/14:48:34
 SQL> select * from v$logfile;
     GROUP# STATUS  TYPE    MEMBER
 ---------- ------- ------- ----------------------------------------
         3         ONLINE  E:SOFTWAREORACLE9IORADATAORATESTRED
                           O03.LOG
         2         ONLINE  E:SOFTWAREORACLE9IORADATAORATESTRED
                           O02.LOG
         1         ONLINE  E:SOFTWAREORACLE9IORADATAORATESTRED
                           O01.LOG

 SQL> host copy d:backupaa.txt E:SOFTWAREORACLE9IORADATAORATESTREDO02.LOG
 已復制         1 個文件。
 SQL> alter system switch logfile;
 alter system switch logfile
  *
 ERROR 位於第 1 行:
 ORA-03113: 通信通道的文件結束
 SQL> conn / as sysdba
 已連接到空閑例程。
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 數據庫裝載完畢。
 ORA-00316: 日志 2 (線程 1),標題中的類型 0 不是日志文件
 ORA-00312: 聯機日志 2 線程 1: 'E:SOFTWAREORACLE9IORADATAORATESTREDO02.LOG'
 SQL> select * from v$log;
     GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
 ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1         13  104857600          1 YES INACTIVE               1673370 30-4月 -05
         2          1         14  104857600          1 NO  INVALIDATED            1673377 30-4月 -05
         3          1          0  104857600          1 YES UNUSED                       0 30-4月 -05
 將備份的數據文件restore
 SQL> recover database until cancel;
 ORA-00279: 更改 1672616 (在 04/30/2005 14:44:27 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_1_001.ARC
 ORA-00280: 更改 1672616 對於線程 1 是按序列 # 1 進行的

 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
 auto
 ORA-00279: 更改 1672625 (在 04/30/2005 14:44:29 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_2_001.ARC
 ORA-00280: 更改 1672625 對於線程 1 是按序列 # 2 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_1_001.ARC'

 ORA-00279: 更改 1672636 (在 04/30/2005 14:44:33 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_3_001.ARC
 ORA-00280: 更改 1672636 對於線程 1 是按序列 # 3 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_2_001.ARC'

 ORA-00279: 更改 1672804 (在 04/30/2005 14:45:19 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_4_001.ARC
 ORA-00280: 更改 1672804 對於線程 1 是按序列 # 4 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_3_001.ARC'

 ORA-00279: 更改 1672815 (在 04/30/2005 14:45:25 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_5_001.ARC
 ORA-00280: 更改 1672815 對於線程 1 是按序列 # 5 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_4_001.ARC'

 ORA-00279: 更改 1672827 (在 04/30/2005 14:45:29 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_6_001.ARC
 ORA-00280: 更改 1672827 對於線程 1 是按序列 # 6 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_5_001.ARC'

 ORA-00279: 更改 1673157 (在 04/30/2005 14:47:44 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_7_001.ARC
 ORA-00280: 更改 1673157 對於線程 1 是按序列 # 7 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_6_001.ARC'

 ORA-00279: 更改 1673175 (在 04/30/2005 14:47:51 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_8_001.ARC
 ORA-00280: 更改 1673175 對於線程 1 是按序列 # 8 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_7_001.ARC'

 ORA-00279: 更改 1673263 (在 04/30/2005 14:48:21 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_9_001.ARC
 ORA-00280: 更改 1673263 對於線程 1 是按序列 # 9 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_8_001.ARC'

 ORA-00279: 更改 1673275 (在 04/30/2005 14:48:28 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_10_001.ARC
 ORA-00280: 更改 1673275 對於線程 1 是按序列 # 10 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_9_001.ARC'

 ORA-00279: 更改 1673357 (在 04/30/2005 14:48:33 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_11_001.ARC
 ORA-00280: 更改 1673357 對於線程 1 是按序列 # 11 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_10_001.ARC'

 ORA-00279: 更改 1673360 (在 04/30/2005 14:48:34 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_12_001.ARC
 ORA-00280: 更改 1673360 對於線程 1 是按序列 # 12 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_11_001.ARC'

 ORA-00279: 更改 1673370 (在 04/30/2005 14:48:36 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_13_001.ARC
 ORA-00280: 更改 1673370 對於線程 1 是按序列 # 13 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_12_001.ARC'

 ORA-00279: 更改 1673377 (在 04/30/2005 14:48:37 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_14_001.ARC
 ORA-00280: 更改 1673377 對於線程 1 是按序列 # 14 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_13_001.ARC'

 ORA-00308: 無法打開存檔日志 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_14_001.ARC'
 ORA-27041: 無法打開文件
 OSD-04002: 無法打開文件
 O/S-Error: (OS 2) 系統找不到指定的文件。

 SQL> alter database open resetlogs;
 數據庫已更改。
 SQL> select * from con1;
         A B
 ---------- -
         1 1
 SQL>  alter system switch logfile;
 系統已更改。
 SQL> select * from v$log;
     GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
 ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          2  104857600          1 NO  CURRENT                1675246 30-4月 -05
         2          1          1  104857600          1 YES ACTIVE                 1673378 30-4月 -05
         3          1          0  104857600          1 YES UNUSED                       0
 2、非活動的redo log 損壞恢復

 故障模擬

 SQL> select * from v$log;
     GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
 ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          2  104857600          1 YES INACTIVE               1675246 30-4月 -05
         2          1          4  104857600          1 NO  CURRENT                1675327 30-4月 -05
         3          1          3  104857600          1 YES INACTIVE               1675322 30-4月 -05
 SQL> host del E:SOFTWAREORACLE9IORADATAORATESTREDO03.LOG
 SQL> shutdown immediate
 數據庫已經關閉。
 已經卸載數據庫。
 ORACLE 例程已經關閉。
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 數據庫裝載完畢。
 ORA-00313: 無法打開日志組 3 (線程 1) 的成員
 ORA-00312: 聯機日志 3 線程 1: 'E:SOFTWAREORACLE9IORADATAORATESTREDO03.LOG'

 SQL> select * from v$log;
     GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
 ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          2  104857600          1 YES INACTIVE               1675246 30-4月 -05
         2          1          4  104857600          1 NO  CURRENT                1675327 30-4月 -05
         3          1          3  104857600          1 YES INACTIVE               1675322 30-4月 -05

 SQL> alter database clear logfile group 3;
 數據庫已更改。
 SQL> alter database open;
 數據庫已更改。
 SQL> select * from v$log;
     GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
 ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          2  104857600          1 YES INACTIVE               1675246 30-4月 -05
         2          1          4  104857600          1 NO  CURRENT                1675327 30-4月 -05
         3          1          0  104857600          1 YES UNUSED                 1675322 30-4月 -05
 SQL>
 
四、控制文件和Redo損壞
 1、全部的控制文件和全部redolog損壞
  
 故障模擬
 SQL> select * from con1;
         A B
 ---------- -
         1 1
 SQL> insert into con1 values(2,1);
 已創建 1 行。
 SQL> insert into con1 values(3,1);
 已創建 1 行。
 SQL> insert into con1 values(4,1);
 已創建 1 行。
 SQL> commit;
 提交完成。
 SQL> select * from con1;
         A B
 ---------- -
         1 1
         2 1
         3 1
         4 1
 SQL> select * from v$log;
     GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
 ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
         1          1         30  104857600          1 NO  CURRENT                3426067 2005/05/08/10:25:31
         2          1         28  104857600          1 YES INACTIVE               3426049 2005/05/08/10:25:24
         3          1         29  104857600          1 YES INACTIVE               3426061 2005/05/08/10:25:30
 SQL> host copy d:backupaa.txt E:Softwareoracle9ioradataoratestCONTROL01.CTL
 已復制         1 個文件。
 SQL> host copy d:backupaa.txt E:Softwareoracle9ioradataoratestCONTROL02.CTL
 已復制         1 個文件。
 SQL> host copy d:backupaa.txt E:Softwareoracle9ioradataoratestCONTROL03.CTL
 SQL> host copy d:backupaa.txt E:Softwareoracle9ioradataoratestREDO01.LOG
 已復制         1 個文件。
 SQL> host copy d:backupaa.txt E:Softwareoracle9ioradataoratestREDO02.LOG
 已復制         1 個文件。

 SQL> select * from v$log;
 select * from v$log
 *
 ERROR 位於第 1 行:
 ORA-12571: TNS: 包寫入程序失敗
 SQL> conn / as sysdba
 已連接到空閑例程。
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 ORA-00227: ????????????: (? 1?# ? 1)
 ORA-00202: ????: 'E:SOFTWAREORACLE9IORADATAORATESTCONTROL01.CTL'
 
 shutdown abrot
 strat nomount
 利用trace備份的control文件創建控制文件,由於當前的redolog損壞所以選擇RESETLOGS方式
 CREATE CONTROLFILE REUSE DATABASE "ORATEST" RESETLOGS  ARCHIVELOG
 --  SET STANDBY TO MAXIMIZE PERFORMANCE
     MAXLOGFILES 50
     MAXLOGMEMBERS 5
     MAXDATAFILES 100
     MAXINSTANCES 1
     MAXLOGHISTORY 226
 LOGFILE
   GROUP 1 'E:SOFTWAREORACLE9IORADATAORATESTREDO01.LOG'  SIZE 100M,
   GROUP 2 'E:SOFTWAREORACLE9IORADATAORATESTREDO02.LOG'  SIZE 100M,
   GROUP 3 'E:SOFTWAREORACLE9IORADATAORATESTREDO03.LOG'  SIZE 100M
 -- STANDBY LOGFILE
 DATAFILE
   'E:SOFTWAREORACLE9IORADATAORATESTSYSTEM01.DBF',
   'E:SOFTWAREORACLE9IORADATAORATESTUNDOTBS01.DBF',
   'E:SOFTWAREORACLE9IORADATAORATESTCWMLITE01.DBF',
   'E:SOFTWAREORACLE9IORADATAORATESTDRSYS01.DBF',
   'E:SOFTWAREORACLE9IORADATAORATESTEXAMPLE01.DBF',
   'E:SOFTWAREORACLE9IORADATAORATESTINDX01.DBF',
   'E:SOFTWAREORACLE9IORADATAORATESTODM01.DBF',
   'E:SOFTWAREORACLE9IORADATAORATESTTOOLS01.DBF',
   'E:SOFTWAREORACLE9IORADATAORATESTUSERS01.DBF',
   'E:SOFTWAREORACLE9IORADATAORATESTXDB01.DBF',
   'E:SOFTWAREORACLE9IORADATAORATESTUSERS02.DBF',
   'E:SOFTWAREORACLE9IORADATAORATESTABC01.DBF'
 CHARACTER SET ZHS16GBK
 ;
 SQL>
 
 SQL> recover database until cancel;
 ORA-00283: ??????????
 ORA-01610: ?? BACKUP CONTROLFILE ??????????

 SQL> recover database;
 ORA-00283: ??????????
 RA-01610: ?? BACKUP CONTROLFILE ??????????
 SQL> shutdown abort
 ORACLE 例程已經關閉。
 SQL> conn / as sysdba
 已連接到空閑例程。
 SQL> startup mount;
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 數據庫裝載完畢。
 SQL> recover database ;
 ORA-00283: 恢復會話因錯誤而取消
 RA-01610: 使用 BACKUP CONTROLFILE 選項的恢復必須已完成
 restore所有備份得數據文件。

 SQL> recover database using backup controlfile;
 ORA-00279: 更改 3425439 (在 05/08/2005 10:21:57 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_22_001.ARC
 ORA-00280: 更改 3425439 對於線程 1 是按序列 # 22 進行的

 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
 auto
 ORA-00279: 更改 3425841 (在 05/08/2005 10:24:18 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_23_001.ARC
 ORA-00280: 更改 3425841 對於線程 1 是按序列 # 23 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_22_001.ARC'

 ORA-00279: 更改 3425851 (在 05/08/2005 10:24:23 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_24_001.ARC
 ORA-00280: 更改 3425851 對於線程 1 是按序列 # 24 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_23_001.ARC'

 ORA-00279: 更改 3425948 (在 05/08/2005 10:25:13 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_25_001.ARC
 ORA-00280: 更改 3425948 對於線程 1 是按序列 # 25 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_24_001.ARC'

 ORA-00279: 更改 3426034 (在 05/08/2005 10:25:18 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_26_001.ARC
 ORA-00280: 更改 3426034 對於線程 1 是按序列 # 26 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_25_001.ARC'

 ORA-00279: 更改 3426046 (在 05/08/2005 10:25:23 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_27_001.ARC
 ORA-00280: 更改 3426046 對於線程 1 是按序列 # 27 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_26_001.ARC'

 ORA-00279: 更改 3426049 (在 05/08/2005 10:25:24 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_28_001.ARC
 ORA-00280: 更改 3426049 對於線程 1 是按序列 # 28 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_27_001.ARC'

 ORA-00279: 更改 3426061 (在 05/08/2005 10:25:30 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_29_001.ARC
 ORA-00280: 更改 3426061 對於線程 1 是按序列 # 29 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_28_001.ARC'

 ORA-00279: 更改 3426067 (在 05/08/2005 10:25:31 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_30_001.ARC
 ORA-00280: 更改 3426067 對於線程 1 是按序列 # 30 進行的
 ORA-00278: 此恢復不再需要日志文件 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_29_001.ARC'

 ORA-00308: 無法打開存檔日志 'E:SOFTWAREORACLE9IADMINORATESTARCHIVE2ORATEST_30_001.ARC'
 ORA-27041: 無法打開文件
 OSD-04002: 無法打開文件
 O/S-Error: (OS 2) 系統找不到指定的文件。

 SQL> alter database open resetlogs;
 alter database open resetlogs
 *
 ERROR 位於第 1 行:
 ORA-01113: 文件 1 需要介質恢復
 ORA-01110: 數據文件 1: 'E:SOFTWAREORACLE9IORADATAORATESTSYSTEM01.DBF'
 修改參數文件加入_allow_resetlogs_corruption=true 強制恢復
 SQL> alter database open resetlogs;
 數據庫打開
 修改參數文件去掉_allow_resetlogs_corruption=true

 2、一個數據文件損壞和一個日值文件損壞
 故障模擬
 SQL> host copy d:backupaa.txt E:Softwareoracle9ioradataorcCONTROL01.CTL
 已復制         1 個文件
 SQL> host copy d:backupaa.txt E:Softwareoracle9ioradataorcREDO01.LOG
 已復制         1 個文件。
 SQL> select * from v$log;
 select * from v$log
 *
 ERROR 位於第 1 行:
 ORA-12571: TNS: 包寫入程序失敗

 SQL> conn / as sysdba
 已連接到空閑例程。
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 ORA-00227: ????????????: (? 1?# ? 1)
 ORA-00202: ????: 'E:SOFTWAREORACLE9IORADATAORCCONTROL01.CTL'

 SQL> shutdown abort
 ORACLE 例程已經關閉。
 SQL>
 拷貝正常的替換損壞的
 SQL> startup
 oRACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 數據庫裝載完畢。
 ORA-00313: 無法打開日志組 1 (線程 1) 的成員
 ORA-00312: 聯機日志 1 線程 1: 'E:SOFTWAREORACLE9IORADATAORCREDO01.LOG'
 
 
 SQL> select * from v$log;
     GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS
 ---------- ---------- ---------- ---------- ---------- --- ----------------
 FIRST_CHANGE# FIRST_TIME
 ------------- ----------
         1          1          2  104857600          1 YES INACTIVE
       476608 11-5月 -05
         2          1          3  104857600          1 YES INACTIVE
       752579 13-5月 -05
         3          1          4  104857600          1 NO  INVALIDATED
       812309 13-5月 -05

 SQL>
 查看為非當前日值  (如果是當前redo損壞那么那着當前損壞的情況恢復)
 SQL> alter database clear group 1;
 alter database clear group 1
                     *
 ERROR 位於第 1 行:
 ORA-01900: 需要 LOGFILE 關鍵字

 SQL> alter database clear logfile group 1;
 數據庫已更改。
 
 SQL> recover database;
 ORA-00283: 恢復會話因錯誤而取消
 ORA-00264: 不要求恢復

 SQL> alter database open ;
 數據庫已更改。
 SQL>
 
四、全部文件都損壞
 故障模擬:所有歸檔日值存在 
 先在線熱備
 SQL> create table con1 (a number,b char) tablespace users;
 表已創建。
 SQL> alter system switch logfile;
 系統已更改。
 SQL> alter system switch logfile;
 系統已更改。
 SQL> alter system switch logfile;
 系統已更改。
 SQL> insert into con1(1,1);
 insert into con1(1,1)
 SQL> shutdown immediate
 數據庫已經關閉。
 已經卸載數據庫。
 ORACLE 例程已經關閉。
 SQL>
 刪除所有文件
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 ORA-00205: ?????????????????????

 SQL> exit
 SQL> shutdown abort
 ORACLE 例程已經關閉。
 恢復熱備的數據文件

 SQL> startup nomount
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 留用備份的trace文件中的語句創建控制文件
 SQL> CREATE CONTROLFILE REUSE DATABASE "ORC" RESETLOGS  ARCHIVELOG
   2  --  SET STANDBY TO MAXIMIZE PERFORMANCE
   3      MAXLOGFILES 50
   4      MAXLOGMEMBERS 5
   5      MAXDATAFILES 100
   6      MAXINSTANCES 1
   7      MAXLOGHISTORY 226
   8  LOGFILE
   9    GROUP 1 'E:SOFTWAREORACLE9IORADATAORCREDO01.LOG'  SIZE
  10    GROUP 2 'E:SOFTWAREORACLE9IORADATAORCREDO02.LOG'  SIZE
  11    GROUP 3 'E:SOFTWAREORACLE9IORADATAORCREDO03.LOG'  SIZE
  12  -- STANDBY LOGFILE
  13  DATAFILE
  14    'E:SOFTWAREORACLE9IORADATAORCSYSTEM01.DBF',
  15    'E:SOFTWAREORACLE9IORADATAORCUNDOTBS01.DBF',
  16    'E:SOFTWAREORACLE9IORADATAORCCWMLITE01.DBF',
  17    'E:SOFTWAREORACLE9IORADATAORCDRSYS01.DBF',
  18    'E:SOFTWAREORACLE9IORADATAORCEXAMPLE01.DBF',
  19    'E:SOFTWAREORACLE9IORADATAORCINDX01.DBF',
  20    'E:SOFTWAREORACLE9IORADATAORCODM01.DBF',
   21    'E:SOFTWAREORACLE9IORADATAORCTOOLS01.DBF',
   22    'E:SOFTWAREORACLE9IORADATAORCUSERS01.DBF',
  23    'E:SOFTWAREORACLE9IORADATAORCXDB01.DBF',
  24    'E:SOFTWAREORACLE9IORADATAORCUSERS02.DBF',
  25    'E:SOFTWAREORACLE9IORADATAORCABC01.DBF'
   26  CHARACTER SET ZHS16GBK
   27  ;
 控制文件已創建
 SQL> shutdown abort
 ORACLE 例程已經關閉。
 SQL> startup
 ORACLE 例程已經啟動。
 Total System Global Area  135338868 bytes
 Fixed Size                   453492 bytes
 Variable Size             109051904 bytes
 Database Buffers           25165824 bytes
 Redo Buffers                 667648 bytes
 數據庫裝載完畢。
 ORA-01589: 要打開數據庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
 設置初始化參數文件_allow_resetlogs_corruption=true
 SQL> recover database using backup controlfile;
 ORA-00279: 更改 842741 (在 05/13/2005 09:51:58 生成) 對於線程 1 是必需的
 ORA-00289: 建議: E:SOFTWAREORACLE9IADMINORCARCHIVE2ORC_5_1.ARC
 ORA-00280: 更改 842741 對於線程 1 是按序列 # 5 進行的

 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
 auto
 SQL> alter database open resetlogs;
 數據庫已更改。
 SQL> select name from v$datafile;
 NAME
 ------------------------------------------------
 E:SOFTWAREORACLE9IORADATAORCSYSTEM01.DBF
 E:SOFTWAREORACLE9IORADATAORCUNDOTBS01.DBF
 E:SOFTWAREORACLE9IORADATAORCCWMLITE01.DBF
 E:SOFTWAREORACLE9IORADATAORCDRSYS01.DBF
 E:SOFTWAREORACLE9IORADATAORCEXAMPLE01.DBF
 E:SOFTWAREORACLE9IORADATAORCINDX01.DBF
 E:SOFTWAREORACLE9IORADATAORCODM01.DBF
 E:SOFTWAREORACLE9IORADATAORCTOOLS01.DBF
 E:SOFTWAREORACLE9IORADATAORCUSERS01.DBF
 E:SOFTWAREORACLE9IORADATAORCXDB01.DBF
 E:SOFTWAREORACLE9IORADATAORCUSERS02.DBF
 NAME
 ------------------------------------------------
 E:SOFTWAREORACLE9IORADATAORCABC01.DBF
 已選擇12行。
 SQL> select * from con1;
         A B
 ---------- -
         1 1
 SQL>
 由於熱備不備份臨時表空間,所以可以刪除臨時表空間,再重建一個
 SQL> select tablespace_name,status from dba_tablespaces where tablespace_name='TEMP';
 TABLESPACE_NAME                STATUS
 ------------------------------ ---------
 
 TEMP                           ONLINE
 SQL> create temporary tablespace temp1 tempfile 'E:SOFTWAREORACLE9IORADATAORCTEMP01.DBF' size 5M;
 表空間已創建。
 SQL> alter database default temporary tablespace temp1;
 數據庫已更改。
 SQL> drop tablespace temp;
 表空間已丟棄。
 SQL>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM