1.目的
原11.2.1.0数据库各种异常,expdp导出异常等情况,数据库或因网络/存储性能,只能迁移到新环境上使用,且只有rman可以供其恢复。
2.新环境准备到位
环境/软件:virtualbox 6.1 + windows server2012 + 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;
5.进行rman target 并恢复控制文件
restore controlfile from 'D:\rman\20200917_EASDBA2_9456_1.CTL';
6.启动服务库到mount模式
7.装载备份文件集
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;
}
也可以用在原库中查询取得,修改好相应路径即可:
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;
10.为联机重做日志文件设置新的存储位置(sql下执行),也可以先在源端找到重做日志位置,后再修改为目标位置:
10.1查询日志还是原数据库位置:
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:
11.打开数据库:alter database open resetlogs;
因为是11.2.0.1.0的原数据库,打开需要在upgrade模式下:
12.重新连接数据库执行升级
startup upgrade;
打开后,执行升级脚本(执行完后会自己退出):
SQL>@?\RDBMS\ADMIN\catupgrd.sql
然后再执行脚本(若后面脚本没执行,expdp导出会受影响):
SQL>@?\rdbms\admin\catalog.sql
SQL>@?\rdbms\admin\catproc.sql
SQL>@?\rdbms\admin\utlrp.sql
升级脚本执行完成后,再次进入,正常打开数据库:
再编译无效对象(即上面@?\RDBMS\ADMIN\utlrp.sql ):
13.检查数据库其他文件(如temp):
检查temp:(因为原数据库temp位置已经变导致)
13.1 Rman下检查原有temp位置:
调整temp表空间数据文件到新位置(open下才能调整):
14.DB实例开/关测试,及数据导出等测试:
数据导出:
备注:
若导出报错:执行exec dbms_metadata_util.load_stylesheets ;