恢复 Oracle 数据库

使用管理控制台恢复数据库

恢复到原始数据库会将原始生产应用数据替换为指定时间点的映像。此恢复操作会导致所有当前应用数据丢失,因为应用会恢复到创建映像时的状态。此操作无法撤消。完成恢复操作所需的时间取决于涉及的数据量。您还可以将数据库恢复到其他目标

按照以下说明操作,即可使用 RMAN 从管理控制台自动恢复 Oracle 数据库,并覆盖原始生产数据库。

  1. 打开管理控制台,前往应用管理器,然后输入数据库应用名称或使用过滤器查找所需的数据库映像。

  2. 右键点击相应应用,然后选择访问

  3. 访问页面上,选择一个映像,然后点击装载菜单下的恢复

  4. 恢复页面上,选择传统(而非“装载并迁移”)。

  5. 使用恢复范围滑块选择要将数据库恢复到的特定时间点。将滑块工具一直滑动到最左侧,以仅恢复数据库而不应用任何日志。

  6. 用户名中,输入所选目标服务器上的 Oracle 软件所有者。

  7. 对于通道数,请指定要配置并行性的 RMAN 通道数,以进行数据库恢复。

  8. 点击提交

  9. 系统会显示一个警告对话框。阅读该声明,然后输入 DATA LOSS 进行确认。

  10. 作业已排队等待下一个可用的作业槽。您可以在作业监控器中查看进度。

使用管理控制台将数据库恢复到任何目标

按照以下说明,使用管理控制台中的 RMAN 将 Oracle 数据库恢复到新目标。

  1. 应用管理器 > 应用列表中,右键点击数据库并选择访问
  2. 选择要恢复的备份映像,然后选择恢复
  3. 在“恢复”页面上,选择传统

    • 目标:对于所有配置,所有符合条件的 Oracle 数据库服务器都可以从下拉菜单中选择。从下拉菜单中选择恢复的目标服务器。
    • 替换原始应用身份:此选项仅在恢复到最初生成备份的同一设备上的新服务器时可用。
    • :这会替换原始应用,并具有与原始应用相同的应用 ID、作业历史记录、备份映像和备份方案。
    • :这不会替换原始应用。新数据库将在恢复作业中作为新应用被发现。
    • 前滚时间:为受日志保护的数据库选择一个日期和时间,以便恢复到所需的时间点。
    • 申请选项

      • DATABASESID:系统会预先填充受保护的数据库 SID 名称,并且该名称不可变。
      • USERNAME:系统会预先填充源数据库 Oracle 软件所有者。如果所选目标服务器上的 Oracle 软件所有者不同,请更新 USERNAME
      • ORAHOME:系统会预先填充源数据库 Oracle 主路径。 如果所选目标服务器上的 Oracle 主目录不同,请更新 Oracle 主目录。
      • 高级选项:此字段已预先填充,显示备份时源中的所有数据库参数设置(来自 pfile)。确保参数值对于要恢复的目标数据库服务器(源或新目标)是正确的。
  4. 映射选项

    • 目标数据库类型:从下拉列表中选择数据库的目标类型(ASM 磁盘组或文件系统)。ASM 格式的备份映像不支持文件系统目标类型。

      源数据库 备用图片格式 恢复目标
      ASM ASM ASM
      ASM 文件系统 ASM
      文件系统 文件系统 文件系统
    • 从下拉列表中选择三种文件类型(数据文件、控制文件和数据库的重做文件)的目标 ASM 磁盘组和文件系统映射。

  5. 点击预检。如果预检检查失败,请解决问题并再次运行预检检查。

  6. 点击提交以提交恢复作业。

使用 RMAN 手动恢复 Oracle 数据库

如需手动恢复 Oracle 数据库,请参阅以下程序。

非 RAC、非 ASM、文件系统

