在设备管理控制台中恢复和还原 Oracle 数据库

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

限制

  • 您无法对存储在指向备份保险柜的 OnVault 池中的 Oracle 数据库备份执行装载操作。

  • 您无法将 Oracle 数据库恢复到克隆的虚拟机。

  • 恢复 Oracle 数据库时,Backup and DR 会停用其备份方案选项(运行时间表、数据过期)。

使用 RMAN 恢复 Oracle 数据库

按照以下说明从设备管理控制台恢复 Oracle 数据库:

恢复数据库后,它会覆盖原始生产数据库。

  1. 在设备管理控制台中打开应用管理器,然后输入数据库应用名称或使用过滤条件查找所需的数据库备份。

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

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

  4. 在恢复页面上,选择传统。

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

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

  7. 在通道数字段中,指定 RMAN 通道数,以配置数据库恢复的并行性。

  8. 点击提交。

    系统会显示一个警告对话框。

  9. 输入 DATA LOSS,确认您要覆盖原始生产数据库并接受任何潜在的数据丢失。

    作业已加入队列,等待下一个可用的作业槽。您可以在作业监控器中查看队列的进度。

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

通过设备管理控制台使用 RMAN 将 Oracle 数据库恢复到新目标。

  1. 在应用管理器中,点击应用。

  2. 右键点击数据库,然后选择访问。

  3. 选择要恢复的备份,然后选择恢复。

  4. 在恢复页面上,选择传统。

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

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

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

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

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

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

使用 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. 将 Backup and DR 装载的数据库备份和归档日志备份中的数据文件和归档日志文件夹编入 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{database sid}.ora

    例如:spfile=+{preferred disk group}/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. 将 Backup and DR 装载的数据库备份和归档日志备份中的数据文件和归档日志文件夹编入 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. 将 Backup and DR 装载的数据库备份和归档日志备份中的数据文件和归档日志文件夹编入 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 ; }
     ```
    

    如需恢复到特定时间点,请运行以下 recover 命令:

     ```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 OS 用户身份登录数据库服务器。

  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. 将 Backup and DR 装载的数据库备份和归档日志备份中的数据文件和归档日志文件夹编入 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 指南