1.背景
软件环境:操作系统:Windows Server 2008 R2,数据库:Oracle 11g 11.2.0.4
服务器网络:服务器A:172.16.22.144,服务器B:172.16.22.145
应用场景:从服务器A,将RMAN备份;恢复到服务器B上。
2.RMAN备份
2.1脚本修改为符合本机实际情况
1)rman.bat
- @echo off
- set oracle_sid=orcl
- set da=%date:~0,4%%date:~5,2%%date:~8,2%
- set oraclepath=\"D:\\oracle\\product\\11.2.0\\dbhome_1\\BIN\"
- %oraclepath%\\rman target / msglog D:\\DB_backup\\Oracle_DB\\rmanlog\\%da% cmdfile=D:\\DB_backup\\Oracle_DB\\sql.rman
2)sql.man
点击(此处)折叠或打开
- RUN {
- CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
- CONFIGURE CONTROLFILE AUTOBACKUP ON;
- CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO \'D:/DB_backup/Oracle_DB/%F\';
- ALLOCATE CHANNEL CH1 DEVICE TYPE DISK FORMAT \'D:/DB_backup/Oracle_DB/%U\';
- BACKUP DATABASE SKIP INACCESSIBLE FILESPERSET 10
- PLUS ARCHIVELOG FILESPERSET 20
- DELETE ALL INPUT;
- RELEASE CHANNEL CH1;
- }
- ALLOCATE CHANNEL FOR MAINTENANCE DEVICE TYPE DISK;
- CROSSCHECK BACKUPSET;
- DELETE NOPROMPT OBSOLETE
2.2切换数据库为归档模式(归档模式跳过此步)
在"mount"状态下,alter database archivlog,切换为归档模式,再将数据库改为"open"状态。更具备的代码如下:
点击(此处)折叠或打开
- SQL〉shutdown immediate;
- Database closed.
- Database dismounted.
- ORACLE instance shut down.
- SQL> startup mount;
- ORACLE instance started.
-
- Total System Global Area 2572144640 bytes
- Fixed Size 2283984 bytes
- Variable Size 1056966192 bytes
- Database Buffers 1509949440 bytes
- Redo Buffers 2945024 bytes
- Database mounted.
- SQL> alter database archivelog;
-
- Database altered.
-
- SQL> alter database open;
-
- Database altered.
2.3cmd环境下执行rman.bat文件,执行完毕后,备份路径中会生成相关如下图的文件:

