使用RMAN迁移数据库到异机

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:         迁移数据库的方法有多种,较为常用的则是使用RMAN来迁移。使用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体系结构)      

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
弹性计算 关系型数据库 数据库
自建数据库迁移到云数据库实操
本课程详细介绍了自建数据库迁移到阿里云RDS的实操步骤。主要内容包括:创建实例资源、安全设置、配置自建的MySQL数据库、数据库的迁移、从自建数据库切换到RDS以及清理资源。通过这些步骤,学员可以掌握如何将自建数据库安全、高效地迁移到云端,并确保应用的正常运行。
144 26
|
16天前
|
运维 关系型数据库 MySQL
体验领礼啦!体验自建数据库迁移到阿里云数据库RDS,领取桌面置物架!
「技术解决方案【Cloud Up 挑战赛】」上线!本方案介绍如何将自建数据库平滑迁移至云数据库RDS,解决业务增长带来的运维难题。通过使用RDS MySQL,您可获得稳定、可靠和安全的企业级数据库服务,专注于核心业务发展。完成任务即可领取桌面置物架,每个工作日限量50个,先到先得。
|
26天前
|
弹性计算 关系型数据库 数据库
从自建到云端,数据库迁移全攻略
本文详细介绍了将自建数据库迁移至阿里云RDS的全过程,涵盖WordPress网站安装、数据库迁移配置及验证等步骤。通过DTS数据传输服务,实现库表结构、全量和增量数据的无缝迁移,确保业务连续性和数据一致性。方案具备零成本维护、高可用性(最高99.99%)、性能优化及全面的数据安全保障等核心优势。此外,提供了详细的图文教程,帮助用户快速上手并完成迁移操作,确保业务稳定运行。点击文末“阅读原文”了解更多详情及参与活动赢取精美礼品。
|
1月前
|
弹性计算 安全 关系型数据库
活动实践 | 自建数据库迁移到云数据库
通过阿里云RDS,用户可获得稳定、安全的企业级数据库服务,无需担心数据库管理与维护。该方案使用RDS确保数据库的可靠性、可用性和安全性,结合ECS和DTS服务,实现自建数据库平滑迁移到云端,支持WordPress等应用的快速部署与运行。通过一键部署模板,用户能迅速搭建ECS和RDS实例,完成数据迁移及应用上线,显著提升业务灵活性和效率。
|
1月前
|
运维 关系型数据库 MySQL
自建数据库迁移到云数据库RDS
本次课程由阿里云数据库团队的凡珂分享,主题为自建数据库迁移至云数据库RDS MySQL版。课程分为四部分:1) 传统数据库部署方案及痛点;2) 选择云数据库RDS MySQL的原因;3) 数据库迁移方案和产品选型;4) 线上活动与权益。通过对比自建数据库的局限性,介绍了RDS MySQL在可靠性、安全性、性价比等方面的优势,并详细讲解了使用DTS(数据传输服务)进行平滑迁移的步骤。此外,还提供了多种优惠活动信息,帮助用户降低成本并享受云数据库带来的便利。
|
1月前
|
安全 关系型数据库 MySQL
体验自建数据库迁移到云数据库RDS,领取桌面置物架!
「技术解决方案【Cloud Up 挑战赛】」正式开启!本方案旨在帮助用户将自建数据库平滑迁移至阿里云RDS MySQL,享受稳定、高效、安全的数据库服务,助力业务快速发展。完成指定任务即可赢取桌面置物架等奖励,限量供应,先到先得。活动时间:2024年12月3日至12月31日16点。
|
3月前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
71 3
|
4月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
618 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
4月前
|
SQL Java 数据库连接
数据库迁移不再难:Flyway 与 Liquibase 大比拼,哪个才是你的真命天子?
【9月更文挑战第3天】数据库迁移在软件开发中至关重要,尤其在使用 ORM 框架如 Hibernate 时。为确保部署时能顺利应用最新的数据库变更,开发者常使用自动化工具。Flyway 和 Liquibase 是当前流行的两种选择,均能有效管理数据库版本控制。Flyway 采用 SQL 脚本表示变更,简单易用;Liquibase 支持多种脚本格式,功能更强大,适合复杂项目。本文将对比这两种工具的特点,并通过示例展示各自的优缺点,帮助开发者根据项目需求做出合适的选择。
1020 1
|
5月前
|
API Java 开发框架
【从零到精通】如何用Play Framework快速构建RESTful API?看完这篇你就懂了!
【8月更文挑战第31天】《Play Framework快速入门:从零开始构建RESTful API》介绍了如何使用高性能Web开发框架Play Framework构建简单的RESTful API。从环境搭建到项目创建,再到实现用户列表的增删查功能,本文档详细指导每个步骤,并解释核心概念。适合初学者快速上手。首先确保已安装JDK和sbt,然后通过sbt创建Play项目,接着定义控制器、模型及路由,最后运行应用进行测试。通过本教程,你将掌握构建RESTful API的基础知识,为进一步学习Play Framework打下坚实基础。
63 0

热门文章

最新文章