Previous Topic: Restore Point-in-TimeNext Topic: Database Recovery


恢复管理器 (RMAN) 和将数据库还原到备用服务器

在直接使用 RMAN 将数据库还原到备用服务器时,需要满足以下先决条件:

例如,考虑以下方案:

注意:以下过程中使用的方案假定从 <Server-A> 备份的数据库将还原到 <Server-B>,且保留该数据库名称。该方案还假定原始主机和目标主机的目录结构相同。此外,此方案还假定您使用的是 Oracle 10gR2。

要将数据库还原到备用服务器,请执行以下步骤:

  1. 以 oracle 用户的身份从备用服务器 Server-B 中编辑 /etc/oratab,并将以下行添加到原始数据库实例 src 中:
    src:/opt/oracle/10gR2:N
    
  2. 以 oracle 用户的身份执行 Oracle netca(oracle net 配置助手)工具,以便为 RMAN 编录数据库 catdb 配置一个 TNS 名称,并确保其在 Server-B 上安装的数据库中可见。
  3. 以 oracle 用户的身份创建与原始的 Server-A 相同的目录结构。

    例如:

    $cd $ORACLE_BASE/admin
    $mkdir src
    $mkdir adump  bdump  cdump  dpdump  pfile  udump
    $mkdir -p $ORACLE_BASE/oradata/src
    $mkdir -p $ORACLE_BASE/flash_recovery_area/SRC
    
  4. 运行 orasetup,以便为备用服务器 (Server-B) 上的原始数据库配置 oracle 代理。
    # /opt/CA/ABoraagt/orasetup
    
    

    当 orasetup 提示您使用恢复管理器编录处理数据库备份时,请指定“y”。

    Are you planning on using a Recovery Manager catalog to handle database backups (Recommended)?(Y/N) Y
    
    

    当 orasetup 提示您指定 Oracle 实例的名称时,请指定原始实例 ID。

    Oracle instance id to be used by this agent [<Enter> to end]: src
    该 Oracle 实例的 ORACLE_HOME 环境值:(默认值:/opt/oracle/10gR2):
    
    

    当 orasetup 提示您指定恢复管理器服务名称的名称时,请指定 RMAN 编录数据库的已配置 TNS 名称。

    Since you have configured the Recovery Manager, please provide  the Recovery Manager service name for database src.
    Recovery Manager service name : catdb
    
  5. 在 Server-B 中的 /opt/Arcserve/ABoraagt 文件夹下编辑 sbt.cfg 文件。删除下面的“#”并为 Server-A 输入主机名。
    # Node where the original backup was made from
    SBT_ORIGINAL_CLIENT_HOST=Server-A.
    
  6. 确保您能通过主机名从 Arcserve Backup 服务器到 Server-B 以及反向执行 ping 操作。
  7. 向备用服务器 (Server-B) 中添加一个 pfile。
  8. 使用创建的 pfile 以及“nomount”选项启动 src 数据库。
    $export ORACLE_SID=src
    $sqlplus /nolog
    SQL>conn sys/passw0rd as sysdba
    SQL>startup nomount pfile=$ORACLE_HOME/dbs/init$ORACLE_SID.ora
    SQL>exit
    
  9. 使用 RMAN 编录还原 spfile。
    $rman catalog rman/rman@catdb
    RMAN> set dbid=<源数据库 db_id 值> 
    RMAN> connect target system/passw0rd;
    RMAN>run {
    2>allocate channel ch1 type sbt parms='SBT_LIBRARY=/opt/Arcserve/ABoraagt/libobk64.so';
    3>restore spfile;
    4>release channel  ch1;
    5>}
    

    注意:对于 32 位 Oracle 数据库,SBT_LIBRARY 使用 libobk32.so。对于 64 位 Oracle 数据库,SBT_LIBRARY 使用 libobk64.so。

    还原作业在 Arcserve Backup 服务器作业队列上运行。当该作业完成时,spfile 数据库将还原到 $ORACLE_HOME/dbs 路径。

    关闭数据库。

    RMAN>shutdown immediate;
    RMAN>exit
    

    使用刚还原的 spfile 以及“nomount”选项重新启动数据库。

    $sqlplus /nolog
    SQL>conn sys/passw0rd as sysdba
    SQL>startup nomount
    SQL>quit
    
  10. 还原控制文件。
    $rman catalog rman/rman@catdb
    RMAN> set dbid=<源数据库 db_id 值> 
    RMAN> connect target system/passw0rd;
    RMAN> run { 
    2> allocate channel dev1 type 'sbt_tape' 
    parms='SBT_LIBRARY=/opt/Arcserve/ABoraagt/libobk64.so'; 
    3> restore controlfile; 
    4> release channel dev1; 
    5> } 
    

    或者,如果从特定备份片还原控制文件以执行时间点还原,请执行以下步骤:

    $ rman catalog rman/rman@catdb
    RMAN> set dbid=<源数据库 db_id 值> 
    RMAN> connect target system/passw0rd;
    RMAN> run { 
    2> allocate channel dev1 type 'sbt_tape' 
    parms='SBT_LIBRARY=/opt/Arcserve/ABoraagt/libobk64.so'; 
    3> restore controlfile from ‘Y’; 
    4> release channel dev1; 
    5> } 
    

    要获取表示备份片信息的“Y”,请执行以下步骤:

    RMAN> set dbid=<dbid>; 
    RMAN> list backup of controlfile; 
    

    还原作业在 Arcserve Backup 服务器作业队列上运行。当该作业完成时,数据库控制文件将还原到 $ORACLE_HOME/oradata/$ORACLE_SID 路径。

  11. 还原控制文件后,挂接数据库。
    $sqlplus / as sysdba
    SQL>alter database mount;
    SQL>exit
    
  12. 还原数据库并存档日志。
    $rman catalog rman/rman@catdb
    RMAN> set dbid=<源数据库 db_id 值>
    RMAN> connect target system/passw0rd;
    RMAN>run {
    2>allocate channel ch1 type sbt parms='SBT_LIBRARY=/opt/Arcserve/ABoraagt/libobk64.so';
    3>restore database;
    4>restore archivelog all;
    5>release channel  ch1;
    6>}
    

    还原作业在 Arcserve Backup 服务器作业队列上运行。当该作业完成时,将还原数据库文件和存档日志。

  13. 使用备份控制文件恢复数据库,然后打开数据库。
    $sqlplus / as sysdba
    SQL> recover database using backup controlfile until cancel
    
  14. 输入以下命令,以使用 resetlogs 选项打开数据库:
    SQL> alter database open resetlogs;