最近做了很多套系统的迁移,大小500G~3T不等,方法差不多,有单机、dataguard、rac。
本来是打算写一篇非常详细的总结文档,但是涉及到不少客户信息,加上自己有点懒,所以
这里就来一篇超级简洁版。
3. Restore datafiles
4. 拷贝原主库中archivelog到该主机(此时原生产机还未停止)
7. 第一次recover完成以后,由于我们业务系统还在运行,可能后面又会产生一些archivelog。
在该步骤停止业务系统,同时停库,停监听。
12. Create rac redo logfile
17. 根据该rac实例spfile,创建pfile,用于启动其他2个rac 节点
说明:本来还是从10gR2 rac(raw)开始恢复,然后到10g单实例asm(该节点已经安装好11gR2 grid和db,但是
我tar了10g的 $ORACLE_HOME,使用10g创建了asm diskgroup),然后直接升级到11gR2,最后再从该11gR2
单节点恢复到另外一个3节点的11gR2 rac中。
由于第一次操作完成后,即升级完成之后,最后主机重启出现故障,无法启动,故作罢。最后可以花了
将近10个小时的时间直接从10g中exp导入到11gR2中,后面我接着从11gR2 恢复到3节点rac。
中间省略了很多的内容,不过大体上思路都差不多,没有什么复杂的东西,故不做过多描述。
本来是打算写一篇非常详细的总结文档,但是涉及到不少客户信息,加上自己有点懒,所以
这里就来一篇超级简洁版。
###### Single instance to rac(3 node)
1. create pfile
此时不用添加rac相关的参数,直接从原库create一份即可。
create pfile='/tmp/pfile.ora' from spfile;
恢复到asm需要修改pfile中control_files参数。
2. Restore controlfile;
rman target /
startup nomount pfile='/tmp/pfile.ora';
set dbid=2820248277;
restore controlfile from '/backup/backup_control.bak';
3. Restore datafiles
---restore_database.sh
rman target / <RUN {
ALLOCATE CHANNEL ch00 TYPE disk;
ALLOCATE CHANNEL ch01 TYPE disk;
ALLOCATE CHANNEL ch02 TYPE disk;
ALLOCATE CHANNEL ch03 TYPE disk;
set newname for datafile 1 to '+data/ucp/datafile/SYSTEM.dbf';
set newname for datafile 2 to '+data/ucp/datafile/UNDOTBS1.dbf';
set newname for datafile 3 to '+data/ucp/datafile/SYSAUX.dbf';
set newname for datafile 4 to '+data/ucp/datafile/UCP_DATA_01.dbf';
set newname for datafile 5 to '+data/ucp/datafile/UCP_INDEX_01.dbf';
set newname for datafile 6 to '+data/ucp/datafile/UNDOTBS2.dbf';
set newname for datafile 7 to '+data/ucp/datafile/WEB_DATA_01.dbf';
set newname for datafile 8 to '+data/ucp/datafile/WEB_INDEX_01.dbf';
set newname for datafile 9 to '+data/ucp/datafile/UCP_DATA_02.dbf';
set newname for datafile 10 to '+data/ucp/datafile/UCP_DATA_03.dbf';
set newname for datafile 11 to '+data/ucp/datafile/UCP_DATA_04.dbf';
set newname for datafile 12 to '+data/ucp/datafile/UCP_DATA_05.dbf';
set newname for datafile 13 to '+data/ucp/datafile/UCP_DATA_06.dbf';
set newname for datafile 14 to '+data/ucp/datafile/UCP_DATA_07.dbf';
set newname for datafile 15 to '+data/ucp/datafile/UCP_DATA_08.dbf';
set newname for datafile 16 to '+data/ucp/datafile/UCP_INDEX_02.dbf';
set newname for datafile 17 to '+data/ucp/datafile/UCP_INDEX_03.dbf';
set newname for datafile 18 to '+data/ucp/datafile/UCP_INDEX_04.dbf';
set newname for datafile 19 to '+data/ucp/datafile/UCP_INDEX_05.dbf';
set newname for datafile 20 to '+data/ucp/datafile/UCP_INDEX_06.dbf';
set newname for datafile 21 to '+data/ucp/datafile/WEB_DATA_02.dbf';
set newname for datafile 22 to '+data/ucp/datafile/WEB_DATA_03.dbf';
set newname for datafile 23 to '+data/ucp/datafile/WEB_DATA_04.dbf';
set newname for datafile 24 to '+data/ucp/datafile/WEB_DATA_05.dbf';
set newname for datafile 25 to '+data/ucp/datafile/WEB_DATA_06.dbf';
set newname for datafile 26 to '+data/ucp/datafile/WEB_DATA_07.dbf';
set newname for datafile 27 to '+data/ucp/datafile/WEB_DATA_08.dbf';
set newname for datafile 28 to '+data/ucp/datafile/WEB_INDEX_02.dbf';
set newname for datafile 29 to '+data/ucp/datafile/WEB_INDEX_03.dbf';
set newname for datafile 30 to '+data/ucp/datafile/WEB_INDEX_04.dbf';
set newname for datafile 31 to '+data/ucp/datafile/WEB_INDEX_05.dbf';
set newname for datafile 32 to '+data/ucp/datafile/WEB_INDEX_06.dbf';
set newname for datafile 33 to '+data/ucp/datafile/UNDOTBS1_02.dbf';
set newname for datafile 34 to '+data/ucp/datafile/UNDOTBS2_02.dbf';
set newname for datafile 35 to '+data/ucp/datafile/UNDOTBS1_03.dbf';
set newname for datafile 36 to '+data/ucp/datafile/UNDOTBS2_03.dbf';
set newname for datafile 37 to '+data/ucp/datafile/UNDOTBS1_04.dbf';
set newname for datafile 38 to '+data/ucp/datafile/UNDOTBS2_04.dbf';
set newname for datafile 39 to '+data/ucp/datafile/PERFSTAT.dbf';
set newname for datafile 40 to '+data/ucp/datafile/UCP_DATA_09.dbf';
set newname for datafile 41 to '+data/ucp/datafile/UCP_DATA_10.dbf';
set newname for datafile 42 to '+data/ucp/datafile/UCP_INDEX_07.dbf';
set newname for datafile 43 to '+data/ucp/datafile/UCP_INDEX_08.dbf';
set newname for datafile 44 to '+data/ucp/datafile/UCP_DATA_11.dbf';
set newname for datafile 45 to '+data/ucp/datafile/UCP_DATA_12.dbf';
set newname for datafile 46 to '+data/ucp/datafile/UCP_DATA_13.dbf';
set newname for datafile 47 to '+data/ucp/datafile/UCP_INDEX_09.dbf';
set newname for datafile 48 to '+data/ucp/datafile/UCP_INDEX_10.dbf';
set newname for datafile 49 to '+data/ucp/datafile/UCP_INDEX_11.dbf';
set newname for datafile 50 to '+data/ucp/datafile/GGS_TBS_01.dbf';
set newname for datafile 51 to '+data/ucp/datafile/UCP_DATA_14.dbf';
set newname for datafile 52 to '+data/ucp/datafile/UCP_DATA_15.dbf';
set newname for datafile 53 to '+data/ucp/datafile/UCP_DATA_16.dbf';
set newname for datafile 54 to '+data/ucp/datafile/UCP_DATA_17.dbf';
set newname for datafile 55 to '+data/ucp/datafile/UNDOTBS1_05.dbf';
set newname for datafile 56 to '+data/ucp/datafile/UNDOTBS2_05.dbf';
set newname for datafile 57 to '+data/ucp/datafile/UNDOTBS1_06.dbf';
set newname for datafile 58 to '+data/ucp/datafile/UNDOTBS2_06.dbf';
set newname for datafile 59 to '+data/ucp/datafile/UCP_DATA_18.dbf';
set newname for datafile 60 to '+data/ucp/datafile/UCP_DATA_19.dbf';
set newname for datafile 61 to '+data/ucp/datafile/UCP_INDEX_12.dbf';
set newname for datafile 62 to '+data/ucp/datafile/UCP_INDEX_13.dbf';
set newname for datafile 63 to '+data/ucp/datafile/WEB_DATA_09.dbf';
set newname for datafile 64 to '+data/ucp/datafile/WEB_DATA_10.dbf';
set newname for datafile 65 to '+data/ucp/datafile/WEB_INDEX_07.dbf';
set newname for datafile 66 to '+data/ucp/datafile/WEB_INDEX_08.dbf';
set newname for tempfile 1 to '+data/ucp/tempfile/temp01.dbf';
set newname for tempfile 2 to '+data/ucp/tempfile/temp02.dbf';
restore database from tag='DBFULL';
switch datafile all;
SWITCH TEMPFILE ALL;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
RELEASE CHANNEL ch02;
RELEASE CHANNEL ch03;
}
EOF
4. 拷贝原主库中archivelog到该主机(此时原生产机还未停止)
11gR2中 如果你archivelog存放在FRA磁盘组中,可以直接使用asmcmd命令进行cp拷贝,如下:
cp +fra/ucp/2012_10_08/thread_1_seq_323.291.796093125 /arch/thread_1_seq_323.291.796093125
cp +fra/ucp/2012_10_08/thread_1_seq_324.293.796094275 /arch/thread_1_seq_324.293.796094275
cp +fra/ucp/2012_10_08/thread_1_seq_325.294.796096147 /arch/thread_1_seq_325.294.796096147
cp +fra/ucp/2012_10_08/thread_1_seq_326.296.796100409 /arch/thread_1_seq_326.296.796100409
cp +fra/ucp/2012_10_08/thread_1_seq_327.297.796103579 /arch/thread_1_seq_327.297.796103579
cp +fra/ucp/2012_10_08/thread_1_seq_328.298.796106599 /arch/thread_1_seq_328.298.796106599
cp +fra/ucp/2012_10_08/thread_1_seq_329.299.796107497 /arch/thread_1_seq_329.299.796107497
cp +fra/ucp/2012_10_08/thread_1_seq_330.300.796108397 /arch/thread_1_seq_330.300.796108397
cp +fra/ucp/2012_10_08/thread_1_seq_331.301.796109067 /arch/thread_1_seq_331.301.796109067
5. Register archivelog
alter database register physical logfile '/arch/thread_1_seq_322.290.796091183';
alter database register physical logfile '/arch/thread_1_seq_323.291.796093125';
alter database register physical logfile '/arch/thread_1_seq_325.294.796096147';
alter database register physical logfile '/arch/thread_1_seq_326.296.796100409';
alter database register physical logfile '/arch/thread_1_seq_327.297.796103579';
alter database register physical logfile '/arch/thread_1_seq_328.298.796106599';
alter database register physical logfile '/arch/thread_1_seq_329.299.796107497';
alter database register physical logfile '/arch/thread_1_seq_330.300.796108397';
alter database register physical logfile '/arch/thread_1_seq_331.301.796109067';
当然你也可以使用更简单如下命令来注册archivelog:
rman target /
catalog start with '/arch';
6. Recover database
rman target /
recover database;
7. 第一次recover完成以后,由于我们业务系统还在运行,可能后面又会产生一些archivelog。
在该步骤停止业务系统,同时停库,停监听。
SQLPLUS > alter system checkpoint;
SQLPLUS > alter system switch logfile;
SQLPLUS > alter system switch logfile;
SQLPLUS > shutdown immediate
lsnrctl stop
8. 追加archivelog,进行recover。
拷贝上面第7步骤原生产库产生的archivelog,到恢复主机上,进行注册。
这样我们再进行recover,最后open数据库,这样可以最大程度的减少停机时间,速度快的话
保持在10~30分钟是没有任何问题的。
9. rename redo logfiles
alter database rename file '/dev/raw/raw7' to '+DATA/ucp/onlinelog/redo1_1';
alter database rename file '/dev/raw/raw12' to '+DATA/ucp/onlinelog/redo1_2';
alter database rename file '/dev/raw/raw8' to '+DATA/ucp/onlinelog/redo2_1';
alter database rename file '/dev/raw/raw13' to '+DATA/ucp/onlinelog/redo2_2';
alter database rename file '/dev/raw/raw9' to '+DATA/ucp/onlinelog/redo3_1';
alter database rename file '/dev/raw/raw14' to '+DATA/ucp/onlinelog/redo3_2';
alter database rename file '/dev/raw/raw10' to '+DATA/ucp/onlinelog/redo4_1';
alter database rename file '/dev/raw/raw15' to '+DATA/ucp/onlinelog/redo4_2';
alter database rename file '/dev/raw/raw11' to '+DATA/ucp/onlinelog/redo5_1';
alter database rename file '/dev/raw/raw16' to '+DATA/ucp/onlinelog/redo5_2';
alter database rename file '/dev/raw/raw17' to '+DATA/ucp/onlinelog/redo6_1';
alter database rename file '/dev/raw/raw22' to '+DATA/ucp/onlinelog/redo6_2'
10. Check checkpoint_change#是否一致
select max(checkpoint_change#) from v$datafile_header;
select min(checkpoint_change#) from v$datafile_header;
11. open resetlogs打开数据库
SQLPLUS > alter database open resetlogs;
说明:
1) 使用backup controlfile进行恢复,正常情况下必须以open resetlogs方式打开,即使你把原库的redo拷贝过来进行恢复也一样;
2) 如果想noresetlogs open数据库,唯一的方式就是重建controlfile,以noresetlogs方式重建即可。
3) 上面的open resetlogs操作会重建redo,tempfile,所以你观察alert log中出现一些相关的错误,可以忽略掉。
12. Create rac redo logfile
alter database add logfile thread 2 group 6 size 512m;
alter database add logfile thread 2 group 7 size 512m;
alter database add logfile thread 2 group 8 size 512m;
alter database add logfile thread 2 group 9 size 512m;
alter database add logfile thread 2 group 10 size 512m;
alter database add logfile thread 3 group 11 size 512m;
alter database add logfile thread 3 group 12 size 512m;
alter database add logfile thread 3 group 13 size 512m;
alter database add logfile thread 3 group 14 size 512m;
alter database add logfile thread 3 group 15 size 512m;
13. Create undo tablespace
create undo tablespace undotbs2 datafile '+DATA' size 20480m autoextend off;
create undo tablespace undotbs3 datafile '+DATA' size 20480m autoextend off;
14. create spfile
SQLPLUS > create spfile from pfile='/tmp/pfile.ora';
SQLPLUS > shutdown immediate
SQLPLUS > startup mount
15. Modify cluster parameters
alter system set cluster_database=true scope=spfile;
alter system set cluster_database_instances = 3 scope = spfile;
alter system set instance_number=1 scope=spfile sid='UCP1';
alter system set instance_number=2 scope=spfile sid='UCP2';
alter system set instance_number=3 scope=spfile sid='UCP3';
16. Restart instance
export ORACLE_SID=UCP3
sqlplus "/as sysdba"
shutdown immediate;
startup
17. 根据该rac实例spfile,创建pfile,用于启动其他2个rac 节点
sqlplus "/as sysdba"
create pfile='/tmp/pfile.ora' from spfile;
18. 修改/tmp/pfile.ora中rac相关参数,以及创建相关的目录
19. 启动剩余的2个rac 实例
20. 修改undo_tablespace
alter system set undo_tablespace=undotbs1 scope=both sid='UCP1';
alter system set undo_tablespace=undotbs2 scope=both sid='UCP2';
alter system set undo_tablespace=undotbs3 scope=both sid='UCP3';
21. 注册数据库实例到crs中
srvctl add database -d UCP -o $ORACLE_HOME
srvctl add instance -d UCP -i UCP1 -n node1
srvctl add instance -d UCP -i UCP2 -n node2
srvctl add instance -d UCP -i UCP3 -n node3
22. 配置listener.ora、tnsnames.ora
23. 启动listener,测试业务.
说明:本来还是从10gR2 rac(raw)开始恢复,然后到10g单实例asm(该节点已经安装好11gR2 grid和db,但是
我tar了10g的 $ORACLE_HOME,使用10g创建了asm diskgroup),然后直接升级到11gR2,最后再从该11gR2
单节点恢复到另外一个3节点的11gR2 rac中。
由于第一次操作完成后,即升级完成之后,最后主机重启出现故障,无法启动,故作罢。最后可以花了
将近10个小时的时间直接从10g中exp导入到11gR2中,后面我接着从11gR2 恢复到3节点rac。
中间省略了很多的内容,不过大体上思路都差不多,没有什么复杂的东西,故不做过多描述。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




