qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

使用RMAN迁移数据库到异机

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

  一、主要步骤

  1、备份数据库

  2、ftp备份到目的服务器

  3、为目标数据库创建项目目录

  4、为目标数据库创建pfile或spfile(使用RMAN还原或复制原pfile到目的服务器)

  5、还原控制文件

  6、还原数据文件

  7、OPEN 数据库

  其实,这几个步骤比较好理解,整个实质是对数据库体系结构以及数据库整个启动过程的理解。

  下面对此进行一下描述

  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_061

  5、使用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;

  6、恢复控制文件并切换到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;

  7、指定备份文件所在目录

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

  8、还原数据库

RMAN> restore database;

  9、恢复数据库

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.

  10、open 数据库

  #如果open 不成功,请尝试shutdown 之后再次open,如果仍然不成功使用隐藏参数_allow_resetlogs_corruption打开数据库

SQL> alter database open resetlogs;

Database altered.

  11、一致性关闭数据库并重启数据库

SQL> shutdown immediate;

SQL> startup

posted on 2013-06-13 10:25 顺其自然EVO 阅读(491) 评论(0)  编辑  收藏 所属分类: 数据库DB2


只有注册用户登录后才能发表评论。


网站导航:
 
<2013年6月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