Oracle 恢复方案和等同的RMAN技巧

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

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

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

 

1. 介绍

2. 测试平台

3. 示例

  3.1. 从完整冷备份中完全还原数据库

  3.2. 仅从完整冷备份中还原数据文件(当前控制文件可用)

  3.3. 从完整(热或冷)备份中还原数据文件并完全恢复

  3.4. 从完整(热或冷)备份中还原数据文件的一个子集并完全恢复

  3.5. 从(热或冷)备份中还原数据文件和控制文件并完全恢复

  3.6. 从(热或冷)备份中还原数据文件和控制文件并完全恢复。备份控制文件时,一个数据文件被添加。

  3.7. 从(热或冷)备份中还原数据文件,当前控制文件可用,并不完全恢复

  3.8. 从(热或冷)备份中还原数据文件和控制文件,并不完全恢复

  3.9. 还原数据库的一个子集(在还原和恢复时跳过表空间)。当前控制文件和重做日志可用。

  3.10. 将文件还原到新位置

1. 介绍

  本文探讨Oracle7的恢复方案,并解释如何使用RMAN在类似情况恢复数据库。本文比较Oracle7的使用与RMAN常见恢复方案。

需要注意的术语。一个Oracle7冷备份相当于Oracle 8i/9i中的(RMAN)脱机(关闭)备份。一个Oracle7热备份相当于Oracle 8i/9RMAN)联机(打开)备份。

本文中的例子并不详尽;仅仅是常见的还原和恢复方案。你始终应该在生产环境中实施之前,测试所有备份和恢复过程。

2. 测试平台

  O/S: Sun Solaris 2.6

  RMAN 客户版本:8.0.5

  RMAN 恢复目录数据库:8.0.5

  目标数据库:8.0.5

  在测试期间,使用了一个恢复目录recovery catalog,相对于目标数据库控制文件。

