ARCHIVELOG模式下用户管理的不完全恢复—基于备份控制文件的不完全恢复

基于备份控制文件的恢复只要适用于以下情况:表空间被意外删除;所有控制文件全部损坏。

先关闭数据库,执行一次全库冷备份。

  1. SQL> conn /as sysdba    
  2. 已连接。    
  3. SQL> shutdown immediate    
  4. 数据库已经关闭。    
  5. 已经卸载数据库。    
  6. ORACLE 例程已经关闭。    
  7. 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这个表空间

  1. SQL> conn /as sysdba  
  2. 已连接到空闲例程。  
  3. SQL> startup  
  4. ORACLE 例程已经启动。  
  5.   
  6. Total System Global Area  167772160 bytes  
  7. Fixed Size                  1266392 bytes  
  8. Variable Size              62917928 bytes  
  9. Database Buffers          100663296 bytes  
  10. Redo Buffers                2924544 bytes  
  11. 数据库装载完毕。  
  12. 数据库已经打开。  
  13.   
  14. SQL> drop tablespace tb1 including contents;  
  15.   
  16. 表空间已删除。  
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表空间了,以前备份的控制文件还包含。所以必须使用以前的控制文件来恢复。

  1. SQL> conn /as sysdba  
  2. 已连接。  
  3. SQL> shutdown immediate  
  4. 数据库已经关闭。  
  5. 已经卸载数据库。  
  6. ORACLE 例程已经关闭。  
  7.   
  8. SQL> ! rm -rf /u01/app/oracle/oradata/orcl/*.ctl  
  9.   
  10. SQL> ! rm -rf /u01/app/oracle/oradata/orcl/*.dbf  
  11.   
  12. SQL> ! cp /u01/app/oracle/backup/*.ctl /u01/app/oracle/oradata/orcl/  
  13.   
  14. 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/


使用控制文件恢复

  1. SQL> conn /as sysdba  
  2. 已连接到空闲例程。  
  3. SQL> startup  
  4. ORACLE 例程已经启动。  
  5.   
  6. Total System Global Area  167772160 bytes  
  7. Fixed Size                  1266392 bytes  
  8. Variable Size              62917928 bytes  
  9. Database Buffers          100663296 bytes  
  10. Redo Buffers                2924544 bytes  
  11. 数据库装载完毕。  
  12. ORA-00314: 日志 1 (用于线程 1) 要求的 sequence#  与  不匹配  
  13. ORA-00312: 联机日志 1 线程 1: '/u01/app/oracle/oradata/orcl/redo01.log'  
  14.   
  15.   
  16. SQL> select status from v$instance;  
  17.   
  18. STATUS  
  19. ------------  
  20. MOUNTED  
  21.   
  22. SQL> recover database using backup controlfile until cancel;  
  23. ORA-00279: 更改 474704 (在 10/09/2011 07:44:06 生成) 对于线程 1 是必需的  
  24. ORA-00289: 建议: /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_09/o1_mf_1_12_%u_.arc  
  25. ORA-00280: 更改 474704 (用于线程 1) 在序列 #12 中  
  26.   
  27.   
  28. 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}  
  29. cancel  
  30. 介质恢复已取消。  
  31. SQL> alter database open;  
  32. alter database open  
  33. *  
  34. 第 1 行出现错误:  
  35. ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项  
  36.   
  37.   
  38. SQL> alter database open resetlogs;  
  39.   
  40. 数据库已更改。  
  41.   
  42. SQL> conn u1/u1  
  43. 已连接。  
  44. SQL> select * from t;  
  45.   
  46.         ID VALUE  
  47. ---------- ----------  
  48.          1 a

猜你喜欢

转载自blog.csdn.net/lufei051/article/details/40681423