恢复数据文件位于文件系统上且受基于文件的暂存磁盘格式保护的 Oracle 数据库

  1. 装载来自受保护源数据库的映像。

    装载窗口的映射选项中,为映像提供装载位置,例如:/acttestdb。如需了解如何装载数据库映像,请参阅装载受文件系统保护的 Oracle 数据库映像以进行数据访问

    数据库备份映像已装载到:/acttestdb

    受保护的归档日志装载在:/acttestdb_Log

  2. 设置 Oracle 环境并使用 sqlplus 关闭数据库:

    sqlplus / as sysdba
    sql> shutdown immediate;
    

    验证数据库是否已关闭。结束数据库的任何剩余进程。

    ps -ef | grep database sid
    
  3. 使用已装载卷中的备份参数文件在 nomount 状态下启动数据库。备份参数文件位于顶级装载文件夹下,例如 /acttestdb

  4. 设置 Oracle 环境并使用 sqlplus 启动数据库:

    sqlplus / as sysdba
    sql> startup nomount pfile='/acttestdb/database sid___backup.ora';
    
  5. 从现有 pfile 创建新的 spfile 并重启数据库。

    从 pfile 创建 spfile:

    create spfile='$ORACLE_HOME/dbs/spfile_database sid.ora' from pfile='/acttestdb/database sid___backup.ora';
    

    在 nomount 状态下使用 spfile 重启数据库:

    shutdown immediate;
    startup nomount;
    
  6. 使用 RMAN 从 Backup and DR 装载的归档日志映像恢复控制文件。使用已装载的日志映像中的最新控制文件,例如:

    /acttestdb_Log/cf D_sid-id_Target SID.ctl
    

    或者,如果日志图片不止一张:

    /acttestdb_Log_1/cf-D_sid-id_Target SID.ctl

       rman target /
       restore controlfile from '/acttestdb_Log_1/cf-D_<var>sid</var>-id_<var>id</var>.ctl' ;
    
  7. 装载数据库:

       alter database mount;
    
  8. 将来自备份和灾难恢复装载的数据库映像和归档日志映像的数据文件和归档日志文件夹编入 RMAN 目录:

       run {
         catalog start with '+acttestdg/db_name/datafile' noprompt;
         catalog start with '+acttestdg/db_namearchivelog' noprompt;
         catalog start with 'mountpoint_log' noprompt;
         }
    
  9. 恢复和还原数据库:

      run { restore database ; recover database; }
    

    对于使用 yyyymmddhh24mi 格式的特定时间点恢复:

       run
        {
        restore database;
        recover database until time "to_date('timestamp','yyyymmddhh24mi')";
        }
    
  10. 使用重置日志选项打开数据库。

    • 对于主数据库恢复:

      alter database open resetlogs;
      
    • 对于 Data Guard 备用数据库恢复,请启动 Data Guard 管理的恢复进程:

      alter database recover managed standby database nodelay disconnect;
      

    数据库可用于读取和写入。

RAC 或独立 ASM、文件系统