3. 示例

  3.1. 从完整冷备份中完全还原数据库

   Oracle7 备份:数据文件,控制文件,重做日志的冷备份

   Oracle8/9 备份:RMAN 脱机数据库备份

   目标数据库模式:Noarchivelog

   丢失:当前数据库完全丢失(数据文件,控制文件,重做日志)

   要求:在备份‘time’打开数据库

   

   Oracle 7 还原/恢复:

       o. 还原数据文件,控制文件,重做日志的冷备份

       o. 启动

   Oracle 8/9 (RMAN) 还原/恢复:

     目标数据库模式:实例被启动(数据库unmounted

     示例RMAN 脚本:

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> restore controlfile to ‘<destination>’;

       RMAN> sql “alter database mount”;

       RMAN> restore database;

       RMAN> sql “alter database open resetlogs”;

       RMAN> }

     * 重要提示 *

      o. RMAN 不备份联机重做日志。因此,在数据库被还原后必须使用resetlogs打开。

      o. RMAN 检测一个备份控制文件被还原,并允许在打开时指定resetlogs

  3.2. 仅从完整冷备份中还原数据文件(当前控制文件可用)

   Oracle7 备份:数据文件,控制文件,重做日志的冷备份

   Oracle8/9 备份:RMAN 脱机数据库备份

   目标数据库模式:Noarchivelog

   丢失:所有当前数据文件丢失。当前控制文件和重做日志仍可用。

   要求:在备份‘time’ 打开数据库

   

   本示例模拟了当前数据库数据文件丢失。

   Oracle 7 还原/恢复:

     示例:

       o. 还原数据文件的冷备份(可选择重做日志)

       o. Mount数据库

       o. 执行恢复(recover database until cancel,且cancel不应用任何日志)

       o. 使用resetlogs打开数据库

     注:

       o. 为了重建(或重新初始化,如果重做日志备份被还原)重做日志,必须使用resetlogs打开数据库。

   Oracle 8/9 (RMAN) 还原/恢复:

     目标数据库模式:数据库mounted

     示例RMAN 脚本:

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> restore database;

       RMAN> set until logseq=1 thread=<thread number>;

       RMAN> recover database;

       RMAN> sql “alter database open resetlogs”;

       RMAN> }

     注:

       o. 因为需要重建重做日志,必须强制force一个resetlogs“set until….”“recover database”命令有效地执行伪恢复来完成这点,且可以使用resetlogs打开数据库。在数据文件被还原后指定‘set until’子句非常重要,否则RMAN将尝试从当前日志序列为#1之前的备份中还原数据文件!

     @ o. 使用以上步骤导致内部RMAN 错误RMAN-600 [6960]。对此记录了bug 1562459 。以上步骤被重新测试且我无法重新生成内部错误。如果生成了错误。指定logseq=2 而不是logseq=1 (对于每个bug解决方法)。

  3.3. 从完整(热或冷)备份中还原数据文件并完全恢复

   Oracle7 备份:数据文件的冷或热备份

   Oracle8/9 备份:RMAN 脱机或联机数据库备份

   目标数据库模式:Archivelog

   丢失:所有当前数据文件丢失。当前控制文件和重做日志仍可用。

   要求:还原并完全恢复

   该示例模拟了当前数据库数据文件的丢失。

   当前控制文件和重做日志仍完整。

   Oracle 7 还原/恢复:

     示例:

       o. 还原热或冷数据文件备份

       o. 如果恢复需要,还原归档日志

       o. Mount数据库

       o. 通过前滚归档和联机日志执行完全媒体恢复,并打开数据库。

   Oracle 8/9 (RMAN) 还原/恢复:

     目标数据库模式:数据库mounted

     示例RMAN 脚本:

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> restore database;

       RMAN> recover database;

       RMAN> sql “alter database open”;

       RMAN> }

     注:

       o. 归档日志会自动按要求被还。

          可以从一个归档备份集中还原,但不是必须的。

  3.4. 从完整(热或冷)备份中还原数据文件的一个子集并完全恢复

   Oracle7 备份:数据文件的冷或热备份

   Oracle8/9 备份:RMAN 脱机或联机数据库备份

   目标数据库模式:Archivelog

   丢失:当前数据文件的一个子集丢失。当前控制文件和重做日志仍可用。

   要求:还原并完全恢复

   本示例模拟了数据库数据文件的其中一个丢失。

   当前控制文件和重做日志仍完整。

   Oracle 7 还原/恢复:

     示例1 (数据库关闭):

       o. 还原热或冷数据文件备份

       o. 如果恢复需要,还原归档日志

       o. 通过前滚归档和联机日志执行完全媒体恢复,并打开数据库。

     示例2(数据库打开):

       o. (immediate)脱机数据文件所属表空间

       o.还原丢失的数据文件

       o. 执行表空间恢复

       o. 联机表空间

   Oracle 8/9 (RMAN) 还原/恢复:

     示例 1:(数据库mounted

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> restore datafile ‘<filename>’/<filenumber>;

       RMAN> recover datafile ‘<filename>’/<filenumber>;

       RMAN> sql “alter database open”;

       RMAN> }

     示例2:(数据库打开)

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> sql “alter tablespace <TBS> offline immediate”;

       RMAN> restore datafile ‘<filename>’/<filenumber>;

       RMAN> recover datafile ‘<filename>’/<filenumber>;

       RMAN> sql “alter tablespace <TBS> online”;

       RMAN> }

  

  3.5. 从(热或冷)备份中还原数据文件和控制文件并完全恢复

   Oracle7备份:数据文件和控制文件的冷或热备份

   Oracle8/9 备份:RMAN 脱机或联机数据库备份

   目标数据库模式:Archivelog

   丢失:所有当前数据文件和控制文件丢失。联机重做日志仍可用。

   要求:还原并完全恢复。

   该方案模拟了除联机日志以外一切丢失。即仍可执行完全数据库恢复。

   Oracle 7 还原/恢复:

     示例:

       o. 还原热或冷数据库备份(包括控制文件备份)

       o. 如果恢复需要,还原归档日志

       o. 通过前滚归档日志执行完全媒体恢复,并使用resetlogs打开数据库。

          必须在恢复命令中指定‘Backup controlfile’,并手动应用联机日志(自动恢复会使用与联机日志相同的日志序列号搜索归档日志)。

          

   Oracle 8/9 (RMAN) 还原/恢复:

     目标数据库模式:示例启动,数据库未mounted

     示例:

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> restore controlfile to ‘<destination>’;

       RMAN> sql “alter database mount”;

       RMAN> restore database;

       RMAN> recover database;

       RMAN> sql “alter database open resetlogs”;

       RMAN> }

     Notes:

       o.除非恢复目录注意到从备份直到当前时间的创建的归档日志,否则它不知道在哪里找到这些日志将数据库前滚。因此使用‘catalog archivelog..’命令注册任何‘missing’日志是很重要的。这应该在RMAN’recover database’命令之前完成。这就是为什么应该经常同步恢复目录。

       o. RMAN自动检测磁盘上的联机重做日志,并将它们自动应用到完全恢复

  3.6. 从(热或冷)备份中还原数据文件和控制文件并完全恢复。备份控制文件时,一个数据文件被添加。

   Oracle7 备份:数据文件和控制文件的冷或热备份

   Oracle8/9 备份:RMAN 脱机或联机数据库备份

   目标数据库模式;Archivelog

   丢失:所有当前数据文件和控制文件丢失。

         联机重做日志仍可用。

   要求:还原并完全恢复

   该方案不常见。从创建最后备份起,一个数据文件被添加到数据库,且现在DBA 需要从备份(包括控制文件)中还原备份且没有新数据文件的备份。

   Oracle 7 还原/恢复:

     示例:

       o. 还原热或冷数据库备份(包括控制文件备份)

       o. 如果恢复需要,还原归档日志

       o. (使用备份控制文件)启动恢复。恢复会话会失败显示错误:

            ORA-01244: unnamed datafile(s) added to controlfile …

            ORA-01110: data file N: ‘<filename>’

          此时,创建一个新的数据文件:

            ALTER DATABASE CREATE DATAFILE….

       o. 继续恢复

     注:

       o. 参见 Note:29430.1 获取这个情况下完整恢复信息

       o. 仅在Oracle7.3Oracle7.3之前的版本中可用该技巧,新添加的数据文件可能会丢失。

   Oracle 8/9 (RMAN) 还原/恢复:

     目标数据库模式:实例启动,数据库未mounted

     示例:

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> restore controlfile to ‘<destination>’;

       RMAN> sql “alter database mount”;

       RMAN> restore database skip tablespace <newtbs>;

       RMAN> }

       此时,任何RMAN 恢复(如果成功参见以下bug:720033 )会遇到与传统恢复相同的警报即ORA-01244ORA-01110。我建议使用Oracle7 技巧来前滚数据库,创建新的数据文件,并完全媒体恢复。

       

     注:

       o. 如果新的数据文件是该表空间中唯一的文件,则可以使用‘restore database skip tablespace…’ 命令,否则使用多个‘recover datafile’ 命令来恢复所有其他数据文件。

       o. 在使用‘recover database skip tablespace….’命令时,我遇到了一个问题。参见bug 720033获取详情。

  3.7. 从(热或冷)备份中还原数据文件,当前控制文件可用,并不完全恢复

   Oracle7 备份:数据文件的冷或热备份

   Oracle8/9 备份:RMAN脱机或联机数据库备份

   目标数据库模式:Archivelog

   丢失:所有当前数据文件丢失。当前控制文件和重做日志仍可用。

   要求:还原并不完全恢复

   在许多情况下这种方案是常见的。例如,可能有必要执行时间点恢复来恢复被drop的表。也可能完全恢复不是一种选择,因为归档日志不可用。

   Oracle 7 还原/恢复:

     示例:

       o. 还原热或冷数据库备份

       o. 如果恢复需要,还原归档日志

       o. 通过前滚归档日志执行表不完全媒体恢复,并使用resetlogs打开数据库。

          数据库被恢复的时间点取决于恢复命令的‘until’ (cancel, time,或change)子句。

   Oracle 8/9 (RMAN) 还原/恢复::

     目标数据库模式:数据库mounted

     示例:

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> set until logseq|scn|time ……;

       RMAN> restore database;

       RMAN> recover database;

       RMAN> sql “alter database open resetlogs”;

       RMAN> }

     注:

       o. ‘set until’子句指定数据库会被恢复到的‘time’

       o. ‘set until’ 子句相当于Oracle7恢复命令的‘until’ 子句

       o. 如果指定了‘logseq’,数据库被恢复到归档日志的末尾,在命令中指定的日志序列之前。

  3.8. 从(热或冷)备份中还原数据文件和控制文件,并不完全恢复

   Oracle7 备份:数据文件的冷或热备份

   Oracle8/9 备份:RMAN 脱机或联机数据库备份

   目标数据库模式:Archivelog

   丢失:所有当前数据文件和控制文件丢失。

   要求:还原并不完全恢复

   这与3.4类似,了当前控制文件丢失。这实际上是当前数据库的完全丢失。

   Oracle 7 还原/恢复:

     示例:

       o. 还原热或冷数据库和控制文件备份。

       o. 如果恢复需要,还原归档日志

       o. 通过前滚归档日志执行不完全媒体恢复,并使用resetlogs打开数据库。

          在这种情况下,必须在恢复命令中指定 ‘using backup controlfile’ 选项。

   Oracle 8/9 (RMAN) 还原/恢复:

     示例:

     目标数据库模式:NOMOUNT下数据库

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> set until logseq|scn|time ……;

       RMAN> restore controlfile;

       RMAN> restore database;

       RMAN> alter database mount

       RMAN> recover database;

       RMAN> sql “alter database open resetlogs”;

       RMAN> }

  3.9. 还原数据库的一个子集(在还原和恢复时跳过表空间)。当前控制文件和重做日志可用。

   Oracle7 备份:数据文件的冷或热备份

   Oracle8/9 备份:RMAN脱机或联机数据库备份

   目标数据库模式:Archivelog noarchivelog (取决于备份,以及是否执行了恢复)

   丢失:所有当前数据文件和控制文件丢失。

   要求:还原并完全恢复

   如果你不想要还原大型临时表空间,这个方法就非常实用。跳过这种表空间的还原和恢复,在数据库被打开后再重建一个可能会更快捷。另一个示例是为了恢复被drop表还原数据库。在这种情况下,你可能只想还原并恢复包含表数据的表空间(以及系统和回滚段表空间)。

   示例3.10 包含这样的情况。

   以下示例显示完全恢复,但是这些技术同样可以适用于不完全媒体恢复。 此外没有要执行的恢复,也可使用这些技术。

   Oracle 7 还原/恢复:

     示例:

       o. 还原热或冷数据库和控制文件备份

       o. 如果恢复需要,还原归档日志

       o. Mount数据库并脱机属于不需要的表空间的数据文件。

       o. 恢复数据库

       o. 打开数据库并drop数据文件未被还原的表空间(如果需要,再进行重建)

   Oracle 8/9 (RMAN) 还原/恢复:

     示例 1 (媒体恢复):

     目标数据库模式:数据库mounted

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> restore database skip tablespace temp;

       RMAN> recover database skip tablespace temp;

       RMAN> sql “alter database open”;

       RMAN> sql “drop tablespace temp”;

       RMAN> sql “create tablespace temp datafile ”<filename>””;

       RMAN> }

     示例2 (无媒体恢复):

     目标数据库模式:数据库mounted

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> restore database skip tablespace temp;

       RMAN> sql “alter database datafile ”<temp datafile>” offline drop”;

       RMAN> sql “alter database open”;

       RMAN> sql “drop tablespace temp”;

       RMAN> sql “create tablespace temp datafile ”<filename>””;

       RMAN> }

  3.10. 将文件还原到新位置

   Oracle7 备份:数据文件的冷或热备份

   Oracle8/9 备份:RMAN 脱机或联机数据库备份

   目标数据库模式:Archivelog noarchivelog (取决于备份,以及是否执行了恢复)     

   丢失:所有当前数据文件和控制文件丢失。

   要求:还原和完全恢复

   本示例模拟了一个数据库还原到不同的系统文件,或甚至是不同的服务器。当文件系统或原始主机丢失时,这是常见的。它也是用于将数据库的一个子集还原到不同位置,并执行不完全恢复来恢复被drop表的技术。.

   以下示例显示了完全媒体恢复,但也可以在没有媒体恢复,或不完全恢复的情况下使用这些技术。

   Oracle 7 还原.恢复:

     示例:

       o. 将热或冷数据库备份还原到新的位置

       o. 如果恢复需要,还原归档日志

       o. Mount数据库

       o. 使用‘alter database rename file’ 命令使控制文件知道哪里找到被还原的数据文件。(以及可选的重做日志)

       o. 如果需要,恢复数据库

       o. 打开数据库

   Oracle 8/9 (RMAN) 还原/恢复:

     示例:

     目标数据库模式:数据库mounted

       RMAN> run {

       RMAN> allocate channel t1 type ‘sbt_tape’;

       RMAN> set newname for datafile 4 to ‘<newfilename>’;

       RMAN> restore database;

       RMAN> switch datafile 4;

       RMAN> recover database;

       RMAN> sql “alter database open”;

       RMAN> }

     注:

       o. In the above example the ‘set newname’ command tells RMAN

          where to restore, in this case, datafile 4. The ‘switch’

          command is equivalent to the Oracle7 ‘alter database

          rename file’ command. 在上面的例子中, ‘set newname’命令告诉RMAN 在哪里恢复,在这里是数据文件4‘switch’命令等同于Oracle7‘alter database rename file’命令。

相关文档

Oracle8/9 备份和恢复指南

Oracle8i/9i Recovery Manager 用户指南和参考

Oracle文档在线提供 http://otn.oracle.com and http://tahiti.oracle.com

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号