如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638    QQ号:47079569    邮箱:service@parnassusdata.com

 

RMAN 备份 和从丢失的当前重做日志群恢复

情景3:  从当前群丢失的重做日志中恢复

下面的情景会证明从当前重做日志群丢失的重做日志中恢复的恢复步骤最危险的情况是,数据库管理员丢失写入未复用的重做日志文件中的一切。

  • 首先,采用数据库的备份(关闭数据库,复制所有的 .dbf .ctl 文件到另一个目录),然后获取当前重做日志群中的重做日志名,删除它,然后重启数据库:

SQL> shutdown immediate; [oracle@localhost ~]$ cd $ORACLE_HOME/oradata/new/ [oracle@localhost new]$ mkdir backup [oracle@localhost new]$ cp *.dbf backup/ [oracle@localhost new]$ cp *.ctl backup/ [oracle@localhost new]$ exit SQL> startup <.....output trimmed .....> Database opened. SQL> select a.group#, a.status, b.member from v$log a, v$logfile b where a.group#=b.group# and a.status='current'; GROUP# STATUS           MEMBER ---------- ---------------- ---------------------------------------- 3 CURRENT        /u01/ORACLE/product/10.2.0/db_1/oradata/new/redo03.log SQL> host [oracle@localhost ~]$ rm -rf /u01/oracle/product/10.2.0/db_1/oradata/new/redo03.log [oracle@localhost ~]$ exit exit SQL> startup force <.....output trimmed .....> Database mounted. ORA-00313: open failed for members of log group 3 of thread 1 ORA-00312: online log 3 thread 1: '/u01/ORACLE/product/10.2.0/db_1/oradata/new/redo03.log' ORA-27037: unable to obtain file status Linux Error: 2: No such file or directory Additional information: 3 SQL>

  • 2.  清除当前重做日志文件是不可能的,正如你已完成对丢失的不活动重做日志清除那样,也不可能删除和增加一个当前非复用重做日志,正如你已完成对任何群的丢失复用成分那样。如果你尝试,你就会失败:

SQL> alter database clear unarchived logfile '/u01/ORACLE/product/10.2.0/db_1/oradata/new/redo03.log'; alter database clear unarchived logfile '/u01/ORACLE/product/10.2.0/db_1/oradata/new/redo03.log' * ERROR at line 1: ORA-01624: log 3 needed for crash recovery of instance new (thread 1) ORA-00312: online log 3 thread 1: '/u01/ORACLE/product/10.2.0/db_1/oradata/new/redo03.log' SQL> alter database drop logfile '/u01/ORACLE/product/10.2.0/db_1/oradata/new/redo03.log'; alter database drop logfile '/u01/ORACLE/product/10.2.0/db_1/oradata/new/redo03.log' * ERROR at line 1: ORA-01623: log 3 is current log for instance new (thread 1) - cannot drop ORA-00312: online log 3 thread 1: '/u01/ORACLE/product/10.2.0/db_1/oradata/new/redo03.log' SQL>

  • 3. 在这种情况下,你需要恢复数据库到丢失的重做日志第一个序列号,为获得scn 值,使用下列查询:

SQL> select a.first_change#, a.status, b.member from v$log a, v$logfile b where a.group#=b.group# and a.status='current'; FIRST_CHANGE# STATUS           MEMBER ------------- ---------------- ------------------------------------- 446985 CURRENT   /u01/oracle/product/10.2.0/db_1/oradata/new/redo03.log

  • 4.  关闭数据库,复原备份目录中所有的文件,使数据库处于安装模式,然后使用  recover database until change命令恢复数据库,直到丢失重做日志文件的first_change# 值,使用重设日志选项打开数据库:

SQL> shutdown immediate; [oracle@localhost ~]$ cd $ORACLE_HOME/oradata/new [oracle@localhost new]$ rm -rf *.dbf [oracle@localhost new]$ rm -rf *.ctl [oracle@localhost new]$ cd ./backup [oracle@localhost new]$ mv ./backup/* . [oracle@localhost new]$ exit SQL> startup mount <.....output trimmed .....> Database mounted. SQL> recover database until change 446985; Media recovery complete. SQL> alter database open resetlogs; Database altered. SQL>

情景4:  从活动群的丢失的重做日志中恢复

实例恢复需要活动的群成分,因此你可能需要执行不完全恢复,如果你丢失了所有的成员,因为你已在当前状态下对群成员完成,记住,当重做日志文件的活动成员丢失时,要采取的第一个措施是运行alter system checkpoint 命令,如果成功运行,那就继续操作,清除重做日志文件,正如在丢失的不活动成员中完成的那样。

如果失败了,那么你就只有一个选择,就是执行不完全恢复,在当前群的丢失情境中所有的步骤是一样的。