Oracle异机恢复处理
在平时工作中,我们可能会或多或少遇到数据迁移问题,比如:数据库之前在windows机器上,然后我们由于更换新服务器,想把数据迁移到新服务器上,新服务器安装的是linux系统。由于系统不同,目录结构肯定也不一样,所以在备份恢复数据时,我们就遇到很多问题。下面分享下我处理这种问题的恢复方法。
环境:SUSE linux10(由于资源有限,源库和目标库都在此服务器上,但不影响操作方法,源库和目标库的文件位置不同,这个是重点,因为异构系统的文件存放路径肯定不一致,比如上面提到windows系统的库恢复到linux系统上)。
源库:db_name:ceshidb,instance_name: ceshidb
目标库:db_name: ceshidb,instance_name: oric
测试版本:10.2.0.5
几点说明:
(1) RMAN 恢复的时候,db_name必须相同。如果说要想改成其他的数据库名,可以在恢复成功后,用nid 命令修改。数据库名的信息会记录到控制文件里,所以如果在恢复的时候,如果db_name不一致,恢复的时候会报错。
(2) 如果恢复的路径和源库不一致,就需要在restore时用set 命令指定新位置。 并且使用switch datafile all将信息更新的到控制文件。
开始实战操作
一:备份源库数据
先做全库备份(可以把归档备份和控制文件备份写到一个run里面,我是分开备份的,目的在于说明下备份顺序,全库备份-归档日志备份-控制文件备份,建议大家采用这样的顺序来备份数据,因为一般都没有配置catalog库,所以备份的信息存储在控制文件中,当还原数据时,首先还原控制文件,控制文件记录了你的备份信息,如果先备份控制文件,那么在备份的控制文件之后做的备份信息,就没有记录在此备份的控制文件中,请大家注意哈)
全库备份
oracle@nwsj:/u01/oracle/oradata> rman target /
Recovery Manager: Release 10.2.0.5.0 - Production on Thu Jan 21 18:49:522016
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: CESHIDB (DBID=2027504492)
RMAN> run {
allocate channel d1 type disk;
allocate channel d2 type disk;
backup database format '/u01/backup_full_%U';
release channel d1;
release channel d2;
}
allocate channel d1 type disk;
allocate channel d2 type disk;
Starting backup at 21-JAN-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=142 devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00009 name=/u01/oracle/oradata/ceshiku/cs_dir03.dbf
input datafile fno=00004 name=/u01/oracle/oradata/ceshiku/users01.dbf
input datafile fno=00002 name=/u01/oracle/oradata/ceshiku/undotbs01.dbf
input datafile fno=00001 name=/u01/oracle/oradata/ceshiku/system01.dbf
input datafile fno=00003 name=/u01/oracle/oradata/ceshiku/sysaux01.dbf
input datafile fno=00006 name=/u01/oracle/oradata/ceshiku/CS_DIR02.dbf
input datafile fno=00007 name=/u01/oracle/oradata/ceshiku/aa01.dbf
input datafile fno=00005 name=/u01/oracle/oradata/ceshiku/cs_dir01.dbf
input datafile fno=00010 name=/u01/oracle/oradata/ceshiku/b02.dbf
input datafile fno=00008 name=/u01/oracle/oradata/ceshiku/b01.dbf
channel ORA_DISK_1: starting piece 1 at 21-JAN-16
channel ORA_DISK_1: finished piece 1 at 21-JAN-16
piece handle=/u01/backup_full_01qrurnv_1_1 tag=TAG20160121T185039comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 21-JAN-16
channel ORA_DISK_1: finished piece 1 at 21-JAN-16
piece handle=/u01/backup_full_02qruroe_1_1 tag=TAG20160121T185039comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
released channel: d1
released channel: d2
Finished backup at 21-JAN-16
切换下日志
RMAN> sql 'alter system switch logfile';
sql statement: alter system switch logfile
RMAN> sql 'alter system switch logfile';
sql statement: alter system switch logfile
归档日志备份
RMAN> backup archivelog all format '/u01/backup_arch_%U';
Starting backup at 21-JAN-16
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=1 recid=1 stamp=901738168
input archive log thread=1 sequence=2 recid=2 stamp=901738171
input archive log thread=1 sequence=3 recid=3 stamp=901738174
input archive log thread=1 sequence=4 recid=4 stamp=901738276
input archive log thread=1 sequence=5 recid=5 stamp=901738282
input archive log thread=1 sequence=6 recid=6 stamp=901738288
input archive log thread=1 sequence=7 recid=7 stamp=901738309
channel ORA_DISK_1: starting piece 1 at 21-JAN-16
channel ORA_DISK_1: finished piece 1 at 21-JAN-16
piece handle=/u01/backup_arch_03qrurq5_1_1 tag=TAG20160121T185149comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 21-JAN-16
控制文件备份
RMAN> backup current controlfile format'/u01/backup_con_%U';
Starting backup at 21-JAN-16
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafilebackupset
channel ORA_DISK_1: specifying datafile(s)in backupset
including current control file in backupset
channel ORA_DISK_1: starting piece 1 at21-JAN-16
channel ORA_DISK_1: finished piece 1 at21-JAN-16
piece handle=/u01/backup_con_04qrurr1_1_1tag=TAG20160121T185217 comment=NONE
channel ORA_DISK_1: backup set complete,elapsed time: 00:00:01
Finished backup at 21-JAN-16
然后关闭源库ceshidb(因为我是在同一台服务器上做的,所以需要修改下源库的db_name,否则在目标库恢复了控制文件后,不能mount的,会提示:cannot mount database inEXCLUSIVE mode,因为在$ORACLE_HOME/dbs下面的lkceshidb文件存在,进程在运行中,所以会有这个提示。如果是不同的服务器,则不需要此操作,顺便练习下nid方式来修改数据库名)
oracle@nwsj:/u01/oracle> nid target=/dbname=ceshiku
DBNEWID: Release 10.2.0.5.0 - Production onThu Ja