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