利用RMAN针对同平台下Oracle的实例进行异机迁移

环境:CentOS 6.4Final x86_64

数据库版本:Oracle11g release 11.2.0.2.0(R2)

主要工具:Rman

注意事项:本次操作是基于同平台,数据库版本一致的环境下进行迁移操作

豆知识:       

     从Oracle8版本开始自带的工具,与imp/exp的区别:

        Imp/exp:基于数据级别备份,缺点:只能恢复到备份时间,优点:速度较快,导出表,用户,表空间等轻量操作推荐使用
        Rman:基于文件级别备份,优点:多种备份模式,可以配合归档日志archivelog和onlinelog可以恢复到备份前的某个时间点,缺点:速度较慢,导出文件较大,需开启归档日志模式,日志文件需要定期清理


mkdir   /opt/oraclebackup/{datafile,controlfile,spfile}

chown -R oracle:oinstall /opt/oraclebackup

//创建备份文件存放目录,赋予用户oracle读写权限

su - oracle

export    $ORACLE_SID= orcl
rman   target     /
//orcl为需要操作的实例名,export切换环境变量,进入rman,记下DBID如下DBID=3891629467(重要请牢记),和数据库名wmccusto,后面会用到

RMAN>run {   
allocate channel c1 device type disk;  
backup incremental level 0    
format '/opt/oraclebackup/datafile/db_full_%U.bkp'    
tag '2015-11-16-FULL'  
database plus archivelog;  
release channel c1;  
}
// format处定义备份文件输出目录和文件名,可自行定义,下同,tag定义备份文件标签,备份完成图如下:


backup current controlfile format '/opt/oraclebackup/controlfile/control20151116.bak';
 //备份控制文件


backup spfile format '/opt/oraclebackup/spfile/spfile20151116.bak';
//备份系统参数文件spfile
cp $ORACLE_HOME/dbs/orapwwmccustomer /opt/oraclebackup/
//备份用户密码文件,文件名模式为orapw+实例名)

cd /opt

tar -zcf oraclebackup.tar.gz /opt/oraclebackup/
//打包备份文件


scp -P77 oraclebackup.tar.gz oracle@xxx.xxx.xxx.xxx:/opt/89DBstuff
//往迁移目标服务器发送备份文件,77是端口号,oracle是服务器用户名,回车之后会要求输入用户密码



sqlplus   /nolog
conn /as sysdba
select member from v$logfile;
//检查确认重做日志文件数量,导入数据库之后需要核查


select file_name from dba_data_files;
//检查确认数据文件数量


select file_name,tablespace_name from dba_temp_files;
//检查确认临时表空间文件数量


exit

cat  $ORACLE_HOME/network/admin/tnsnames.ora
//查看监听器所监听实例名模块,记录下来,数据库导入完毕后需要还原到目标服务器上,如下图的WMCCUSTOMER为监听实例代号(可自定义),此处HOST监听地址和PORT监听端口可根据实际需要修改,下同

cat $ORACLE_HOME/network/admin/listener.ora
//查看监听器名称,监听端口等基本配置,同样记录下来,此处配置为动态监听,静态监听可自行了解


以下在导入的目标数据库进行操作:

mkdir -p /opt/oraclebackup/{controlfile,datafile,spfile}
//创建存放备份数据目录,建议跟原始数据导出目录一致

tar -zxf /opt/89DBstuff/oraclebackup.tar.gz -C /opt/
chown  -R oracle:oinstall /opt/oraclebackup
//解压数据文件到备份存放目录,确保其跟导出时的目录结构一致,确保其文件丛属权限为oracle,以便读取

su   -   oracle
//切换oracle用户进行操作

mkdir -p $ORACLE_BASE/admin/实例名wmccustomer/{adump,bdump,cdump,dpdump,udump,pfile}
mkdir -p $ORACLE_BASE/oradata/wmccustomer
mkdir -p $ORACLE_BASE/flash_recovery_area/大写实例名WMCCUSTOMER
mkdir -p $ORACLE_BASE/flash_recovery_area/实例名wmccustomer
//创建相关数据库目录

echo 'db_name=wmccusto'>$ORACLE_HOME/dbs/initwmccustomer.ora
//创建初始配置文件并添加数据库名wmccusto(数据库名db_name需要在原始库中确认并保持一致)

export $ORACLE_SID=wmccustomer
//切换实例ID环境变量

rman target /
//进入rman命令行交互环境
set dbid 3891629467
//设置数据库id,跟原库一致
startup nomount;
//启动数据库到非数据挂载状态,只加载系统参数

restore spfile from '/opt/oraclebackup/spfile/spfile20151116.bak';
//恢复参数文件,注意:恢复spfile可以使用from '文件源' 的句式,以便处理文件来源跟原库不在同一目录下的情况,下面恢复控制文件controlfile同理,只有restore database恢复数据库时不能使用,需使用catalog start with '文件源'指定备份集
startup nomount force;
//强制重启到非挂载状态,载入原库spfile配置

