1. 程式人生 > >ARCHIVELOG模式下使用者管理的不完全恢復—基於備份控制檔案的不完全恢復

ARCHIVELOG模式下使用者管理的不完全恢復—基於備份控制檔案的不完全恢復

基於備份控制檔案的恢復只要適用於以下情況:表空間被意外刪除;所有控制檔案全部損壞。

 

先關閉資料庫,執行一次全庫冷備份。

[sql] view plain copy print ?
  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這個表空間

[sql] view plain copy print ?
  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表空間了,以前備份的控制檔案還包含。所以必須使用以前的控制檔案來恢復。

[sql] view plain copy print ?
  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/


使用控制檔案恢復

[sql] view plain copy print ?
  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