Rman[backup database skip inaccessible]备份的恢复测试
一、概述
此模拟为PHONE表空间新添加数据文件‘PHONE02.DBF’(该数据文件中没有任何数据写入),然后将该数据文件脱机,并从操作系统删除,因为该数据文件尚为写入任何数据,所以其offline并删除并不会影响的PHONE的正常使用。然后通过RMAN对执行全备(因为丢失数据文件,所以备份时须指定skip inaccessible关键字)。然后再就整个数据库执行恢复(因为是跳过丢失的数据文件进行的备份,所以恢复的时候需要到下通过执行recover)。
二、模拟故障
1.检查PHONE表空间的当前数据文件
SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='PHONE';
TABLESPACE_NAME FILE_NAME
------------------------------ ------------------------------------------------------------
PHONE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE01.DBF
2.向PHONE添加一个新的数据文件‘PHINE02.DBF’
SQL> alter tablespace phone add datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE02.DBF' size 2
表空间已更改。
3.再次检查PHONE表空间是否已有新建的数据文件
SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='PHONE';
TABLESPACE_NAME FILE_NAME
------------------------------ ------------------------------------------------------------
PHONE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE01.DBF
PHONE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE02.DBF
4.将新添加的数据文件‘PHONE02.DBF’脱机
SQL> ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE02.DBF' OFFLINE;
数据库已更改。
SQL>
SQL> SELECT NAME,STATUS FROM V$DATAFILE WHERE NAME LIKE '%PHONE%';
NAME STATUS
------------------------------------------------------------ -------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE01.DBF ONLINE
D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE02.DBF RECOVER
5.从操作系统删除‘PHONE02.DBF ’数据文件
SQL>host
C:\>del D:\oracle\product\10.2.0\oradata\study\PHONE02.DBF
6.执行RMAN备份,因为PHONE表空间的‘PHONE02.DBF ’数据文件已经不存在,所以RMAN备份需指定“skip inaccessible” 关键字
RMAN> run{
2> allocate channel c1 device type disk format "f:\FULL-x\%U";
3> backup database skip inaccessible plus archivelog delete input;
4> backup current controlfile format 'f:\FULL-x\control%t%f.ctl';
5> }
7.恢复测试(恢复控制文件)
SQL>startup nomount force
SQL>host
C:\Documents and Settings\Administrator> rman target /
恢复器: Release 10.2.0.1.0 - Production on 星期三 9月 1 23:19:41 2010
Copyright (c) 1982, , . All rights reserved.
连接到目标数据库: study (未装载)
RMAN> restore controlfile from 'F:\FULL-x\CONTROL7286087020.CTL';
启动 restore 于 01-9月 -10
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:06
输出文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\CONTROL01.CTL
输出文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\CONTROL02.CTL
输出文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\CONTROL03.CTL
完成 restore 于 01-9月 -10
RMAN> alter database mount;
数据库已装载
释放的通道: ORA_DISK_1
RMAN>
8.恢复测试(restore所有可用的数据文件)
SQL> select file#,name from v$datafile;
FILE# NAME
---------- ------------------------------------------------------------
1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF
2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF
3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF
4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF
5 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STREAMS_TBS01.DBF
6 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE01.DBF
7 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE02.DBF
已选择7行。
RMAN> restore datafile 1,2,3,4,5,6;
启动 restore 于 01-9月 -10
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
正将数据文件00001恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF
正将数据文件00002恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF
正将数据文件00003恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF
正将数据文件00004恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF
正将数据文件00005恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STREAMS_TBS01.DBF
正将数据文件00006恢复到D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE01.DBF
通道 ORA_DISK_1: 正在读取备份段 F:\FULL-X\0CLMRBQU_1_1
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = F:\FULL-X\0CLMRBQU_1_1 标记 = TAG20100901T231645
通道 ORA_DISK_1: 恢复完成, 用时: 00:01:15
完成 restore 于 01-9月 -10
9.恢复测试(恢复数据库)
因为数据库中PHONE表空间的‘PHINE02.DBF’数据文件已在系统中删除,所以恢复的时候回报错RMAN-06067,这个时候我们不要害怕 ,切换到SQL>中执行【recover database using backup controlfile until cancel;】即可完成数据库的恢复
RMAN> recover datafile 1;
启动 recover 于 02-9月 -10
使用通道 ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 09/01/2010 22:15:43
RMAN-06067: RECOVER DATABASE required with a backup or created controlfile
C:\Documents and Settings\Administrator>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 9月 2 00:32:51 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
已连接。
SQL> alter database datafile 7 offline drop;
数据库已更改。
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 313505 (在 09/01/2010 23:16:46 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOG\ARC00027_0728496696.001
ORA-00280: 更改 313505 (用于线程 1) 在序列 #27 中
指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 313565 (在 09/01/2010 23:18:18 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOG\ARC00028_0728496696.001
ORA-00280: 更改 313565 (用于线程 1) 在序列 #28 中
ORA-00278: 此恢复不再需要日志文件
'D:\ORACLE\PRODUCT\10.2.0\ARCHIVELOG\ARC00027_0728496696.001'
已应用的日志。
完成介质恢复。
SQL>
10.指定 resetlogs关键字,启动数据库到open状态
SQL> alter database open resetlogs;
数据库已更改。
11.验证数据库是否正常,验证PHONE表空间是否可用
SQL> select tablespace_name,file_name from dba_data_files where file_name like '%PHONE%';
TABLESPACE_NAME FILE_NAME
------------------------------ ------------------------------------------------------------
PHONE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE01.DBF
PHONE D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE02.DBF
SQL>
SQL> select name,status from v$datafile where name like '%PHONE%';
NAME STATUS
------------------------------------------------------------ -------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE01.DBF ONLINE
D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\PHONE02.DBF OFFLINE
SQL>
三、数据库恢复正常
数据库恢复测试完成,数据库恢复正常。