必须注意:不完全恢复必须是数据库级别的。基于时间的不完全恢复在用户误删除、误截断表时可以使用。
首先模拟数据库的故障,删除一个数据文件,然后在mount上数据库。
[sql] view plaincopyprint?
- [oracle@linux oracle]$ export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
- [oracle@linux oracle]$ sqlplus /nolog
- SQL*Plus: Release 10.2.0.4.0 - Production on 星期二 10月 18 05:07:51 2011
- Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
- SQL> conn /as sysdba
- 已连接。
- SQL> select sysdate from dual;
- SYSDATE
- -------------------
- 2011-10-18 05:08:04
- SQL> select file_name from dba_data_files;
- FILE_NAME
- ------------------------------------------------------------
- /u01/app/oracle/oradata/orcl/users01.dbf
- /u01/app/oracle/oradata/orcl/sysaux01.dbf
- /u01/app/oracle/oradata/orcl/undotbs01.dbf
- /u01/app/oracle/oradata/orcl/system01.dbf
- /u01/app/oracle/oradata/orcl/tb1.dbf
- SQL> ! rm -rf /u01/app/oracle/oradata/orcl/tb1.dbf
- SQL> shutdown abort
- ORACLE 例程已经关闭。
- SQL> startup mount
- ORACLE 例程已经启动。
- Total System Global Area 167772160 bytes
- Fixed Size 1266392 bytes
- Variable Size 88083752 bytes
- Database Buffers 75497472 bytes
- Redo Buffers 2924544 bytes
- 数据库装载完毕。
- SQL> alter database open;
- alter database open
- *
- 第 1 行出现错误:
- ORA-01157: 无法标识/锁定数据文件 5 - 请参阅 DBWR 跟踪文件
- ORA-01110: 数据文件 5: '/u01/app/oracle/oradata/orcl/tb1.dbf'
[oracle@linux oracle]$ export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
[oracle@linux oracle]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on 星期二 10月 18 05:07:51 2011
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
SQL> conn /as sysdba
已连接。
SQL> select sysdate from dual;
SYSDATE
-------------------
2011-10-18 05:08:04
SQL> select file_name from dba_data_files;
FILE_NAME
------------------------------------------------------------
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/tb1.dbf
SQL> ! rm -rf /u01/app/oracle/oradata/orcl/tb1.dbf
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 88083752 bytes
Database Buffers 75497472 bytes
Redo Buffers 2924544 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 5 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 5: '/u01/app/oracle/oradata/orcl/tb1.dbf'
现在使用基于时间的恢复来恢复数据库
[sql] view plaincopyprint?
- [oracle@linux oracle]$ export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
- [oracle@linux oracle]$ rman target /
- 恢复管理器: Release 10.2.0.4.0 - Production on 星期二 10月 18 05:08:54 2011
- Copyright (c) 1982, 2007, Oracle. All rights reserved.
- 已连接到目标数据库: ORCL (DBID=1292118315, 未打开)
- RMAN> run {
- 2> set until time='2011-10-18 05:08:04';
- 3> restore database;
- 4> recover database;
- 5> alter database open resetlogs; }
- 正在执行命令: SET until clause
- 使用目标数据库控制文件替代恢复目录
- 启动 restore 于 2011-10-18 05:10:18
- 分配的通道: ORA_DISK_1
- 通道 ORA_DISK_1: sid=155 devtype=DISK
- 通道 ORA_DISK_1: 正在开始恢复数据文件备份集
- 通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
- 正将数据文件00001还原到/u01/app/oracle/oradata/orcl/system01.dbf
- 正将数据文件00002还原到/u01/app/oracle/oradata/orcl/undotbs01.dbf
- 正将数据文件00003还原到/u01/app/oracle/oradata/orcl/sysaux01.dbf
- 正将数据文件00004还原到/u01/app/oracle/oradata/orcl/users01.dbf
- 正将数据文件00005还原到/u01/app/oracle/oradata/orcl/tb1.dbf
- 通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_18/o1_mf_nnndf_TAG20111018T045948_79s5t51d_.bkp
- 通道 ORA_DISK_1: 已还原备份片段 1
- 段句柄 = /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_18/o1_mf_nnndf_TAG20111018T045948_79s5t51d_.bkp 标记 = TAG20111018T045948
- 通道 ORA_DISK_1: 还原完成, 用时: 00:00:36
- 完成 restore 于 2011-10-18 05:10:56
- 启动 recover 于 2011-10-18 05:10:57
- 使用通道 ORA_DISK_1
- 正在开始介质的恢复
- 介质恢复完成, 用时: 00:00:05
- 完成 recover 于 2011-10-18 05:11:03
- 数据库已打开
[oracle@linux oracle]$ export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
[oracle@linux oracle]$ rman target /
恢复管理器: Release 10.2.0.4.0 - Production on 星期二 10月 18 05:08:54 2011
Copyright (c) 1982, 2007, Oracle. All rights reserved.
已连接到目标数据库: ORCL (DBID=1292118315, 未打开)
RMAN> run {
2> set until time='2011-10-18 05:08:04';
3> restore database;
4> recover database;
5> alter database open resetlogs; }
正在执行命令: SET until clause
使用目标数据库控制文件替代恢复目录
启动 restore 于 2011-10-18 05:10:18
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=155 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
正将数据文件00001还原到/u01/app/oracle/oradata/orcl/system01.dbf
正将数据文件00002还原到/u01/app/oracle/oradata/orcl/undotbs01.dbf
正将数据文件00003还原到/u01/app/oracle/oradata/orcl/sysaux01.dbf
正将数据文件00004还原到/u01/app/oracle/oradata/orcl/users01.dbf
正将数据文件00005还原到/u01/app/oracle/oradata/orcl/tb1.dbf
通道 ORA_DISK_1: 正在读取备份片段 /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_18/o1_mf_nnndf_TAG20111018T045948_79s5t51d_.bkp
通道 ORA_DISK_1: 已还原备份片段 1
段句柄 = /u01/app/oracle/flash_recovery_area/ORCL/backupset/2011_10_18/o1_mf_nnndf_TAG20111018T045948_79s5t51d_.bkp 标记 = TAG20111018T045948
通道 ORA_DISK_1: 还原完成, 用时: 00:00:36
完成 restore 于 2011-10-18 05:10:56
启动 recover 于 2011-10-18 05:10:57
使用通道 ORA_DISK_1
正在开始介质的恢复
介质恢复完成, 用时: 00:00:05
完成 recover 于 2011-10-18 05:11:03
数据库已打开
最后可以看见数据库已经是open状态拉
[sql] view plaincopyprint?
- SQL> select status from v$instance;
- STATUS
- ------------
- OPEN