使用RMAN迁移数据库到异机

        迁移数据库的方法有多种,较为常用的则是使用RMAN来迁移。使用RMAN迁移数据库属于数据库的物理备份与恢复范畴,整个过程中数据库的相关信息是完整地镜像。因此,基于此种方式还原恢复的数据库用于测试会使得与真实的生产环境差异相对较小。本文描述了使用RMAN来还原Oracle 10g数据库的过程。

 

一、主要步骤
     1、备份数据库
     2、ftp备份到目的服务器
     3、为目标数据库创建项目目录
     4、为目标数据库创建pfile或spfile(使用RMAN还原或复制原pfile到目的服务器)
     5、还原控制文件
     6、还原数据文件
     7、OPEN 数据库
  
  其实,这几个步骤比较好理解,整个实质是对数据库体系结构以及数据库整个启动过程的理解。
  关于体系结构和启动过程可以参考
       Oracle实例和Oracle数据库(Oracle体系结构)
       Oracle 数据库实例启动关闭过程

  下面对此进行一下描述
       a、首先需要为实例的运行环境创建相应的目录,如dump位置,datafile位置,以及archive位置等等
             如果是恢复到不同的路径,则后续RMAN时需要使用set newname for datafile 方式更新到控制文件
       b、实例需要pfile来启动,因此需要恢复pfile或spfile,然后将数据库切换到nomount状态
       c、接下来的一步是通过控制文件将数据库切换到mount状态,因此需要恢复控制文件,然后再mount
       d、mount之后就可以对数据库进行还原(restore)操作
       e、还原完毕之后是对数据库进行恢复(recovery)操作(restore和recover需要基于控制文件的备份信息或恢复目录)
       f、最后是open数据库

二、迁移演示

1、备份原数据库
  此处演示的源数据库与目标数据库使用相同的版本为Oracle 10g R2(10.2.0.3),操作系统都为suse 10 +Sp3
  备份过程略,有关备份脚本,请参考:linux 下RMAN备份shell脚本 http://blog.csdn.net/robinson_0612/article/details/8029245

2、ftp所有的备份文件到需要恢复的服务器上
  打包整个备份集ftp到目标服务器或scp到目标服务器
  下面是ftp到目标服务器解压后包含的文件
  oracle@2go-devDB01uv:/u02/database/SY5221_RMAN/20121013> ls -hltr
  total 9.4G
  -rw-r--r-- 1 oracle oinstall 3.0K 2012-10-16 09:48 initSY5221.ora
  -rw-r--r-- 1 oracle oinstall 2.7G 2012-10-16 10:02 SY5221_lev0_201210130630_4unnkjvi_1_1
  -rw-r--r-- 1 oracle oinstall 3.1G 2012-10-16 10:04 SY5221_lev0_201210130630_4vnnkjvi_1_1
  -rw-r--r-- 1 oracle oinstall 938M 2012-10-16 10:07 SY5221_lev0_201210130630_arc_51nnkk2h_1_1
  -rw-r--r-- 1 oracle oinstall 935M 2012-10-16 10:08 SY5221_lev0_201210130630_arc_52nnkk2h_1_1
  -rw-r--r-- 1 oracle oinstall 930M 2012-10-16 10:10 SY5221_lev0_201210130630_arc_53nnkk31_1_1
  -rw-r--r-- 1 oracle oinstall  15M 2012-10-16 10:10 SY5221_lev0_cntl_bak_c-1468911009-20121013-00
  -rw-r--r-- 1 oracle oinstall  15M 2012-10-16 10:10 SY5221_lev0_cntl_bak_c-1468911009-20121013-01
  -rw-r--r-- 1 oracle oinstall 910M 2012-10-16 10:11 SY5221_lev0_201210130630_arc_54nnkk32_1_1

