Rman单实例迁移到单实例

实验环境:同平台同版本迁移

操作系统:Red Hat Enterprise Linux Server release 6.4 (Santiago)

数据库版本:Linux: Version 11.2.0.4.0 - Production

目标库版本:Linux: Version 11.2.0.4.0 - Production

  1. 环境检查

1.1 确认是否开归档

SYS@PROD> archive log list

两个库都要看,如果是归档模式则跳过以下步骤

SYS@PROD> shutdown immediate;
SYS@PROD> startup mount;
SYS@PROD> alter database archivelog;
SYS@PROD> archive log list
SYS@PROD> alter database open;
SYS@PROD> select status from v$instance;

1.2 创建测试表

SYS@PROD> conn scott/tiger

SCOTT@PROD> select * from emp;

SCOTT@PROD> create table emp_test as select * from emp;

  1. 备份准备

2.1 全库备份
##创建备份所需的目录
[oracle@source ~]$ mkdir rmanback
##备份数据文件
[oracle@source ~]$ rman target /
##切日志,管理员权限操作
SYS@PROD> alter system switch logfile;
##备份数据文件
RMAN> backup database format '/home/oracle/rmanback/data_%U.dbf';

备份控制文件

RMAN> backup current controlfile format '/home/oracle/rmanback/control_%f.dbf';

2.2 复制参数文件

源库查看参数文件路径

SYS@PROD> show parameter spfile

位置:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilePROD.ora

复制参数文件

##确认目标库数据文件
SYS@EMREP> show parameter spfile
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfileEMREP.ora
##保证源库及目标库参数文件目录一致,没有则需创建
[oracle@bk ~]$ cd /u01/app/oracle/product/11.2.0/dbhome_1/dbs
##目标库关库
SYS@EMREP> shut immediate
##删除目标库参数文件
[oracle@bk ~]$ cd $ORACLE_HOME/dbs
[oracle@bk dbs]$ rm init.ora spfileEMREP.ora

源库复制参数文件到目标库

scp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/init.ora

192.168.6.112:/u01/app/oracle/product/11.2.0/dbhome_1/dbs

scp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilePROD.ora

192.168.6.112:/u01/app/oracle/product/11.2.0/dbhome_1/dbs

目标库确认

源库确认数据文件路径

SYS@PROD> select name from v$datafile;

查看目标库参数文件目录,创建相应的目录

[oracle@bk dbs]$ strings spfilePROD.ora

##以下目标库中创建目录
[oracle@bk ~]$ mkdir -p /u01/app/oracle/oradata/PROD
[oracle@bk ~]$ mkdir -p /u01/app/oracle/admin/PROD/adump
[oracle@bk ~]$ mkdir -p /u01/app/oracle/flash_recovery_area

删除目标库对应的数据文件及目录

[oracle@bk ~]$ rm -rf /u01/app/oracle/admin/EMREP

[oracle@bk ~]$ rm -rf /u01/app/oracle/oradata/EMREP

2.3 环境变量修改

源库环境变量如下:

[oracle@jeames ~]$ more .bash_profile

修改目标库环境变量

[oracle@bk ~]$ vi .bash_profile

[oracle@bk ~]$ source .bash_profile

[oracle@bk ~]$ more .bash_profile

3、复制归档文件

3.1 查看归档文件路径

源库中做如下操作:

[oracle@jeames ~]$ sqlplus / as sysdba

SYS@PROD> select name from v$archived_log order by 1;

3.2 复制归档文件

先把主库一致性关库

目标库中删除归档日志:

[oracle@bk dbs]$ rm -rf arch1_6_946762872.dbf

源库做如下操作:

[oracle@jeames ~]$ scp -r /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch* 192.168.6.112:/u01/app/oracle/product/11.2.0/dbhome_1/dbs

[oracle@bk dbs]$ ll

3.3 复制所有备份文件

[oracle@bk ~]$ mkdir -p /home/oracle/rmanback

[oracle@jeames ~]$ cd /home/oracle/rmanback

[oracle@jeames rmanback]$ scp * 192.168.6.112:/home/oracle/rmanback/

[oracle@bk rmanback]$ ll

4、备份恢复

4.1 恢复控制文件

[oracle@bk ~]$ sqlplus / as sysdba

SYS@PROD> startup nomount

注:启动到nomount状态,先确认参数文件里目录是否都存在,查看参数文件可以使用

strings spfilePROD.ora

[oracle@bk ~]$ rman target /

RMAN> restore controlfile from '/home/oracle/rmanback/control_0.dbf';

4.2 恢复数据文件

RMAN> sql 'alter database mount';

RMAN> restore database;

RMAN> crosscheck archivelog all; --检查控制文件和实际物理文件的差别

将归档日志catalog

RMAN> catalog archivelog '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_11_946762783.dbf';

RMAN> catalog archivelog '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_12_946762783.dbf';

RMAN> catalog archivelog '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_13_946762783.dbf';

RMAN> crosscheck archivelog all;

此时发现报错,则通过以下命令执行

RMAN> recover database until sequence 14;

4.3 RESETLOGS启库

RMAN> sql 'alter database open RESETLOGS';

5、恢复后确认

最后修改:2021 年 09 月 30 日
如果觉得我的文章对你有用,请随意赞赏