一次Oracle异机恢复操作记录

环境介绍
    操作系统:windows server 2008
    Oracle数据库:oracle 10.2.0.3
    源机器和目标机器操作系统及数据库版本一致;
    源数据库使用RMAN的做全备;
    源数据库和目标数据库所有文件存放路径都不一致(包括数据文件、联机重做日志文件、备份存放路径)

具体操作步骤
1.在源数据库使用rman备份创建备份集,然后将备份集复制到目标服务器;
2.在目标服务器上创建OracleService
ORADIM -NEW -SID ORCL
注意点
    a.此处仅在windows环境下需要,linux等环境不需要该步骤,直接在Oracle用户下 set oracle_sid=xxx就可以;
    b.创建服务命令为 oradim,不是 oradmin
    c.下面提及的RMAN及SQL操作,无特别说明,均为在目标数据库进行操作。
3.设置初始化参数
 a.将源数据库的spfile复制到目标服务器对应的目录
 windows下spfile对应的目录为%ORACLE_HOME%\database
 b.由于路径不一致,需要修改spfile中的部分参数,否则startup nomount时候数据库会报错。注意:此处路径不存在的需要自己手动新建
  需要修改的参数值包括以下几个
    audit_file_dest
    background_dump_dest
    control_files
    core_dump_dest
    db_recovery_file_dest
    log_archive_dest_1
    user_dump_dest
 注意点
    a.建议将参数文件中的带路径的参数均修改为目标机器存在的路径;
    b.spfile为二进制文件无法编辑,pfile可以使用文本编辑器编辑。首先将spfile转换为pfile,然后修改pfile中的参数,最后将pfile转换为spfile; 
 具体修改方法:
  set oracle_sid=orcl
  sqlplus "/ as sysdba"
   SQL>create pfile='d:\orabak\pfile_oracl.ora' from spfile;
 修改完成之后
   SQL>create spfile from pfile='d:\orabak\pfile_orcl.ora';
 接下来启动数据库到nomount状态
   SQL>startup nomount;
 假如spfile中的参数路径修改不正确,会导致此处启动报错,根据错误提示建立相应的路径即可。
4.恢复控制文件,并进入加载状态
 set oracle_sid=ORCL
 rman target /
 目标数据库尚无控制文件,此处首先需要指定DBID
  RMAN>set DBID=955645210
注意点
    a.此处DBID必须和源数据库DBID保持一致;
    b.DBID获取方式(此操作在源数据库进行)
    采用SQL查询方式获取为:
     SQL>select DBID from v$database;
    使用RMAN登录方式获取(成功连接之后即显示DBID):
    RMAN TARGET /  
 从制定的备份集中恢复控制文件
 RMAN>restore controlfile from 'D:\software\ORCL\CTRL_20140731_854392059_85_1';
 有控制文件之后,将数据库启动至mount
  RMAN>alter database mount;

5.修复数据库
 执行命令恢复数据库
 RMAN>catalog start with 'D:\software\ORCL\';
注意点
    备份的时候使用的为nocatalog方式,目录信息存放在控制文件,当源数据库备份文件存放路径和传输之后在目标机器存放路径不一致时,需要使用catalog start with命令注册目录,否则会报错,提示找不到数据文件的副本;当存放路径一致时不需要该命令。
 RMAN>RUN
 {
 set newname for datafile 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF' to 'D:\oracle\product\10.2.0\oradata\ORCL\SYSTEM01.DBF';
 set newname for datafile 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF'to 'D:\oracle\product\10.2.0\oradata\ORCL\UNDOTBS01.DBF';
 set newname for datafile 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF' to 'D:\oracle\product\10.2.0\oradata\ORCL\SYSAUX01.DBF';
 set newname for datafile 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF' to 'D:\oracle\product\10.2.0\oradata\ORCL\USERS01.DBF';
 set newname for tempfile 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF' to 'D:\oracle\product\10.2.0\oradata\aqhseTEMP01.DBF';
 set newname for tempfile 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\TEMPORARYDATA.DBF' to 'D:\oracle\product\10.2.0\oradata\aqhseTEMPORARYDATA.DBF';
 RESTORE DATABASE;
 SWITCH DATAFILE ALL;
 RECOVER DATABASE;
 }


注意点
    a.由于源数据库和目标数据库数据文件路径不一致,需要使用set new name命令指定数据文件的路径;当数据文件过多时,可以使用下面的sql(此sql需要在源数据库执行;标红的为目标数据库中数据文件的新路径,根据需要自己替换);
   
 SQL>select 'set newname for datafile '''||name||''' to ''D:\oracle\product\10.2.0\oradata\aqhse\'|| substr(name, instr(name, '\', -1) + 1)||'''; ' cmd
from v$datafile
union all
select 'set newname for tempfile '''||name||''' to ''D:\oracle\product\10.2.0\oradata\aqhse\'|| substr(name, instr(name, '\', -1) + 1)||'''; ' cmd
from v$tempfile;                        --该sql来源于网络,感谢原作者的分享
    b.set new name命令必须写在run块内执行;
    c.执行recover命令之后,最后可能会报RMAN-06054错误,这是由于创建的rman备份不是一致性备份,只有归档,但不包括源数据库的联机重做日志文件。
6.更改联机重做日志路径,打开数据库
  SQL>alter database open resetlogs;
注意点
    当执行上述命令报错ORA-00344,显示为无法创建联机重做日志文件时,需要先更改目标数据库联机重做日志文件路径,然后重新执行上述命令,具体修改SQL命令如下:
     SQL>alter database rename file 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG' to 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG';

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值