您现在的位置是:首页 >

oracle备份与恢复 数据库备份与恢复测试(3)

火烧 2022-08-06 03:51:00 1051
数据库备份与恢复测试 3   ################################ # [ ] 有trace 活动在线日志损坏 ##############################

数据库备份与恢复测试(3)  

  ################################                                                                      # [ ] 有trace 活动在线日志损坏    ################################ ################################                                                              # [ ] 有trace 活动在线日志损坏 正常shutdown或是当前的数据文件   ################################SQL> create table arch (status varchar( ));

  表已创建

  SQL> alter system switch logfile;

  系统已更改

  SQL> insert into arch select ok from dba_objects;

  已创建 行

  SQL> mit;

  提交完成

  SQL> insert into arch select ok from dba_objects;

  已创建 行

  SQL> mit;

  提交完成

  SQL> alter system switch logfile;

  系统已更改

  SQL> insert into arch select no from dba_objects;

  已创建 行

  SQL> mit;

  提交完成

  SQL> select GROUP# SEQUENCE# archived STATUS from v$log;

  GROUP#  SEQUENCE# ARC STATUS                    YES ACTIVE                   YES ACTIVE                   NO  CURRENT     SQL> shutdown  正常关闭数据库数据库已经关闭 已经卸载数据库 ORACLE 例程已经关闭

  此时模拟删除当前在线日志组 SQL>SQL>SQL> startup nomountORACLE 例程已经启动

  Total System Global Area  bytesFixed Size                   bytesVariable Size              bytesDatabase Buffers           bytesRedo Buffers                 bytesSQL> CREATE CONTROLFILE REUSE DATABASE testdb RESETLOGS  ARCHIVELOG      SET STANDBY TO MAXIMIZE PERFORMANCE        MAXLOGFILES         MAXLOGMEMBERS         MAXDATAFILES         MAXINSTANCES         MAXLOGHISTORY     LOGFILE      GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M     GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M     GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M   STANDBY LOGFILE   DATAFILE     C:ORACLEORADATAtestdbSYSTEM DBF     C:ORACLEORADATAtestdbUNDOTBS DBF     C:ORACLEORADATAtestdbINDX DBF     C:ORACLEORADATAtestdbTOOLS DBF     C:ORACLEORADATAtestdbUSERS DBF   CHARACTER SET ZHS GBK   ;

  控制文件已创建

  SQL> alter database open resetlogs;

  数据库已更改     SQL> select count(*) status from arch group by status;

  COUNT(*) ST       no     ok

   >>没有丢失任何数据 因为你的数据都已经写到数据文件里了    

  #########################################                                                   # [ ] 有trace 活动在线日志损坏 shutdown abort 或是非当前的数据文件          当前在线日志文件损坏          #########################################

  ####################################################[测试 ] shutdown abort 备份控制文件或者resetlog的trace 没有数据文件备份 采用强制打开数据库的方法####################################################SQL> create table arch (status varchar( ));                                                                       表已创建                                                     

  SQL> alter system switch logfile;

  系统已更改

  SQL> insert into arch select ok from dba_objects;

  已创建 行

  SQL> mit;

  提交完成

  SQL> insert into arch select ok from dba_objects;

  已创建 行

  SQL> mit;

  提交完成

  SQL> alter system switch logfile;SQL> insert into arch select no from dba_objects;

  已创建 行

  SQL> mit;

  提交完成 SQL>  select GROUP# SEQUENCE# archived STATUS from v$log;

  GROUP#  SEQUENCE# ARC STATUS                    YES ACTIVE                   NO  CURRENT                   YES INACTIVE

  SQL> insert into arch select no from dba_objects;

  已创建 行

  SQL> shutdown abortORACLE 例程已经关闭

  SQL> startupORACLE 例程已经启动

  Total System Global Area  bytesFixed Size                   bytesVariable Size              bytesDatabase Buffers           bytesRedo Buffers                 bytes数据库装载完毕 ORA : 无法打开日志组 (线程 ) 的成员ORA : 联机日志 线程 : C:ORACLEORADATATESTDBREDO LOG ORA : 无法读取文件的标题块OSD : ReadFile() 失败 无法读取文件O/S Error: (OS ) 到达文件结尾

  SQL> alter database clear logfile group ;alter database clear logfile group *ERROR 位于第 行:ORA : 线程 的紧急恢复需要日志 ORA : 联机日志 线程 : C:ORACLEORADATATESTDBREDO LOG

  SQL> startup nomountORACLE 例程已经启动

  Total System Global Area  bytesFixed Size                   bytesVariable Size              bytesDatabase Buffers           bytesRedo Buffers                 bytesSQL> CREATE CONTROLFILE REUSE DATABASE testdb RESETLOGS  ARCHIVELOG      SET STANDBY TO MAXIMIZE PERFORMANCE        MAXLOGFILES         MAXLOGMEMBERS         MAXDATAFILES         MAXINSTANCES         MAXLOGHISTORY     LOGFILE      GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M     GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M     GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M   STANDBY LOGFILE   DATAFILE     C:ORACLEORADATAtestdbSYSTEM DBF     C:ORACLEORADATAtestdbUNDOTBS DBF     C:ORACLEORADATAtestdbINDX DBF     C:ORACLEORADATAtestdbTOOLS DBF     C:ORACLEORADATAtestdbUSERS DBF   CHARACTER SET ZHS GBK   ;

  控制文件已创建

  SQL> alter database open resetlogs;alter database open resetlogs*ERROR 位于第 行:ORA : ?? ?????????????ORA : ???? : C:ORACLEORADATATESTDBSYSTEM DBF

  SQL> recover database using backup controlfile until cancel;ORA : ?? (? / / : : ??) ???? ????ORA : ??: C:ORACLEORADATATESTDBARCHIVE _ DBFORA : ?? ???? ???? # ???

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}cancelORA : ??: RECOVER ??? OPEN RESETLOGS ???????ORA : ?? ?????????????ORA : ???? : C:ORACLEORADATATESTDBSYSTEM DBF

  ORA : ???????

  我们看到如果是abort DOWN机的话 打开数据库都需要应用在线活动日志

  这时必须加隐含参数强制打开数据库 并进行导出 重建数据库 导入业务数据

  SQL> show parameter spfile                                                                                                                                                                                          NAME                                 TYPE        VALUE                                                                                spfile                               string      %ORACLE_HOME%DATABASESPFILE                                                                             ORACLE_SID% ORA                                                                                                                                                                                                                                                              SQL> create pfile= pfiletest ora from spfile;                                                                                                                                                                      文件已创建                                                                                                                                                                                                         SQL> create pfile= c:pfiletest ora from spfile;                                                                                                                                                                   文件已创建                                                                                               编辑c:pfiletest ora                                                                                      增加三个参数                                                                                                                                                                                                        _allow_resetlogs_corruption=true                                                                          _corrupted_rollback_segments=true                                                                         _offline_rollback_segments=true                                                                                                                                                                                     SQL> shutdown immediate                                                                                   ORA : 数据库未打开                                                                                                                                                                                                                                                                                                       已经卸载数据库                                                                                           ORACLE 例程已经关闭                                                                                      SQL>                                                                                                      SQL>                                                                                                      SQL>                                                                                                      SQL> startup pfile= c:pfiletest ora                                                                      ORACLE 例程已经启动                                                                                                                                                                                                Total System Global Area  bytes                                                                 Fixed Size                   bytes                                                                 Variable Size             bytes                                                                 Database Buffers           bytes                                                                 Redo Buffers                 bytes                                                                 数据库装载完毕                                                                                           ORA : 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项                                                                                                                                                                                                                                                               SQL> alter database open resetlogs;                                                                       alter database open resetlogs                                                                             *                                                                                                         ERROR 位于第 行:                                                                                        ORA : ORACLE 例程终止 强行断开连接                                                                                                                                                                                                                                                                                      SQL>                                                                                                      SQL>                                                                                                      SQL> exit                                                                                                 从Oracle i Enterprise Edition Release Production                                              With the Partitioning OLAP and Oracle Data Mining options                                                JServer Release Production中断开                                                                                                                                                                        C:>sqlplus /as sysdba                                                                                                                                                                                             SQL*Plus: Release Production on 星期五 月 : :                                                                                                                                             Copyright (c) Oracle Corporation   All rights reserved                                                                                                                                                  已连接到空闲例程                                                                                                                                                                                                   SQL> startup pfile= c:pfiletest ora                                                                      ORACLE 例程已经启动                                                                                                                                                                                                Total System Global Area  bytes                                                                 Fixed Size                   bytes                                                                 Variable Size             bytes                                                                 Database Buffers           bytes                                                                 Redo Buffers                 bytes                                                                 数据库装载完毕                                                                                           数据库已经打开                                                                                           SQL>                                                                                                     

  ##################################################### [测试 ] shutdown abort resetlog的trace #         有数据文件备份 当前在线日志损坏 控制文件损坏 有trace####################################################SQL> create table arch (status varchar( )) tablespace users;

  表已创建

  SQL> alter system switch logfile;

  系统已更改

  SQL> insert into arch select ok from dba_objects;

  已创建 行

  SQL> mit;

  提交完成

  SQL> insert into arch select * from arch;

  已创建 行

  SQL> /

  已创建 行

  SQL> /

  已创建 行

  SQL> /

  已创建 行

  SQL> mit;

  提交完成

  SQL> alter system switch logfile;

  系统已更改

  SQL> insert into arch select no from dba_objects;

  已创建 行

  SQL> mit;

  提交完成

  SQL> select GROUP# SEQUENCE# archived STATUS from v$log;

  GROUP#  SEQUENCE# ARC STATUS                    NO  CURRENT                   YES ACTIVE                   NO  ACTIVE

  SQL> shutdown abortORACLE 例程已经关闭 SQL> startup nomountORACLE 例程已经启动

  Total System Global Area  bytesFixed Size                   bytesVariable Size              bytesDatabase Buffers           bytesRedo Buffers                 bytesSQL> CREATE CONTROLFILE REUSE DATABASE testdb NORESETLOGS  ARCHIVELOG

       SET STANDBY TO MAXIMIZE PERFORMANCE

         MAXLOGFILES

         MAXLOGMEMBERS

         MAXDATAFILES

         MAXINSTANCES

         MAXLOGHISTORY

     LOGFILE      GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M

       GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M

     STANDBY LOGFILE

     DATAFILE

       C:ORACLEORADATAtestdbSYSTEM DBF

       C:ORACLEORADATAtestdbUNDOTBS DBF

       C:ORACLEORADATAtestdbINDX DBF

       C:ORACLEORADATAtestdbTOOLS DBF

       C:ORACLEORADATAtestdbUSERS DBF

     CHARACTER SET ZHS GBK

     ;CREATE CONTROLFILE REUSE DATABASE testdb NORESETLOGS  ARCHIVELOG*ERROR 位于第 行:ORA : CREATE CONTROLFILE ??ORA : ??????????

  ~~~~~~~~~~~~~~~~~~~~~~如果是NORESETLOGS 那么他要检查当前的在线日志 而现在没有了

  SQL> CREATE CONTROLFILE REUSE DATABASE testdb NORESETLOGS  ARCHIVELOG

       SET STANDBY TO MAXIMIZE PERFORMANCE

         MAXLOGFILES

         MAXLOGMEMBERS

         MAXDATAFILES

         MAXINSTANCES

         MAXLOGHISTORY

     LOGFILE

       GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M

       GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M

       GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M

     STANDBY LOGFILE

     DATAFILE

       C:ORACLEORADATAtestdbSYSTEM DBF

       C:ORACLEORADATAtestdbUNDOTBS DBF

       C:ORACLEORADATAtestdbINDX DBF

       C:ORACLEORADATAtestdbTOOLS DBF

       C:ORACLEORADATAtestdbUSERS DBF

     CHARACTER SET ZHS GBK

     ;CREATE CONTROLFILE REUSE DATABASE testdb NORESETLOGS  ARCHIVELOG*ERROR 位于第 行:ORA : CREATE CONTROLFILE ??ORA : ???? C:ORACLEORADATAtestdbREDO LOG ???  >>这个文件不在了ORA : ??????OSD : N^ ( r?*ND<~O/S Error: (OS ) O M UR ; =V ( DND<~!#

  SQL> CREATE CONTROLFILE REUSE DATABASE testdb RESETLOGS  ARCHIVELOG

       SET STANDBY TO MAXIMIZE PERFORMANCE

         MAXLOGFILES

         MAXLOGMEMBERS

         MAXDATAFILES

         MAXINSTANCES

         MAXLOGHISTORY

     LOGFILE      GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M

       GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M

     STANDBY LOGFILE

     DATAFILE

       C:ORACLEORADATAtestdbSYSTEM DBF

       C:ORACLEORADATAtestdbUNDOTBS DBF

       C:ORACLEORADATAtestdbINDX DBF

       C:ORACLEORADATAtestdbTOOLS DBF

       C:ORACLEORADATAtestdbUSERS DBF

     CHARACTER SET ZHS GBK

     ;CREATE CONTROLFILE REUSE DATABASE testdb RESETLOGS  ARCHIVELOG*ERROR 位于第 行:ORA : CREATE CONTROLFILE ??ORA : ????????ORA : ????: C:oracleoradatatestdbcontrol ctl   这个文件不能被覆蓋 删除三个控制文件ORA : skgfglk: ?????? ?????OSD : N^ ( r?*ND<~O/S Error: (OS ) >>x CNJ!#

  SQL> shutdownORA : ??????

  ORACLE 例程已经关闭 SQL> startup nomountORACLE 例程已经启动

  Total System Global Area  bytesFixed Size                   bytesVariable Size              bytesDatabase Buffers           bytesRedo Buffers                 bytesSQL> CREATE CONTROLFILE REUSE DATABASE testdb RESETLOGS  ARCHIVELOG

       SET STANDBY TO MAXIMIZE PERFORMANCE

         MAXLOGFILES

         MAXLOGMEMBERS

         MAXDATAFILES

         MAXINSTANCES

         MAXLOGHISTORY

     LOGFILE      GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M

       GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M

     STANDBY LOGFILE

     DATAFILE

       C:ORACLEORADATAtestdbSYSTEM DBF

       C:ORACLEORADATAtestdbUNDOTBS DBF

       C:ORACLEORADATAtestdbINDX DBF

       C:ORACLEORADATAtestdbTOOLS DBF

       C:ORACLEORADATAtestdbUSERS DBF

     CHARACTER SET ZHS GBK

     ;

  控制文件已创建

  SQL> alter database open;alter database open*ERROR 位于第 行:ORA : ??????????? RESETLOGS ? NORESETLOGS ??

  SQL> alter database open resetlogs;alter database open resetlogs*ERROR 位于第 行:ORA : ?? ????????????ORA : ???? : C:ORACLEORADATATESTDBSYSTEM DBF

  SQL> recover database using backup controlfile until cancel;ORA : ?? (? / / : : ??) ???? ????ORA : ??: C:ORACLEORADATATESTDBARCHIVE _ DBFORA : ?? ???? ???? # ???

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

  ORA : ?? (? / / : : ??) ???? ????ORA : ??: C:ORACLEORADATATESTDBARCHIVE _ DBFORA : ?? ???? ???? # ???ORA : ??????????? C:ORACLEORADATATESTDBARCHIVE _ DBF

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

  ORA : ?? (? / / : : ??) ???? ????ORA : ??: C:ORACLEORADATATESTDBARCHIVE _ DBFORA : ?? ???? ???? # ???ORA : ??????????? C:ORACLEORADATATESTDBARCHIVE _ DBF

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

  ORA : ???????? C:ORACLEORADATATESTDBARCHIVE _ DBF ORA : ??????OSD : N^ ( r?*ND<~O/S Error: (OS ) O M UR ; =V ( DND<~!#

  SQL> recover database using backup controlfile until cancel;ORA : ?? (? / / : : ??) ???? ????ORA : ??: C:ORACLEORADATATESTDBARCHIVE _ DBFORA : ?? ???? ???? # ???

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}cancel介质恢复已取消 SQL> alter database open resetlogs;

  数据库已更改

  SQL> select count(*) status from arch group by status;

  COUNT(*) ST      ok  还原了部分数据 但不能还原在线日志中的数据

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~如果数据库是abort或者老的数据文件备份 那么就涉及到控制文件和数据文件不一致 需要恢复 就涉及到当前被破坏的在线日志 启动时仍然需要用在线活动日志进行恢复 如果是正常的shutdown 而且没有用老的数据备份 那么控制文件和数据文件是一致的 不需要当前在线日志 而在abort或者老的数据文件备份在这种情况下 只能用备份的datafile和备份的controlfile来做不完全恢复 都将造成数据丢失 因此多重controlfile 和 online redo log file 很重要 通常情况下是在正常运行数据库时 当前在线日志被破坏的 此时马上会数据库不正常DOWN机 也就出现 的情景我们知道如果是abort关闭的 那么有些事务是不完整的或者有些事务没有被写到数据文件 在数据文件中有这样的标识 这样 用create controlfile noresetlogs或者resetlogs创建时读取数据文件头信息 该文件在控制文件信息 比如结束SCN设置为无穷大)打开时就需要当前在线日志恢复~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~##################################################### [测试 ] shutdown abort 控制文件损坏 备份控制文件 #         当前在线日志损坏 有数据文件备份####################################################

  还原原来备份的数据文件 控制文件SQL> shutdownORA : 数据库未打开

  ORACLE 例程已经关闭 SQL> startup mountORACLE 例程已经启动

  Total System Global Area  bytesFixed Size                   bytesVariable Size              bytesDatabase Buffers           bytesRedo Buffers                 bytesORA : ??????? C:oracleora DATABASEPWDtestdb ORA

  SQL> recover database using backup controlfile ;ORA : ?? (? / / : : ??) ???? ????ORA : ??: C:ORACLEORADATATESTDBARCHIVE _ DBFORA : ?? ???? ???? # ???

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

  ORA : ?? (? / / : : ??) ???? ????ORA : ??: C:ORACLEORADATATESTDBARCHIVE _ DBFORA : ?? ???? ???? # ???ORA : ??????????? C:ORACLEORADATATESTDBARCHIVE _ DBF

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

  ORA : ?? (? / / : : ??) ???? ????ORA : ??: C:ORACLEORADATATESTDBARCHIVE _ DBFORA : ?? ???? ???? # ???ORA : ??????????? C:ORACLEORADATATESTDBARCHIVE _ DBF

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}

  ORA : ???????? C:ORACLEORADATATESTDBARCHIVE _ DBF ORA : ??????OSD : N^ ( r?*ND<~O/S Error: (OS ) O M UR ; =V ( DND<~!#

  SQL> alter database open resetlogs;alter database open resetlogs*ERROR 位于第 行:ORA : ?? ??????ORA : ???? : C:ORACLEORADATATESTDBSYSTEM DBF

  SQL> select resetlogs_change# CONTROLFILE_CHANGE# from v$database;

  RESETLOGS_CHANGE# CONTROLFILE_CHANGE#                             

  SQL> recover database using backup controlfile until cancel;ORA : ?? (? / / : : ??) ???? ????ORA : ??: C:ORACLEORADATATESTDBARCHIVE _ DBFORA : ?? ???? ???? # ???

  指定日志: {<RET>=suggested | filename | AUTO | CANCEL}cancel介质恢复已取消 SQL> select resetlogs_change# CONTROLFILE_CHANGE# from v$database;

  RESETLOGS_CHANGE# CONTROLFILE_CHANGE#                             

  SQL> alter database open resetlogs;

  数据库已更改

  SQL> select count(*) status from arch group by status;

  COUNT(*) ST      ok

  ######################################################                                                # [ ]  控制文件损坏 如果trace不是最新的数据库结构 如少了个数据文件######################################################   

oracle备份与恢复 数据库备份与恢复测试(3)

  SQL> create table arch (status varchar( ));

  表已创建

  SQL> alter system switch logfile;

  系统已更改

  SQL> insert into arch select ok from dba_objects;

  已创建 行

  SQL> mit;

  提交完成

  SQL> insert into arch select ok from dba_objects;

  已创建 行

  SQL> mit;

  提交完成

  SQL> alter system switch logfile;

  系统已更改

  SQL> insert into arch select no from dba_objects;

  已创建 行

  SQL> mit;

  提交完成

  SQL> select GROUP# SEQUENCE# archived STATUS from v$log;

  GROUP#  SEQUENCE# ARC STATUS                    NO  ACTIVE                   YES ACTIVE                   NO  CURRENT    SQL> alter tablespace tools add datafile C:ORACLEORADATATESTDBTOOLS dbf size m;

  表空间已更改

  SQL> shutdown数据库已经关闭 已经卸载数据库 ORACLE 例程已经关闭

  模拟控制文件丢失

  SQL> CREATE CONTROLFILE REUSE DATABASE testdb NORESETLOGS  ARCHIVELOG      SET STANDBY TO MAXIMIZE PERFORMANCE        MAXLOGFILES         MAXLOGMEMBERS         MAXDATAFILES         MAXINSTANCES         MAXLOGHISTORY     LOGFILE      GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M     GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M     GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M   STANDBY LOGFILE   DATAFILE     C:ORACLEORADATAtestdbSYSTEM DBF     C:ORACLEORADATAtestdbUNDOTBS DBF     C:ORACLEORADATAtestdbINDX DBF     C:ORACLEORADATAtestdbTOOLS DBF     C:ORACLEORADATAtestdbUSERS DBF   CHARACTER SET ZHS GBK   ;

  控制文件已创建

  SQL> alter database open;

  数据库已更改

  SQL> select name status from v$datafile;

  NAME                                         STATUS        C:ORACLEORADATATESTDBSYSTEM DBF        SYSTEMC:ORACLEORADATATESTDBUNDOTBS DBF       ONLINEC:ORACLEORADATATESTDBINDX DBF          ONLINEC:ORACLEORADATATESTDBTOOLS DBF         ONLINEC:ORACLEORADATATESTDBUSERS DBF             ONLINEC:ORACLEORA DATABASEMISSING         RECOVER 这个文件现在是recover状态

  已选择 行

  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~我们发现C:ORACLEORA DATABASEMISSING 并不存在 只不过是个标记而已~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  SQL> alter database rename file MISSING to C:ORACLEORADATATESTDBTOOLS dbf ;  MISSING 不要加路径

  数据库已更改

  SQL> recover datafile C:ORACLEORADATATESTDBTOOLS dbf ;完成介质恢复

  SQL> alter database datafile C:ORACLEORADATATESTDBTOOLS dbf online;

  数据库已更改

  ~~~~~~~~~~~~~~~~~~~~~~~~~如果用备份控制文件 且备份控制文件少了新增加的两个文件 恢复时会提示错误 我们可以用rename来解决~~~~~~~~~~~~~~~~~~~~~~~~~使用备份控制文件recover AUTOMATIC   database using backup controlfile until cancel        ORA : recovery session canceled due to errors                   ORA : unnamed datafile(s) added to controlfile by media recoveryORA : data file : /oracle/dbs/db f                           ORA : data file : /oracle/dbs/db f                          

  ~~~~~~~~~~~~~~~~~~~~这是因为前滚时发现file#中有两个文件 但控制文件没有我们可以在v$datafile中看到所以恢复中断~~~~~~~~~~~~~~~~~~~~SELECT FILE# NAME FROM V$DATAFILE;

  FILE#           NAME                /oracle/dbs/db f                /oracle/dbs/UNNAMED                /oracle/dbs/UNNAMED

  这时对文件进行改名就可以了

  ALTER DATABASE RENAME FILE /db/UNNAMED TO /oracle/dbs/db f ;ALTER DATABASE RENAME FILE /db/UNNAMED TO /oracle/dbs/db f ;

  RECOVER AUTOMATIC DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL

  ######################################################                                # [ ] 控制文件损坏 如果trace不是最新的数据库结构 如少了个只读数据文件###################################################### 

  SQL> alter tablespace tools add datafile C:ORACLEORADATATESTDBTOOLS dbf size m ;

  表空间已更改                   SQL> alter tablespace tools read only;

  表空间已更改         SQL> select name ENABLED     from v$datafile;

  NAME                                            ENABLED              C:ORACLEORADATATESTDBSYSTEM DBF                READ WRITEC:ORACLEORADATATESTDBUNDOTBS DBF                READ WRITEC:ORACLEORADATATESTDBINDX DBF                READ WRITEC:ORACLEORADATATESTDBTOOLS DBF                READ ONLYC:ORACLEORADATATESTDBUSERS DBF                READ WRITEC:ORACLEORADATATESTDBTOOLS DBF                READ ONLY

  已选择 行 SQL> startup nomountORACLE 例程已经启动

  Total System Global Area  bytesFixed Size                   bytesVariable Size              bytesDatabase Buffers           bytesRedo Buffers                 bytesSQL> CREATE CONTROLFILE REUSE DATABASE testdb NORESETLOGS  ARCHIVELOG      SET STANDBY TO MAXIMIZE PERFORMANCE        MAXLOGFILES         MAXLOGMEMBERS         MAXDATAFILES         MAXINSTANCES         MAXLOGHISTORY     LOGFILE      GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M     GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M     GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M   STANDBY LOGFILE   DATAFILE     C:ORACLEORADATAtestdbSYSTEM DBF     C:ORACLEORADATAtestdbUNDOTBS DBF     C:ORACLEORADATAtestdbINDX DBF     C:ORACLEORADATAtestdbTOOLS DBF     C:ORACLEORADATAtestdbUSERS DBF   CHARACTER SET ZHS GBK   ;

  控制文件已创建SQL> select name from v$datafile;

  NAME

  C:ORACLEORADATATESTDBSYSTEM DBFC:ORACLEORADATATESTDBUNDOTBS DBFC:ORACLEORADATATESTDBINDX DBFC:ORACLEORADATATESTDBTOOLS DBFC:ORACLEORADATATESTDBUSERS DBFSQL> alter database open;

  数据库已更改

  SQL> select name from v$datafile;

  NAME

  C:ORACLEORADATATESTDBSYSTEM DBFC:ORACLEORADATATESTDBUNDOTBS DBFC:ORACLEORADATATESTDBINDX DBFC:ORACLEORADATATESTDBTOOLS DBFC:ORACLEORADATATESTDBUSERS DBFC:ORACLEORA DATABASEMISSING   OPEN时增加了不认识的文件名

  已选择 行

  SQL> alter database rename file MISSING to C:ORACLEORA DATABASETOOLS DBF ;alter database rename file MISSING to C:ORACLEORA DATABASETOOLS DBF *ERROR 位于第 行:ORA : 重命名日志/数据文件时出错ORA : 重命名数据文件 时出错 未找到新文件 C:ORACLEORA DATABASETOOLS DBF ORA : 数据文件 名称未知 请重命名以更正文件ORA : 数据文件 : C:ORACLEORA DATABASEMISSING ORA : 无法打开文件OSD : 无法打开文件O/S Error: (OS ) 系统找不到指定的文件 *ERROR 位于第 行:ORA : ?? ??????ORA : ???? : C:ORACLEORADATATESTDBTOOLS DBF

  SQL> alter database datafile C:ORACLEORADATATESTDBTOOLS DBF offline;

  数据库已更改

  SQL> alter database datafile C:ORACLEORADATATESTDBTOOLS DBF offline;alter database datafile C:ORACLEORADATATESTDBTOOLS DBF offline*ERROR 位于第 行:ORA : ???????? ????????? C:ORACLEORADATATESTDBTOOLS DBF

  SQL> alter database open ;

  数据库已更改

  SQL> alter database datafile MISSING offline;  >>注意只读表空间必须先offline 而且注意MISSING 不能写全路径

  数据库已更改

  SQL> alter database rename file  MISSING to C:ORACLEORADATATESTDBTOOLS DBF ;

  数据库已更改 SQL> alter tablespace tools online;

  表空间已更改

  方法 SQL> SHUTDOWN数据库已经关闭 已经卸载数据库 ORACLE 例程已经关闭 SQL> STARTUP NOMOUNTORACLE 例程已经启动

  Total System Global Area  bytesFixed Size                   bytesVariable Size              bytesDatabase Buffers           bytesRedo Buffers                 bytesSQL> CREATE CONTROLFILE REUSE DATABASE testdb NORESETLOGS  ARCHIVELOG

       SET STANDBY TO MAXIMIZE PERFORMANCE        MAXLOGFILES         MAXLOGMEMBERS         MAXDATAFILES         MAXINSTANCES         MAXLOGHISTORY     LOGFILE      GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M     GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M     GROUP C:ORACLEORADATAtestdbREDO LOG   SIZE M   STANDBY LOGFILE   DATAFILE     C:ORACLEORADATAtestdbSYSTEM DBF     C:ORACLEORADATAtestdbUNDOTBS DBF     C:ORACLEORADATAtestdbINDX DBF     C:ORACLEORADATAtestdbTOOLS DBF     C:ORACLEORADATAtestdbTOOLS DBF   创建语句中加入该数据文件     C:ORACLEORADATAtestdbUSERS DBF   CHARACTER SET ZHS GBK   ;

  控制文件已创建

  SQL> SELECT NAME FROM V$DATAFILE;

  NAME

  C:ORACLEORADATATESTDBSYSTEM DBFC:ORACLEORADATATESTDBUNDOTBS DBFC:ORACLEORADATATESTDBINDX DBFC:ORACLEORADATATESTDBTOOLS DBFC:ORACLEORADATATESTDBUSERS DBFC:ORACLEORADATATESTDBTOOLS DBF

  已选择 行

  SQL> ALTER DATABASE OPEN;ALTER DATABASE OPEN*ERROR 位于第 行:ORA : ?? ??????ORA : ???? : C:ORACLEORADATATESTDBTOOLS DBF

  SQL> RECOVER TABLESPACE TOOLS;完成介质恢复 SQL> ALTER DATABASE OPEN;

  数据库已更改

  ##################################              # [ ] 使用备份的控制文件进行恢复 #                     ##################################

lishixinzhi/Article/program/Oracle/201311/17289  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码