其中“C-1399XXX”为控制文件。
3.RMAN恢复
3.1备份文件拷贝到目标机器
将备份文件从服务器A的备份目录拷贝到目标机器B中。
3.2查询服务器A中的数据库的dbid。
上述语句查出的dbid后期会用到。
3.3创建数据库实例
用DBCA(图形界面比命令创建简单,暂且介绍图形界面)创建与源服务器A中同版本、同SID、主目录相同的Oracle实例。实例创建完毕后,停止实例名服务,删除Oracle主目录下\oradata\实例名\下的所有文件[此步还需要再验证]。
3.4恢复控制文件
(1)启动实例为nomount状态
(2)进入RAMN环境,恢复控制文件
恢复成功会提示如下:
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:04
输出文件名=D:\ORADATA\OCP\CONTROL01.CTL
完成 restore 于 17-3月 -12
(3)设置目标数据源的DBID
(4)启动数据库到mount状态
(5)Catalog Start with 命令,向‘‘控制文件’’中加载备份集,通过此命令,Oracle可搜索指定目录中的备份文件,并将这些文件加载到控制文件中,使这些文件有恢复的可能。
RMAN> catalog start with '目标机器存放备份路径’;
注意:控制文件不要加到这个目录下。
catalog start with 过程时发现提示如下(跳过执行 restore):
点击( 此处 )折叠或打开
(6)恢复数据文件
restore database;
(7)恢复数据文件
recover database;
RMAN-06054错误,重新来一遍recover database until scn 1755988。
(8)打开数据库
alter database open resetlogs;
3.RMAN恢复
3.1备份文件拷贝到目标机器
将备份文件从服务器A的备份目录拷贝到目标机器B中。
3.2查询服务器A中的数据库的dbid。
点击(此处)折叠或打开
- select dbid from v$database;
3.3创建数据库实例
用DBCA(图形界面比命令创建简单,暂且介绍图形界面)创建与源服务器A中同版本、同SID、主目录相同的Oracle实例。实例创建完毕后,停止实例名服务,删除Oracle主目录下\oradata\实例名\下的所有文件[此步还需要再验证]。
3.4恢复控制文件
(1)启动实例为nomount状态
点击(此处)折叠或打开
- sqplus \"/as sysdba\"
- shutdown immediate;--已经打开先关闭
- startup nomout;
- RMAN target /
- restore controlfile from\'目标机器存放备份路径\\XXX\';
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:04
输出文件名=D:\ORADATA\OCP\CONTROL01.CTL
完成 restore 于 17-3月 -12
(3)设置目标数据源的DBID
点击(此处)折叠或打开
- set dbid=\"3.2查询出的dbid的值\"
点击(此处)折叠或打开
- alter database mount;
RMAN> catalog start with '目标机器存放备份路径’;
注意:控制文件不要加到这个目录下。
catalog start with 过程时发现提示如下(跳过执行 restore):
点击( 此处 )折叠或打开
- using target database control file instead fo recovery catalog
- searching for all files that mathc the parttern D:\\DB_backup\\Oracle_DB\\
- no files found to be unknown to the database;
restore database;
(7)恢复数据文件
recover database;
- Starting recover at 03-MAR-15
- using channel ORA_DISK_1
-
- starting media recovery
-
- archived log for thread 1 with sequence 1 is already on disk as file D:\\ORACLE\\FAST_RECOVERY_AREA\\ORCL\\ARCHIVELOG\\2015_0
- 3_03\\O1_MF_1_1_BHBNQ7NR_.ARC
- archived log for thread 1 with sequence 2 is already on disk as file D:\\ORACLE\\FAST_RECOVERY_AREA\\ORCL\\ARCHIVELOG\\2015_0
- 3_03\\O1_MF_1_2_BHBQWGXX_.ARC
- channel ORA_DISK_1: starting archived log restore to default destination
- channel ORA_DISK_1: restoring archived log
- archived log thread=1 sequence=1047
- channel ORA_DISK_1: reading from backup piece D:\\DB_BACKUP\\ORACLE_DB\\07Q0R4V6_1_1
- channel ORA_DISK_1: piece handle=D:\\DB_BACKUP\\ORACLE_DB\\07Q0R4V6_1_1 tag=TAG20150302T164422
- channel ORA_DISK_1: restored backup piece 1
- channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
- archived log file name=D:\\ORACLE\\FAST_RECOVERY_AREA\\ORCL\\ARCHIVELOG\\2015_03_03\\O1_MF_1_1047_BHBVD63J_.ARC thread=1 seque
- nce=1047
- archived log file name=D:\\ORACLE\\FAST_RECOVERY_AREA\\ORCL\\ARCHIVELOG\\2015_03_03\\O1_MF_1_1_BHBNQ7NR_.ARC thread=1 sequence
- =1
- channel default: deleting archived log(s)
- archived log file name=D:\\ORACLE\\FAST_RECOVERY_AREA\\ORCL\\ARCHIVELOG\\2015_03_03\\O1_MF_1_1047_BHBVD63J_.ARC RECID=6 STAMP=
- 873389702
- archived log file name=D:\\ORACLE\\FAST_RECOVERY_AREA\\ORCL\\ARCHIVELOG\\2015_03_03\\O1_MF_1_2_BHBQWGXX_.ARC thread=1 sequence
- =2
- unable to find archived log
- archived log thread=1 sequence=3
- RMAN-00571: ===========================================================
- RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
- RMAN-00571: ===========================================================
- RMAN-03002: failure of recover command at 03/03/2015 16:15:04
- RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 3 and starting SCN of 1755988
(8)打开数据库
alter database open resetlogs;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8043290/viewspace-1455361/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8043290/viewspace-1455361/