3、创建所需的目录(使用oracle用户)
  oracle@2go-devDB01uv:~> more mkdir_sy5221.sh
  mkdir -p /u02/database/SY5221/flash_recovery_area
  mkdir -p /u02/database/SY5221
  mkdir -p /u02/database/SY5221/archive
  mkdir -p /u02/database/SY5221/backup
  mkdir -p /u02/database/SY5221/bdump
  mkdir -p /u02/database/SY5221/cdump
  mkdir -p /u02/database/SY5221/udump
  mkdir -p /u02/database/SY5221/controlf
  mkdir -p /u02/database/SY5221/oradata
  mkdir -p /u02/database/SY5221/redolog
  mkdir -p /u02/database/SY5221/undo
  mkdir -p /u02/database/SY5221/temp
  mkdir -p /u02/database/SY5221/ref_data
  mkdir -p /u02/database/SY5221/BNR
  mkdir -p /u02/database/SY5221/BNR/full
  mkdir -p /u02/database/SY5221/BNR/dump
  mkdir -p /u02/database/SY5221/dbcreatelogs

  ORACLE_SID=SY5221; export ORACLE_SID
  oracle@2go-devDB01uv:~> chmod u+x mkdir_sy5221.sh
  oracle@2go-devDB01uv:~> ./mkdir_sy5221.sh

4、创建密码文件
  oracle@2go-devDB01uv:~> cd $ORACLE_HOME/dbs
  oracle@2go-devDB01uv:~/OraHome10g/dbs> orapwd file=orapwSY5221 password=oracle force=y entries=10
  # Author : Robinson
  # Blog : http://blog.csdn.net/robinson_0612

3、使用pfile启动实例到nomount状态
  oracle@2go-devDB01uv:~> cp /u02/database/SY5221_RMAN/20121013/initSY5221.ora $ORACLE_HOME/dbs
  oracle@2go-devDB01uv:~> export ORACLE_SID=SY5221
  oracle@2go-devDB01uv:~> sqlplus / as sysdba
  SQL> startup nomount;

4、恢复控制文件并切换到mount状态
  #再开一个session
  oracle@2go-devDB01uv:~> export ORACLE_SID=SY5221
  oracle@2go-devDB01uv:~> $ORACLE_HOME/bin/rman target /
  RMAN> restore controlfile from '/u02/database/SY5221_RMAN/20121013/SY5221_lev0_cntl.bak_c-1468911009-20121013-01';
  RMAN> alter database mount;

5、指定备份文件所在目录
  RMAN> catalog start with '/u02/database/SY5221_RMAN/20121013'; #此命令用于扫描整个目录的备份片或者归档日志文件等

6、还原数据库
  RMAN> restore database;

7、恢复数据库
  RMAN> recover database;

  unable to find archive log
  archive log thread=1 sequence=143388
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-03002: failure of recover command at 10/16/2012 11:32:54
  RMAN-06054: media recovery requesting unknown log: thread 1 seq 143388 lowscn 608805162
  #由于未复制联机日志文件,此时提示需要seqence 143388,scn 608805162 

   #在sqlplus提示符下继续介质恢复
  SQL> conn / as sysdba
  Connected.
  idle> recover database until cancel;
  ORA-00283: recovery session canceled due to errors
  ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

  SQL> recover database using backup controlfile until cancel;
  ORA-00279: change 608805162 generated at 10/13/2012 06:31:44 needed for thread 1
  ORA-00289: suggestion : /u02/database/SY5221/archive/arch_668881377_1_143388.arc
  ORA-00280: change 608805162 for thread 1 is in sequence #143388

  Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
  cancel      #输入cancel,完成介质恢复
  Media recovery cancelled.

8、open 数据库
  #如果open 不成功,请尝试shutdown 之后再次open,如果仍然不成功使用隐藏参数_allow_resetlogs_corruption打开数据库
  SQL> alter database open resetlogs;

  Database altered.

9、一致性关闭数据库并重启数据库
  SQL> shutdown immediate;

  SQL> startup

 

