基于备份控制文件的恢复只要适用于以下情况:表空间被意外删除;所有控制文件全部损坏。
先关闭数据库,执行一次全库冷备份。
- SQL> conn /as sysdba
- 已连接。
- SQL> shutdown immediate
- 数据库已经关闭。
- 已经卸载数据库。
- ORACLE 例程已经关闭。
- SQL> ! cp /u01/app/oracle/oradata/orcl/* /u01/app/oracle/backup/
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;
- 表空间已删除。
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> 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