恢复数据文件位于 ASM 磁盘组上且受基于文件的暂存磁盘格式保护的 Oracle 数据库

  1. 装载来自受保护源数据库的映像。

    在“装载”窗口的“映射选项”下,为映像提供装载位置,例如:/acttestdb。如需了解如何装载数据库映像,请参阅装载受文件系统保护的 Oracle 数据库映像以进行数据访问

    数据库备份映像装载在装载位置:/acttestdb

    受保护的归档日志装载在:/acttestdb_Log

  2. 关闭 Oracle 数据库。从节点 1,切换到 Oracle 操作系统用户:

    su - oracle

    设置 Oracle 环境并使用 srvctl 停止所有节点上的数据库:

    srvctl stop database -d <var>database_name</var>

    验证数据库是否已关闭(所有节点)。结束数据库的任何剩余进程。

    ps -ef | grep <var>database_name</var>

  3. 使用已装载卷中的备份参数文件在未装载状态下启动数据库。备份参数文件位于顶级装载文件夹下,例如 /acttestdb

  4. 设置 Oracle 环境并使用 sqlplus 启动数据库:

    sqlplus / as sysdba
    startup nomount pfile='/acttestdb/<var>database_name</var>___backup.ora';
    
  5. 创建新的 spfile 并重启数据库。

    获取磁盘组下原始 spfile 的路径:

    cat $ORACLE_HOME/dbs/init{数据库 SID}.ora

    例如:spfile=+{首选磁盘组}/db_name/spfiledb_name.ora`

      create spfile='+{preferred disk group}/{db name}/spfile<var>db_name</var>.ora' from pfile='/acttestdb/<var>db_name</var>___backup.ora';
    

    在 nomount 状态下使用 spfile 重启数据库:

      shutdown immediate;
      startup nomount;
    
  6. 使用 RMAN 从 Backup and DR 已装载的归档日志映像恢复控制文件。使用日志装载映像中的最新控制文件,例如:

    /acttestdb_Log/cf-D_<var>db_name</var>-id_<var>db_id</var>.ctl
    

    或者,如果您有多张日志图片:

    /acttestdb_Log_1/cf-D_<var>db_name</var>-id_<var>db_id</var>.ctl
    
       target /
       restore controlfile from '/acttestdb_Log_1/cf-D_<var>db_name</var>-id_<var>db_id</var>.ctl' ;
       ```
    
  7. 装载数据库:

     alter database mount;
    
  8. 将来自备份和灾难恢复已挂载数据库映像和归档日志映像的数据文件和归档日志文件夹编入 RMAN 目录:

     run { catalog start with '/acttestdb/datafile' noprompt;
     catalog start with '/acttestdb/archivelog' noprompt;
     catalog start with '/acttestdb_Log' noprompt;}
    
  9. 恢复和还原数据库:

     run { restore database ; recover database; }
    

    对于使用 yyyymmddhh24mi 格式的特定时间点恢复:

     run
     {
     restore database;
     recover database until time "to_date('<var>timestamp</var>','yyyymmddhh24mi')";
     }
    
  10. 使用重置日志选项打开数据库。

    • 对于主数据库恢复:
    alter database open resetlogs;
    

    RAC 配置在重置日志后需要执行另一个步骤:关闭节点 1 上的数据库,然后在所有节点上启动数据库。

    使用 sqlplus 关闭数据库:

      sqlplus / as sysdba
      shutdown immediate;
      ```
    Use srvctl to start the database across all nodes:
    
     ```srvctl
      srvctl start database -d <var>database_name</var>
      ```
    + For Data Guard standby database recovery:
    
      + For non-RAC config: Start the Data Guard managed recovery process
    
          ```rman
          alter database recover managed standby database nodelay disconnect;
          ```
    
      + For RAC config: Shut down the database on node 1 and start the
        database in mounted state across all nodes.
    
         1. Use sqlplus to shut down the database:
    
              ```sqlplus
              / as sysdba
              shutdown immediate;
              ```
    
         1. Use srvctl to start the database in a mount state across all
            nodes:
    
             ```srvctl
             srvctl start database -d <var>database_name</var> -o mount
             ```
    
         1. Start the Data Guard managed recovery process:
    
             ```rman
             alter database recover managed standby database nodelay disconnect;
             ```
    

数据库可用于读取和写入。

RAC 或独立 ASM、ASM 磁盘组

恢复数据文件位于 ASM 磁盘组上且受 ASM 磁盘组暂存磁盘格式保护的 Oracle 数据库

  1. 装载来自受保护源数据库的映像。在“装载”窗口中,在“RAC 节点 1 上的 ASM”下提供映像装载的首选磁盘组。如需详细了解如何装载数据库映像,请参阅装载受 ASM 磁盘组保护的 Oracle 数据库映像以进行数据访问

    例如,在装载屏幕上:

    • 选择主机:RAC 节点 1 数据库服务器

    • 首选磁盘组:acttestdg

    • RAC 节点列表:RAC 节点 1 的 IP

      备份参数文件会复制到 /act/touch/<var>preferred_disk_group</var>/ 下,例如:

      /act/touch/acttestdg/<var>database_name</var>___backup.ora

  2. 关闭 Oracle 数据库。

    从节点 1,切换到 Oracle 操作系统用户:

     su - oracle
    

    设置 Oracle 环境。使用 srvctl 停止所有节点上的数据库:

     srvctl stop database -d <var>database_name</var>
    

    验证数据库是否已关闭(在所有节点上)。结束数据库的任何剩余进程。

    ps -ef | grep <var>db_name</var>
    
  3. 使用复制到 /act/touch/acttestdg 下的备份参数文件,以 nomount 状态启动数据库。

  4. 设置 Oracle 环境。使用 sqlplus 启动数据库:

    ```sqlplus
    / as sysdba
    startup nomount pfile='/act/touch/acttestdg/<var>db_name</var>___backup.ora';
    ```
    
  5. 创建新的 spfile 并重启数据库。

    获取磁盘组下原始 spfile 的路径:

     ```sqlplus
     cat $ORACLE_HOME/dbs/init(database sid).ora
     ```
    

    例如:spfile=+preferred disk group/db_name/spfiledb_name.ora

         create spfile='+<var>preferred disk group</var>/<var>db_name</var>/spfile<var>db_name</var>.ora' from pfile='/act/touch/acttestdg/<var>db_name</var>___backup.ora';
    

    在 nomount 状态下使用 spfile 重启数据库:

     ```sql
     shutdown immediate;
     startup nomount;
     ```
    
  6. 使用 RMAN 从 Backup and DR 装载的归档日志映像恢复控制文件。 使用日志装载映像中的最新控制文件,例如:
    /acttestdb_Log/cf-D_<var>db_name</var>-id_<var>db_id</var>.ctl;或者,如果存在多个日志映像,则使用:
    /acttestdb_Log_1/cf-D_<var>db_name</var>-id_<var>db_id</var>.ctl

     ```rman
     rman target /
     restore controlfile from '/acttestdg_Log_1/cf-D_<var>db_name</var>-id_<var>db_id</var>.ctl' ;
     ```
    
  7. 装载数据库:

     ```rman
     alter database mount;
     ```
    
  8. 将数据文件和归档日志文件夹从备份和灾难恢复装载的数据库映像和归档日志映像编入 RMAN 目录:

     ```rman
     run { catalog start with '+acttestdg/<var>db_name</var>/datafile' noprompt;
     catalog start with '+acttestdg/<var>db_name</var>/archivelog' noprompt;
     catalog start with '/acttestdg_Log' noprompt;}
     ```
    
  9. 恢复和还原数据库:

     ```rman
     run { restore database ; recover database ; }
     ```
    

    如需进行特定时间点恢复,请按如下所示运行恢复命令:

     ```rman
     run
     {
     restore database;
     recover database until time "to_date('<var>timestamp</var>','yyyymmddhh24mi')";
     }
     ```
    
  10. 使用重置日志选项打开数据库。

    • 对于主数据库恢复:

       alter database open resetlogs;
      

      RAC 配置需要执行另一个步骤:重置日志后,关闭节点 1 上的数据库,然后在所有节点上启动数据库。使用 sqlplus 关闭数据库:

       / as sysdba
       shutdown immediate;
      

      使用 srvctl 在所有节点上启动数据库:

       start database -d <var>database_name</var>
      
    • 对于 Data Guard 备用数据库恢复:

      • 对于非 RAC 配置:启动 Data Guard 受管恢复进程:

        alter database recover managed standby database nodelay disconnect;
        
      • 对于 RAC 配置:关闭节点 1 上的数据库,并在所有节点上以装载状态启动数据库。

        1. 使用 sqlplus 关闭数据库:

          as sysdba
          shutdown immediate;
          
        2. 使用 srvctl 在所有节点上以装载状态启动数据库:

          start database -d <var>database_name</var> -o mount
          
        3. 启动 Data Guard 受管恢复进程:

          alter database recover managed standby database nodelay disconnect;
          

    数据库可用于读取和写入。

恢复 Oracle 表空间和数据文件

如需恢复单个表空间数据文件(例如,由于数据损坏),请执行以下操作:

  1. 将备份/恢复设备中的最新数据库快照装载回 Oracle 服务器。

  2. 将数据库备份快照编入 RMAN 目录。

  3. 使用备份快照恢复和还原表空间,详见此处。

恢复 ASM 磁盘组上生产数据库的单个表空间

将生产数据库的单个表空间恢复到主节点:

  1. 装载数据库时间点快照,如将 Oracle 数据库装载为标准装载中所述。

  2. 在“装载”窗口的“映射选项”下,为映像提供装载位置。例如,对于 ASM 磁盘组下的映像,请在“首选磁盘组”下提供磁盘组名称;对于文件系统下的映像,请提供装载位置,例如 /acttestdb

  3. 从主节点以 Oracle 操作系统用户身份登录到数据库服务器。

  4. 设置数据库环境并登录到 RMAN:

    rman target /
    
  5. 在 RMAN 提示符下,编目备份数据文件和归档日志文件夹:

    示例:受 ASM 磁盘组保护的数据库映像(已装载的 ASM 磁盘组名称“+acttestdg”):

    ```rman
    catalog start with '+acttestdg/<var>db_name</var>/datafile' noprompt;
    catalog start with '+acttestdg/<var>db_name</var>/archivelog' noprompt;
    catalog start with &#8216;/<var>mountpoint_log</var>'; noprompt;
    (If archivelogs are protected by Backup and DR)
    ```
    

    示例:受文件系统保护的数据库映像(已挂载的文件系统名称为“/acttestdb”):

    ```rman
    catalog start with '/acttestdb/datafile' noprompt;
    catalog start with '/acttestdb/archivelog'
    noprompt;
    catalog start with '/acttestdb_log/archivelog' noprompt;
    ```
    
    (If archivelogs are protected by Backup and DR)
    

    现在,您可以运行所有 RMAN 恢复命令,例如:

  6. 完成后,请卸载并删除映像。

恢复表空间

如需恢复表空间,请执行以下操作:

    ```rman
    restore tablespace <var>tablespace name</var>;
    recover tablespace <var>tablespace name</var>;
    ```

恢复数据文件

如需恢复数据文件,请执行以下操作:

    ```rman
    restore datafile <var>file#</var>;
    recover datafile <var>file#</var>;
    ```

恢复损坏的数据库块

如需恢复损坏的数据库块,请执行以下操作:

  1. 按照将 Oracle 数据库装载为标准装载中的详细说明,装载数据库时间点快照。

  2. 装载窗口的映射选项中,为映像提供装载位置。例如,对于 ASM 磁盘组中的映像,请在“首选磁盘组”下提供磁盘组名称;对于文件系统中的映像,请提供装载位置,例如 /acttestdb。

  3. 从主节点以 Oracle 操作系统用户身份登录到数据库服务器。

  4. 设置数据库环境并登录 sqlplus,然后查询 v$database_block_corruption 以检查损坏的块:

    ```sh
    sqlplus / as sysdba
    sql> SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
    ```
    
  5. 登录 RMAN 以恢复所有损坏的块:

    ```rman
    rman target /
    RECOVER CORRUPTION LIST;
    ```
    

    在恢复块后,数据库会将其从 V$DATABASE_BLOCK_CORRUPTION 中移除。

  6. 如需恢复单个损坏的块(例如:数据文件 8 和块 13),请执行以下操作:

    从 RMAN 提示符

    ```rman
    recover datafile 8 block 13;
    ```
    

恢复丢失的控制文件

如需恢复丢失的控制文件,请执行以下操作:

  1. 按照将 Oracle 数据库装载为标准装载中的详细说明,装载数据库时间点快照。

  2. 装载窗口的映射选项中,为映像提供装载位置。例如,对于 ASM 磁盘组下的映像,请在“首选磁盘组”下提供磁盘组名称;对于文件系统下的映像,请提供装载位置,例如 /acttestdb

  3. 从主节点以 Oracle 操作系统用户身份登录到数据库服务器。

  4. 设置数据库环境并登录 sqlplus,然后关闭数据库并在 nomount 状态下启动:

    对于独立数据库:

    ```sql
    sqlplus / as sysdba
    sql> shutdown immediate;
    sql> startup nomount;
    ```
    

    对于来自已装载映像节点的 RAC 数据库,请关闭所有节点上的数据库:

    ```sh
    srvctl stop database -d <var>db_name</var>
    sql> startup nomount;
    ```
    
  5. 从 Backup and DR 已装载的映像恢复控制文件。

    例如:/acttestdb(文件系统)和 +acttestdg(适用于 ASM)

    ```rman
    rman target /
    restore controlfile
    from '/acttestdb/cf-D_<var>db_name</var>-id_<var>db_id</var>.ctl' ; (Filesystem
    mount)
    restore controlfile
    from '+acttestdb/cf-D_<var>db_name</var>-id_<var>db_id</var>.ctl' ; (ASM
    mount)
    ```
    
  6. 通过 sqlplus 装载并打开数据库:

    ```sql
    sqlplus / as sysdba
    sql> alter database mount;
    sql> recover database until cancel;
    sql> alter database open resetlogs;
    ```
    

恢复 Oracle 可插拔数据库

如需恢复 Oracle 12c 或更高版本的可插入数据库 (PDB),请执行以下操作:

  1. 装载源数据库服务器中的映像以进行恢复。在装载窗口中,提供 RAC 节点 1 上 ASM 下的映像装载首选磁盘组。如需详细了解如何装载数据库映像,请参阅装载受 ASM 磁盘组保护的 Oracle 数据库映像以进行数据访问

  2. 关闭可插入数据库:

    1. 从节点 1,su 到 Oracle 用户

      su - oracle
      
    2. 设置 Oracle 环境。以“sysdba”用户身份连接到 Oracle 数据库:

         / as sysdba
         alter pluggable database <var>pluggable_db_name</var> close;
      
  3. 将来自备份和灾难恢复已挂载数据库映像和归档日志映像的数据文件和归档日志文件夹编入 RMAN 目录:

        run { catalog start with '+acttestdg/<var>db_name</var>/datafile' noprompt;
        catalog start with '+acttestdg/<var>db_name</var>/archivelog' noprompt;
        catalog start with '/acttestdg_Log' noprompt;
        }
    
  4. 恢复和还原可插拔数据库

        run
        {
        restore pluggable database <var>pluggable_db_name</var>;
        recover pluggable database <var>pluggable_db_name</var> until time "to_date('<var>required time stamp</var>>';,';yyyymmddhh24mi')";
        }
    
  5. 打开可插入数据库:

        alter pluggable database <var>pluggable_db_name</var> open;
    

可插拔数据库处于读写打开状态。

Oracle DBA 指南