基于备份控制文件的恢复只要适用于以下情况:表空间被意外删除;所有控制文件全部损坏。
先关闭数据库,执行一次全库冷备份。
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