windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0

1.目的
原11.2.1.0数据库各种异常,expdp导出异常等情况,数据库或因网络/存储性能,只能迁移到新环境上使用,且只有rman可以供其恢复。

2.新环境准备到位
环境/软件:virtualbox 6.1 + windows server2012 + oracle 11.2.0.4.0
恢复后截图如下(:
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0

3.打造参数文件
db_name='EASDBA2'
memory_target=1.8G
processes = 150
audit_file_dest='D:\app\Administrator\admin\EASDBA2\adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='D:\app\Administrator\flash_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='E:\app\Administrator'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
control_files = ('D:\ORAWLP\control01.ctl','D:\ORAWLP\control02.ctl')
compatible ='11.2.0'

4.启动数据库到nomount模式
sqlplus / as sysdba
create spfile from pfile=‘C:\1.ora';
startup nomount;
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
5.进行rman target 并恢复控制文件
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
restore controlfile from 'D:\rman\20200917_EASDBA2_9456_1.CTL';
6.启动服务库到mount模式
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
7.装载备份文件集
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
8.list backup查看已经装载的备份集,根据信息摘取原数据库文件位置,并newname到目标数据库指定位置,并执行:
run{
set newname for datafile      1    to    'E:\orawlp\SYSTEM01.DBF';
set newname for datafile     2    to    'E:\orawlp\SYSAUX01.DBF';
set newname for datafile      3    to    'E:\orawlp\UNDOTBS01.DBF';
set newname for datafile     4    to    'E:\orawlp\USERS01.DBF';
set newname for datafile      5    to    'E:\orawlp\ESADBA2_01.DBF';
set newname for datafile     6    to    'E:\orawlp\ESADBA2_02.DBF';
set newname for datafile      7    to    'E:\orawlp\ESADBA2_03.DBF';
set newname for datafile     8    to    'E:\orawlp\ESADBA2_04.DBF';
set newname for datafile      9    to    'E:\orawlp\ESADBA2_05.DBF';
set newname for datafile     10    to    'E:\orawlp\ESADBA2_06.DBF';
set newname for datafile      11    to    'E:\orawlp\EAS_D_EASKINGDEE_STANDARD01.DBF';
set newname for datafile     12    to    'E:\orawlp\EAS_D_BDHEAS_STANDARD.DBF';
set newname for datafile      13    to    'E:\orawlp\EAS_D_TEST_STANDARD';
set newname for datafile     14    to    'E:\orawlp\EAS_D_TEST_STANDARD2';
set newname for datafile      15    to    'E:\orawlp\EAS_D_DEMO_STANDARD.DBF';
set newname for datafile     16    to    'E:\orawlp\EAS_D_DEMO_STANDARD02.DBF';
set newname for datafile      17    to    'E:\orawlp\EAS_D_BDHEAS_STANDARD02.DBF';
set newname for datafile     18    to    'E:\orawlp\EAS_D_BDHEAS_STANDARD03.DBF';
set newname for datafile      19    to    'E:\orawlp\EAS_D_BDHEAS_STANDARD04.DBF';
set newname for datafile     20    to    'E:\orawlp\EAS_D_BDHEAS_STANDARD05.DBF';
set newname for datafile      21    to    'E:\orawlp\EAS_D_BDHEAS_STANDARD06.DBF';
restore database;
switch datafile all;
}
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
也可以用在原库中查询取得,修改好相应路径即可:
set head off feed off verify off echo off pages 0 trimspool on
set lines 132 pagesize 0
spo newname.sql
--
select
'set newname for datafile ' || file# || ' to ' || '''' || name || '''' || ';' from v$datafile;
--
select 'restore database;' || chr(10) ||
'switch datafile all;' || chr(10) ||
'}'
from dual;
--
spo off;
9.对数据库应用重做日志:recover database;
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
10.为联机重做日志文件设置新的存储位置(sql下执行),也可以先在源端找到重做日志位置,后再修改为目标位置:
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
10.1查询日志还是原数据库位置:
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
10.2恢复机上执行修改脚本如下:
set head off feed off verify off ech ooff pages 0 trimspool on
set lines 132 pagesize 0
spo renlog.sql
select  
'alter database rename file ' || chr(10)
|| '''' || member || '''' || ' to ' || chr(10) || '''' || member || '''' ||';'
from v$logfile;
spo off;
根据调整后,检查目标存放位置是是否有redo01.log等 ,有删除掉,再运行上述脚本生成的renlog.sql:
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
11.打开数据库:alter database open resetlogs;
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
因为是11.2.0.1.0的原数据库,打开需要在upgrade模式下:
12.重新连接数据库执行升级
startup upgrade;
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
打开后,执行升级脚本(执行完后会自己退出):
SQL>@?\RDBMS\ADMIN\catupgrd.sql
然后再执行脚本(若后面脚本没执行,expdp导出会受影响):
SQL>@?\rdbms\admin\catalog.sql
SQL>@?\rdbms\admin\catproc.sql
SQL>@?\rdbms\admin\utlrp.sql
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0

升级脚本执行完成后,再次进入,正常打开数据库:
再编译无效对象(即上面@?\RDBMS\ADMIN\utlrp.sql ):
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
13.检查数据库其他文件(如temp):
检查temp:(因为原数据库temp位置已经变导致)
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
13.1 Rman下检查原有temp位置:
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
调整temp表空间数据文件到新位置(open下才能调整):
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
14.DB实例开/关测试,及数据导出等测试:
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
数据导出:
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
备注:
若导出报错:执行exec dbms_metadata_util.load_stylesheets ;
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0
windows server 2008R2 oracle 11.2.1.0rman 备份恢复到windows server 2012 oracle 11.2.0.4.0