恢复spfile之后若目标库安装路径$ORACLE_BASE,$ORACLE_HOME,尤其是数据存放目录oradata,控制文件目录等与原库不一致的情况下,需要修改spfile文件内容更新里面的路径位置,否则会出现无法恢复数据的错误。由于spfile文件包含许多机器控制字符,无法用文本编辑工具vim,vi,gedit等直接修改,两种方法:1.首先转换成pfile文件再修改;2.在当前spfile已恢复情况下将数据库启动到非挂载状态alter database nomount(或startup nomount force),再用alter system来修改spfile的内容。下面介绍一下:

1.转换成pfile修改:

(以下SQL>表示操作在sqlplus环境下进行)

SQL>shutdown immediate;     //先停止数据库实例再进行修改

SQL>create pfile='/xxx/xxx/xxx.ora' from spfile;  //创建pfile文件,注意目录和文件读写权限

vi /xxx/xxx/xxx.ora   //自行编辑所需参数

之后转换回spfile并恢复到默认启动所读取的spfile位置,即$ORALCE_HOME/dbs/

SQL>create spfile='/xxxx/xxxx/spfilewmccustomer.ora' from pfile='/xxx/xxx/xxx.ora' //读取指定路径下pfile生成spfile

cp $ORACLE_HOME/dbs/spfilewmccustomer.ora $ORACLE_HOME/dbs/spfilewmccustomer.ora.bak  //备份原文件

mv /xxxx/xxxx/spfilewmccustomer.ora $ORACLE_HOME/dbs/spfilewmccustomer.ora //覆盖

SQL>startup //启动实例


2.sqlplus环境下修改:

可以先用show parameter或者show parameter xxxx_xxxx(xxxx_xxxx为具体参数项,下同)等列出所有或者具体某一个spfile里的参数及参数值,然后使用alter system set xxx_xxx=xxx scope=both/memory/spfile;来修改,关于scope的三个参数值是Oracle 9i版本新增的,具体的不同作用如下:

MEMORY:只改变当前实例运行,重启实例后失效
SPFILE:只改变SPFILE的设置,重启实例后生效
BOTH:改变实例及SPFILE,默认选项,可不加

可以根据需要选用


(PS:实际情况下可新建一个软连接(ln -s 源文件 目标文件)指向到原数据文件导出目录即可解决恢复时遇到的路径错误问题)


restore controlfile from '/opt/oraclebackup/controlfile/control20151116.bak';
//恢复控制文件



alter database mount;
//切换数据库到挂载状态


(catalog start with '/xxx/xxx/xxx')

//若数据文件不在原导出目录,则导入前可使用上述命令指定备份集目录

restore database;
//还原数据库文件


recover database;
//恢复数据库文件

//此处报错是由于没有把归档日志archivelog拷贝到归档路径下(一般为$ORACLE_BASE/flash_recovery_area/大写实例名/archivelog/),出于数据同步考虑,建议拷贝一份到目标数据库相应目录为最佳选择,恢复不会出现异常。此处我选择不完全恢复,只恢复基本库
exit
sqlplus /nolog
conn /as sysdba
//退出rman,切换到oracle交互命令行sqlplus继续操作
recover database using backup controlfile until cancel;
//恢复数据库到备份文件能够同步到的最新状态

//此处输入cancle取消归档日志同步,进行不完全恢复。若提示有数据文件xxxx.dbf无法恢复时(如下图),必须使用归档日志恢复,具体可根据上图或者recover database时提示缺少的日志代码或日志文件到原服务器进行相应的拷贝,恢复,此处不再赘述



alter database open resetlogs;
//若cancel时没有提示错误则表示不完全恢复成功,重新生成数据库实体,同步且使控制文件,重做日志文件和数据文件的SCN一致(如下图list incarnation最右列对应的新的SCN   58601473808,前两行为历史记录,这里SCN可以理解为一种数据状态记录)



select member from v$logfile;
select file_name from dba_data_files;
select file_name,tablespace_name from dba_temp_files;
//最后依次在sqlplus交互模式下检查各数据文件,重做日志文件,数据库内容是否跟原库一致



shutdown immediate;

exit;

//拷贝用户密码文件前先关闭实例wmccustomer
cp /opt/oraclebackup/orapwwmccustomer  $ORACLE_HOME/dbs/
//拷贝密码文件到实例配置文件存放目录

sqlplus /nolog
conn /as sysdba
startup
conn username/password
//重启实例,测试原用户是否可用
exit


恢复添加监听器配置文件listener.ora和tns别名配置文件tnsname.ora各自的对应配置

lsnrctl reload  
lsnrctl status    //查看监听状态
//重载监听器配置文件,测试实例监听是否正常,当输出结果中status为READY的时候且应用能正常连接数据库的时候则数据库导入工作完成,如下图


//若没有监听到目标实例,则稍等片刻或者进入sqlplus数据库交互模式手动注册实例,具体步骤如下:
sqlplus /nolog
conn /as sysdba
alter system register;  //注册实例

至此数据库导入完毕,若导入过程中出现其他异常可根据oracle错误代码自行搜索解决


参考文章:http://ylw6006.blog.51cto.com/470441/659104/


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值