恢复到异机不同目录的情形(补充内容@20130906)

步骤基本上与使用的相同目录差不多,有些需要注意的,下面一一列出

1、备份数据及ftp到目的服务器,同之前

2、创建相应的目录
  此处的目录有别于原目录,如下面的示例
  原目录: /u02/database/SY5221  原数据库名: SY5221 (主机: Linux1, ORACLE_SID=SY5221)
  新目录: /u02/database/SY5223  新数据库名:SY5223 (主机: Linux2, ORACLE_SID=SY5223)

3、创建pfile文件并启动实例
  从原库提取参数文件到目的服务器,根据需要修改相应的参数,如增加sga大小等  
  其次修改pfile文件中的相关路径使之指向新的位置,即参数文件中所有含SY5221目录的应修改为SY5223
  注意db_name参数不变,为原来的db_name,待恢复完成后使用nid修改
  使用pfile文件启动到nomount状态
  
3、还原控制文件
  RMAN> restore controlfile from '/u02/database/bak/SY5221cntl.bak';

  --切换到mount状态,注,db_name务必保持原db_name,否则切换到mount时提示
  --ORA-01103: database name 'SY5221' in control file is not 'SY5223'
  
  RMAN> alter database mount;

4、使用catalog start with指定备份文件位置
  RMAN> catalog start with '/u02/database/bak';

5、还原及恢复数据库,由于使用了不同的位置,因此我们需要使用set newname 子句,如下面的示例
  run{
  set newname for datafile 1  to  '/u02/database/SY5223/oradata/sysSY5223.dbf';                                 
  set newname for datafile 2  to  '/u02/database/SY5223/undo/undotbsSY5223.dbf';                                
  set newname for datafile 3  to  '/u02/database/SY5223/oradata/sysauxSY5223.dbf';                              
  set newname for datafile 4  to  '/u02/database/SY5223/undo/undotbsSY52232.dbf';                               
  set newname for datafile 5  to  '/u02/database/SY5223/oradata/SY5223_system_tbl.dbf';                         
  set newname for datafile 6  to  '/u02/database/SY5223/oradata/SY5223_account_tbl.dbf';                        
  set newname for datafile 7  to  '/u02/database/SY5223/oradata/SY5223_stock_tbl.dbf';                          
  set newname for datafile 8  to  '/u02/database/SY5223/oradata/SY5223_stock_l_tbl.dbf';
  restore database;
  switch datafile all;
  recover database;}
  
  --Recover过程中会收到如下错误提示
  RMAN-03002: failure of recover command at 09/06/2013 22:40:54
  RMAN-06054: media recovery requesting unknown log: thread 1 seq 2872 lowscn 18896302
  
  --我们使用until子句来再次recover
  RMAN>run{
  2> set until sequence 2872;
  3> recover database;
  4> alter database open resetlogs;
  5> }
  
  executing command: SET until clause
  
  Starting recover at 06-SEP-13
  using channel ORA_DISK_1
  
  starting media recovery
  media recovery complete, elapsed time: 00:00:03
  
  Finished recover at 06-SEP-13
  
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-03002: failure of alter db command at 09/06/2013 22:52:04
  ORA-00344: unable to re-create online log '/u02/database/SY5221/redolog/log1aSY5221.log'
  ORA-27040: file create error, unable to create file
  Linux-x86_64 Error: 2: No such file or directory
  
  --上面又收到了错误提示,是由于无法创建日志文件,因为路径与原来的数据库路径不一致
  RMAN> exit

