基于备份控制文件的恢复只要适用于以下情况:表空间被意外删除;所有控制文件全部损坏。
先关闭数据库,执行一次全库冷备份。
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> ! cp /u01/app/oracle/oradata/orcl/* /u01/app/oracle/backup/
现在已经有一个数据库的冷备份了,里面包含一个tb1表空间,现在模拟用户误删除了tb1这个表空间
SQL> conn /as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 62917928 bytes
Database Buffers 100663296 bytes
Redo Buffers 2924544 bytes
数据库装载完毕。
数据库已经打开。
SQL> drop tablespace tb1 including contents;
表空间已删除。
而当前的控制文件中已经不包含tb1表空间了,以前备份的控制文件还包含。所以必须使用以前的控制文件来恢复。
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> ! rm -rf /u01/app/oracle/oradata/orcl/*.ctl
SQL> ! rm -rf /u01/app/oracle/oradata/orcl/*.dbf
SQL> ! cp /u01/app/oracle/backup/*.ctl /u01/app/oracle/oradata/orcl/
SQL> ! cp /u01/app/oracle/backup/*.dbf /u01/app/oracle/oradata/orcl/
使用控制文件恢复
SQL> conn /as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 62917928 bytes
Database Buffers 100663296 bytes
Redo Buffers 2924544 bytes
数据库装载完毕。
ORA-00314: 日志 1 (用于线程 1) 要求的 sequence# 与 不匹配
ORA-00312: 联机日志 1 线程 1: '/u01/app/oracle/oradata/orcl/redo01.log'
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 474704 (在 10/09/2011 07:44:06 生成) 对于线程 1 是必需的
ORA-00289: 建议: /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_09/o1_mf_1_12_%u_.arc
ORA-00280: 更改 474704 (用于线程 1) 在序列 #12 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介质恢复已取消。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs;
数据库已更改。
SQL> conn u1/u1
已连接。
SQL> select * from t;
ID VALUE
---------- ----------
1 a