rman异机异构恢复
一.源端数据库全备
1.全库备份脚本
cat rman_full_backup.sh
source /home/oracle/.bash_profile
rman target / log=/home/oracle/backup/logs/backupall_rman.log<<EOF
run
{
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
sql 'alter system archive log current';
backup as compressed backupset database format '/home/oracle/backup/bak/db_%d_%T_%U';
sql 'alter system archive log current';
backup archivelog all format '/home/oracle/backup/bak/arch_%t_%s';
backup format '/home/oracle/backup/bak/con_%s_%p' current controlfile;
release channel ch1;
release channel ch2;
}
EOF
2.scp到目标端
scp /home/oracle/backup/bak/* root@192.168.10.10:/backup
chown -R oracle:install /backup
chmod –R 775 /backup
二、目标端还原操作
1.在目标端设置DBID,启动到nomount阶段
注:在rman下即使没有参数文件,默认也会启动一个DUMMY实例,以便能够恢复参数文件
rman target /
set dbid 111
startup nomount;
2.还原spfile
restore spfile to pfile '/home/oracle/oracle/product/10.2.0/db_1/dbs/spfileSCM2.ora' from '/app/backup/backup/backupsets/ora_cfc-3990839260-20170518-00';
参数文件修改之后可能需要修改相关的参数,可以相关的路径修改成新的路径
rman target /
startup nomount pfile='/home/oracle/oracle/product/10.2.0/db_1/dbs/initSCM2.ora';
注:如果新库路径跟老库不一致,需要创建相关的目录并修改pfile相关的参数文件。
mkdir -p /home/oracle/app/oracle/admin/orcl/{adump,bdump,cdump,ddump,udump}
mkdir -p /home/oracle/app/oracle/oradata/orcl
mkdir -p /home/oracle/app/oracle/flash_recovery_area/ORCL
3.恢复控制文件
RMAN>restore controlfile from '/app/backup/backup/backupsets/ora_cfc-3990839260-20170518-00';
4.启动mount状态
alter database mount;
5.检查数据库备份有效性
RMAN> crosscheck backup;
6.把备份集注册一下
RMAN> catalog start with '/app/backup/backup';
RMAN> crosscheck backup;
RMAN> restore database preview summary;
7.如果要将数据文件还原到不同的地方(恢复路径不同),那么就要用set命令指定新位置。 并且使用switch datafile all将信息更新的到控制文件。否则就可以直接使用restore database命令。
run
{
set newname for datafile 1 to "/data/scm2/system01.dbf";
set newname for datafile 2 to "/data/scm2/undotbs01.dbf";
set newname for datafile 3 to "/data/scm2/sysaux01.dbf";
set newname for datafile 4 to "/data/scm2/users01.dbf";
set newname for datafile 5 to "/data/scm2/bookt_d01.dbf";
set newname for datafile 6 to "/data/scm2/data_consol_d01.dbf";
set newname for datafile 7 to "/data/scm2/data_consol_x01.dbf";
set newname for datafile 8 to "/data/scm2/escmowner_d01.dbf";
set newname for datafile 9 to "/data/scm2/escmowner_x01.dbf";
set newname for datafile 10 to "/data/scm2/escmowner_x02.dbf";
set newname for datafile 11 to "/data/scm2/escmowner_x03.dbf";
set newname for datafile 12 to "/data/scm2/escmupdate_d01.dbf";
set newname for datafile 13 to "/data/scm2/escmupdate_x01.dbf";
set newname for datafile 14 to "/data/scm2/gent_d03.dbf";
set newname for datafile 15 to "/data/scm2/gent_d01.dbf";
set newname for datafile 16 to "/data/scm2/gent_d02.dbf";
set newname for datafile 17 to "/data/scm2/gent_x01.dbf";
set newname for datafile 18 to "/data/scm2/gsot_d01.dbf";
set newname for datafile 19 to "/data/scm2/inventory_d01.dbf";
set newname for datafile 20 to "/data/scm2/inventory_d02.dbf";
set newname for datafile 21 to "/data/scm2/inventory_x01.dbf";
set newname for datafile 22 to "/data/scm2/mit_d01.dbf";
set newname for datafile 23 to "/data/scm2/ppot_d01.dbf";
set newname for datafile 24 to "/data/scm2/sct_d01.dbf";
set newname for datafile 25 to "/data/scm2/smt_d01.dbf";
set newname for datafile 26 to "/data/scm2/smt_x01.dbf";
set newname for datafile 27 to "/data/scm2/statspack_d01.dbf";
set newname for datafile 28 to "/data/scm2/stat_d01.dbf";
set newname for datafile 29 to "/data/scm2/stat_x01.dbf";
set newname for datafile 30 to "/data/scm2/tna_d01.dbf";
set newname for datafile 31 to "/data/scm2/tna_x01.dbf";
set newname for datafile 32 to "/data/scm2/tracking_d01.dbf";
set newname for datafile 33 to "/data/scm2/gent_d04.dbf";
set newname for datafile 34 to "/data/scm2/ANTIDUMP_D02.dbf";
set newname for datafile 35 to "/data/scm2/ANTIDUMP_x01.dbf";
set newname for datafile 36 to "/data/scm2/escmupdate_d02.dbf";
set newname for datafile 37 to "/data/scm2/users02.dbf";
set newname for datafile 38 to "/data/scm2/escmupdate_d03.dbf";
set newname for datafile 39 to "/data/scm2/TDC_SHIPING_DATA01.dbf";
set newname for datafile 40 to "/data/scm2/TDC_SHIPING_IDX01.dbf";
set newname for datafile 41 to "/data/scm2/escmowner_d02.dbf";
restore database ;
switch datafile all;
}
8.恢复数据库
RMAN> recover database;
9:处理redo log和temp表空间
如前面所说,如果实例安装路径不同,或者redo log和临时表空间对应的文件在目标服务器上找不到。那么就必须操作下面
SQL> col status for a7
SQL> col type for a7;
SQL> col member for a64;
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ---------------------------------------------------------------- ---
4 ONLINE /u01/app/oracle/oradata/SCM2/redo04.log NO
3 ONLINE /u01/app/oracle/oradata/SCM2/redo03.log NO
2 ONLINE /u01/app/oracle/oradata/SCM2/redo02.log NO
1 ONLINE /u01/app/oracle/oradata/SCM2/redo01.log NO
SQL>
SQL> alter database rename file '/u01/app/oracle/oradata/SCM2/redo01.log'
2 to '/home/oracle/oracle/oradata/SCM2/redo01.log';
Database altered.
SQL> alter database rename file '/u01/app/oracle/oradata/SCM2/redo02.log'
2 to '/home/oracle/oracle/oradata/SCM2/redo02.log';
Database altered
SQL> alter database rename file '/u01/app/oracle/oradata/SCM2/redo03.log'
2 to '/home/oracle/oracle/oradata/SCM2/redo03.log';
Database altered.
SQL> alter database rename file '/u01/app/oracle/oradata/SCM2/redo04.log'
2 to '/home/oracle/oracle/oradata/SCM2/redo04.log';
Database altered.
SQL>
SQL> col name for a80;
SQL> select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/SCM2/temp01.dbf
SQL> alter database tempfile '/u01/app/oracle/oradata/SCM2/temp01.dbf' drop;
SQL> alter tablespace temp
2 add tempfile '/home/oracle/oracle/oradata/temp01.dbf'
3 size 200M
4 autoextend on
5 next 128M
6 maxsize 4G;
Tablespace altered.
10:用open resetlogs 打开数据库
正常情况下应该是
SQL> alter database open resetlogs;
Database altered.