6、修改日志文件位置及open数据库
  $ sqlplus / as sysdba
  SQL> select name,open_mode from v$database;
  
  NAME      OPEN_MODE
  --------- ----------
  SY5221    MOUNTED
  
  SQL> set linesize 190
  SQL> col member format a60  
  SQL> select * from v$logfile;
  
      GROUP# STATUS  TYPE    MEMBER                                                       IS_
  ---------- ------- ------- ------------------------------------------------------------ ---
           1         ONLINE  /u02/database/SY5221/redolog/log1aSY5221.log                 NO
           1         ONLINE  /u02/database/SY5221/redolog/log1bSY5221.log                 NO
           2         ONLINE  /u02/database/SY5221/redolog/log2aSY5221.log                 NO
           2         ONLINE  /u02/database/SY5221/redolog/log2bSY5221.log                 NO
  
  SQL> set heading off;
  SQL> select 'alter database rename file '''||member||''' to '''||replace(member,'SY5221','SY5223')||''';' from v$logfile;
  
  alter database rename file '/u02/database/SY5221/redolog/log1aSY5221.log' to '/u02/database/SY5223/redolog/log1aSY5223.log';
  alter database rename file '/u02/database/SY5221/redolog/log1bSY5221.log' to '/u02/database/SY5223/redolog/log1bSY5223.log';
  alter database rename file '/u02/database/SY5221/redolog/log2aSY5221.log' to '/u02/database/SY5223/redolog/log2aSY5223.log';
  alter database rename file '/u02/database/SY5221/redolog/log2bSY5221.log' to '/u02/database/SY5223/redolog/log2bSY5223.log';
  
  SQL> alter database rename file '/u02/database/SY5221/redolog/log5bSY5221.log' to '/u02/database/SY5223/redolog/log5bSY5223.log';
  SQL> alter database rename file '/u02/database/SY5221/redolog/log6aSY5221.log' to '/u02/database/SY5223/redolog/log6aSY5223.log';
  SQL> alter database rename file '/u02/database/SY5221/redolog/log6bSY5221.log' to '/u02/database/SY5223/redolog/log6bSY5223.log';
  SQL> alter database rename file '/u02/database/SY5221/redolog/log7aSY5221.log' to '/u02/database/SY5223/redolog/log7aSY5223.log';  
  
  SQL> set heading on;
  SQL> alter database open resetlogs;
  
  Database altered.

7、修正相应的临时数据文件
  SQL> select * from dba_temp_files;
  select * from dba_temp_files
                *
  ERROR at line 1:
  ORA-01157: cannot identify/lock data file 201 - see DBWR trace file
  ORA-01110: data file 201: '/u02/database/SY5221/temp/tempSY5221.dbf'
  
  SQL> select name from v$tempfile;
  
  NAME
  ------------------------------------------------------------
  /u02/database/SY5221/temp/tempSY5221.dbf
  /u02/database/SY5221/temp/SY5221_tempSY5221.dbf
  
  SQL> alter tablespace temp add tempfile '/u02/database/SY5223/temp/tempSY5223.dbf' size 50m;          
  
  SQL> alter tablespace goex_temp add tempfile '/u02/database/SY5223/temp/SY5223_tempSY5223.dbf' size 50m;
  
  SQL> alter tablespace temp drop tempfile '/u02/database/SY5221/temp/tempSY5221.dbf';
  
  SQL> alter tablespace goex_temp drop tempfile '/u02/database/SY5221/temp/SY5221_tempSY5221.dbf';
  
  SQL> alter database tempfile '/u02/database/SY5223/temp/tempSY5223.dbf' autoextend on;

  SQL> alter database tempfile '/u02/database/SY5223/temp/SY5223_tempSY5223.dbf' autoextend on;

  SQL> select count(*) from dba_temp_files;
  
    COUNT(*)
  ----------
           2
 
  SQL> shutdown immediate;
 
8、使用nid修改数据库名字        
  $ export ORACLE_SID=SY5223
  $ sqlplus / as sysdba
  SQL> startup mount pfile=/u02/database/SY5223/initSY5223.ora;
  $ nid target=sys/oracle dbname=SY5223 setname=yes     #nid命令用法可参考:使用nid命令修改 db name 及 dbid  修改完毕后,修改pfile文件中的db_name参数为SY5223,启动数据库,生成spfile;同时创建相应的密码文件
  SQL> create spfile from pfile;
  $orapwd file=orapwSY5223 password=oracle force=y entries=10

9、配置listener及tnsnames,根据需要全备数据库

10、后记
  上面描述的主要是Oracle 10g,无法连接到目标数据库,也就是不使用duplicate方式的异机恢复方法
  对于Oracle 11g,参考如下链接:
  基于 RMAN 的同机数据库克隆  基于RMAN的异机数据库克隆(rman duplicate)  基于RMAN从活动数据库异机克隆(rman duplicate from active DB)  RMAN 数据库克隆文件位置转换方法

 

三、更多参考

有关Oracle 网络配置相关基础以及概念性的问题请参考:
        配置ORACLE 客户端连接到数据库
        配置非默认端口的动态服务注册
       配置sqlnet.ora限制IP访问Oracle       Oracle 监听器日志配置与管理
       设置 Oracle 监听器密码(LISTENER)       Oracle RAC 监听配置       ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

       Oracle RAC 客户端连接负载均衡(Load Balance)

       配置RAC负载均衡与故障转移

   

有关基于用户管理的备份和备份恢复的概念请参考

    Oracle 冷备份

    Oracle 热备份

    Oracle 备份恢复概念

    Oracle 实例恢复

    Oracle 基于用户管理恢复的处理

   SYSTEM 表空间管理及备份恢复

    SYSAUX表空间管理及恢复

   Oracle 基于备份控制文件的恢复(unsing backup controlfile)

 

有关RMAN的备份恢复与管理请参考

    RMAN 概述及其体系结构

    RMAN 配置、监控与管理

    RMAN 备份详解

    RMAN 还原与恢复

    RMAN catalog 的创建和使用

    基于catalog 创建RMAN存储脚本

    基于catalog 的RMAN 备份与恢复

    RMAN 备份路径困惑

 

有关ORACLE体系结构请参考

    Oracle 表空间与数据文件

    Oracle 密码文件

    Oracle 参数文件

    Oracle 联机重做日志文件(ONLINE LOG FILE)

    Oracle 控制文件(CONTROLFILE)

    Oracle 归档日志

    Oracle 回滚(ROLLBACK)和撤销(UNDO)

    Oracle 数据库实例启动关闭过程

    Oracle 10g SGA 的自动化管理

    Oracle 实例和Oracle数据库(Oracle体系结构)      

时间: 2024-10-21 16:56:06

使用RMAN迁移数据库到异机的相关文章

oracle归档模式下的Rman备份集在异机恢复简介

环境: OS:Red Hat Linux As 5 DB:10.2.0.4 有些时候因为测试环境需要,我们需要使用生产库的备份集在另外一台新的机器上做恢复(前提是新机器事先安装Oracle软件,版本跟原库一致),下面是恢复过程. 1.在原库上做全备(在原库上操作) run{ allocate channel c1 device type disk; allocate channel c2 device type disk; backup format '/u02/rman_backup/full

基于RMAN从活动数据库异机克隆(rman duplicate from active DB)

      Oracle 11g RMAN能够实现基于活动数据库进行异机克隆,从而省去需要先备份再ftp到辅助服务器的过程.这一切可以全部交给Oracle来搞定.在克隆期间,Oracle会读取Target DB的所有数据结构,无须人为的干预(不同的磁盘系统,文件路径与文件名要指定转换方式).尽管如此,对于生产环境数据库在整个克隆期间性能会下降,其次在Target Server与Auxiliary Server中会产生较大的网络流量.如果这些可以接受的话,从活动数据库进行异机克隆是一个不错的选择.

如何通过RMAN备份duplicate异机克隆恢复数据库

说明: 本来是想做no target目标库通过目标库备份集创建dataguard测试的,发现从原理上不能实现,但它有一个非常有用的功能,可以实现快速的rman备份异机恢复. 之前通过RMAN备份异机恢复要操作很多步骤,通过rman duplicate方式来实现数据库将非常快速.将为今后有整库迁移工作任务提供又一种方案. 本文将记录完整过程. 一.环境介绍 1. 主数据库环境 操作系统版本  : OEL5.8 x64 数据库版本    : Oracle 11.2.0.3 x64 数据库名    

Oracle中使用RMAN 异机复制数据库

RMAN 异机复制和同机复制操作步骤是一样的,不同的是我们需要把备份的文件copy到辅助库上 实验平台: REDHAT linux 4.7 + oracle 10g 目标库信息: ORACLE_BASE: /u01/app/oracle ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1 ORACLE_SID:orcl IP: 192.168.1.20 辅助库信息: ORACLE_BASE: /u01/app/oracle ORACLE_HOME:

Linux平台下RMAN异机恢复总结

下面总结.整理一下RMAN异机恢复这方面的知识点,这篇笔记在个人笔记里面躺了几年了,直到最近偶然被翻看到,遂整理.总结一下.如下所示,个人将整个RMAN异机恢复分为准备工作和操作步骤两大部分.当然,准备工作里面,有些步骤不是必须的,可以跳过或忽略的.这个取决于你的实际环境和你对RMAN异机恢复的熟悉程度.   准备工作   1:了解一下目标服务器与源服务器的操作系统版本信息   需要对比一下目标服务器与源服务器的操作系统版本是否一致,具体来说,操作系统版本信息.内核信息(例如Oracle Lin

使用RMAN实现异机备份恢复(WIN平台)

--=================================-- 使用RMAN实现异机备份恢复(WIN平台)--=================================     在有些情况下,如数据库服务器处于磁盘空间的压力或成本控制需要将数据文件备份到异机,使用RMAN可以完成该工作.基于Windows平台所需完成的配置相对简单,仅仅是添加账户与使用新增的帐户来启动数据库服务以及设置共享路径.    下面给出具体描述.    一.配置数据库服务器与备份目的主机    1.

Oracle 10g RAC RMAN备份异机单实例恢复

本文通过将Oracle 10g RAC RMAN的完整的备份进行异机恢复的过程,可以对在恢复的过程中可以发现备份时的一些问题.比如规档日志的冗余,控制文件与参数文件的自动备份的利用等,本示例是拿了rman的备份集进行备份的,所以在最后的启动数据库的过程中出现了问题,提示控制文件过旧等问题,所以备份需要经过详细高可用的设计,才能在恢复过程中降低风险. Oracle 11g R2 RAC on OEL5.8 x64安装笔记 http://koumm.blog.51cto.com/703525/128

Oracle rman异机备份问题

问题描述 Oracle rman异机备份问题 初学oracle rman,遇到了不大理解的地方. 我想实现的是:现在两台主机,含有数据的A机与空机B.想实现在B中备份A. 现在在B中建立了恢复目录,在A的rman中使用语句: backup database: 进行全库备份(因为测试,所以使用这一简单方式). 但我想实现的是在B中保留A的备份,这样A down掉后我可以从B去恢复. 请问是在B的rman中直接操作,还是需要将A的备份直接复制到B的指定位置中实现备份? 关于这一机制不是很理解,可能问

RMAN异机恢复遭遇ORA-01547、ORA-01152、ORA-01110错误案例

测试环境:     操作系统  :  Red Hat Enterprise Linux ES release 4 (Nahant Update 4)   VMWARE     数据库     :  Oracle Database 10g Release 10.2.0.4.0 - Production     简要介绍,一台服务器A位于虚拟机VMWARE上,由于测试需要,在VMWARE上克隆了该系统作为服务器B,过了一段时间,由于数据变更,需要将服务器A上的ORACLE数据库还原恢复到服务器B上.