开发者社区> leshami> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

使用RMAN迁移数据库到异机

简介:         迁移数据库的方法有多种,较为常用的则是使用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体系结构)      

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一次数据库宕机问题的分析
今天来到办公室,发现有一台服务器中的数据库实例停掉了。这种情况真是意料之外,尤其是我还不是很熟悉这台机器的服务。 赶紧查看数据库日志,可以看到数据库在昨晚停掉了,从日志来看没有人为的痕迹。
751 0
基于云计算的数据保护战略将成趋势
云计算及跨平台IT管理供应商CA Technologies日前公布了一项独立调查结果,该调查显示,越来越多的企业正在将云计算作为公司数据保护计划的重要组成部分。42%的公司表示,云计算将在其下一年的灾难恢复和数据保护战略中发挥重要作用。
713 0
Java基本数据类型与运算符
一、基本数据类型 java是强类型语言,共有8种基本数据类型:4种整型、2种浮点型、char字符型和boolean型。 整型 类型 长度 取值范围 byte 1字节 -128~127 short 2字节 -32768-32767 int 4字节 -2^31-1~2^31-1 long 8字节 -2^63-1~2^63-1 整型的范围与运行java代码的机器无关,这一点和C、C++不同,保证了代码在不同的平台之间的可移植型。
402 0
JS 数据属性 & 访问器属性
JS 数据属性 & 访问器属性 一个js对象(Object、Function)可以定义两种类型的属性:数据属性 或 访问器属性。
683 0
R-loop数据分析之R-ChIP(peak calling)
Peak Calling 关于MACS2的使用方法, 我写了如何使用MACS进行peak calling详细地介绍了它的参数,在用MACS2之前尽量去阅读下。
1339 0
如何访问ECS上自己搭建的数据库
在ECS上自建安装了MySQL、Redis、SQLServer数据库,每次登录数据库时,需要登录到ECS上,再操作数据库,流程很麻烦。最近发现了一个叫DMS的东东,经过查询DMS是阿里云提供的专业的数据管理产品,不仅支持RDS,对于ECS或者本地自己搭建的数据库很支持,果断使用了尝试使用该产品。
1108 0
layer 元数据
layer 元数据
0 0
“史上最严”数据保护法 GDPR 是如何失败的?
欧盟通用数据保护条例(General Data Protection Regulation,简称 GDPR)已经四周年了。该条例最初生效于 2018 年 5 月 25 日,其为欧盟公民提供了针对个人信息保护和管理的严格准则,并适用于任何处理欧盟公民数据的公司,且不管该公司在哪里,影响范围非常广。
0 0
+关注
leshami
传播知识,分享快乐!十年以上数据库,系统运维与管理,性能优化经验。全部文章,欢迎扩散,转载请注明出处!
文章
问答
文章排行榜
最热
最新
相关电子书
更多
数据库异地备份及不还原快速查询备份集最佳实践
立即下载
Oracle 数据库笔记
立即下载
数据库2025 V3
立即下载