您的位置:首页 > 数据库 > Oracle

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

2015-11-25 17:29 615 查看
环境: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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: