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/


然後開啟資料庫繼續使用,可以看見在備份的時候資料庫使用者u1的t表裡面就有一條記錄。接著在向t表裡插入資料,多切換幾次日誌,模擬資料庫使用了很久的樣子,讓redo log歸檔。

[sql] view plain copy print ?
  1. SQL> startup  
  2. ORACLE 例程已經啟動。  
  3.   
  4. Total System Global Area  167772160 bytes  
  5. Fixed Size                  1266392 bytes  
  6. Variable Size              62917928 bytes  
  7. Database Buffers          100663296 bytes  
  8. Redo Buffers                2924544 bytes  
  9. 資料庫裝載完畢。  
  10. 資料庫已經開啟。  
  11. SQL> conn u1/u1  
  12. 已連線。  
  13. SQL> select * from t;  
  14.   
  15.         ID VALUE  
  16. ---------- ----------  
  17.          1 a  
  18.   
  19. SQL> insert into t values(2,'b');  
  20.   
  21. 已建立 1 行。  
  22.   
  23. SQL> commit;  
  24.   
  25. 提交完成。  
  26.   
  27. SQL> select * from t;  
  28.   
  29.         ID VALUE  
  30. ---------- ----------  
  31.          1 a  
  32.          2 b  
  33.   
  34. SQL> conn /as sysdba  
  35. 已連線。  
  36. SQL> alter system switch logfile;  
  37.   
  38. 系統已更改。  
  39.   
  40. SQL> /  
  41.   
  42. 系統已更改。  
  43.   
  44. SQL> /  
  45.   
  46. 系統已更改。  
  47.   
  48. SQL> /  
  49.   
  50. 系統已更改。  
  51.   
  52. SQL> /  
  53.   
  54. 系統已更改。  
  55.   
  56. SQL> /  
  57.   
  58. 系統已更改。  
  59.   
  60. SQL> /  
  61.   
  62. 系統已更改。  
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> conn u1/u1
已連線。
SQL> select * from t;

        ID VALUE
---------- ----------
         1 a

SQL> insert into t values(2,'b');

已建立 1 行。

SQL> commit;

提交完成。

SQL> select * from t;

        ID VALUE
---------- ----------
         1 a
         2 b

SQL> conn /as sysdba
已連線。
SQL> alter system switch logfile;

系統已更改。

SQL> /

系統已更改。

SQL> /

系統已更改。

SQL> /

系統已更改。

SQL> /

系統已更改。

SQL> /

系統已更改。

SQL> /

系統已更改。


現在模擬資料庫還沒來得及再一次備份,資料檔案都丟失了。歸檔日誌也丟失了,所以資料庫只能不完全恢復。

[sql] view plain copy print ?
  1. SQL> conn /as sysdba  
  2. 已連線。  
  3. SQL> shutdown immediate  
  4. 資料庫已經關閉。  
  5. 已經解除安裝資料庫。  
  6. ORACLE 例程已經關閉。  
  7. SQL> ! rm -rf /u01/app/oracle/oradata/orcl/*.dbf  
  8.   
  9. 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/*.dbf

SQL> ! cp /u01/app/oracle/backup/*.dbf /u01/app/oracle/oradata/orcl/


基於取消的不完全恢復

[sql] view plain copy print ?
  1. SQL> startup  
  2. ORACLE 例程已經啟動。  
  3.   
  4. Total System Global Area  167772160 bytes  
  5. Fixed Size                  1266392 bytes  
  6. Variable Size              62917928 bytes  
  7. Database Buffers          100663296 bytes  
  8. Redo Buffers                2924544 bytes  
  9. 資料庫裝載完畢。  
  10. ORA-01113: 檔案 1 需要介質恢復  
  11. ORA-01110: 資料檔案 1: '/u01/app/oracle/oradata/orcl/system01.dbf'  
  12.   
  13. SQL> select * from v$recover_file;  
  14.   
  15.      FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME  
  16. ---------- ------- ------- ----------------------------------------------------------------- ---------- --------------  
  17.          1 ONLINE  ONLINE                                                                        500797 09-10月-11  
  18.          2 ONLINE  ONLINE                                                                        500797 09-10月-11  
  19.          3 ONLINE  ONLINE                                                                        500797 09-10月-11  
  20.          4 ONLINE  ONLINE                                                                        500797 09-10月-11  
  21.          5 ONLINE  ONLINE                                                                        500797 09-10月-11  
  22.          6 ONLINE  ONLINE                                                                        500797 09-10月-11  
  23.   
  24. 已選擇6行。  
  25. SQL> recover database until cancel;  
  26. ORA-00279: 更改 500797 (在 10/09/2011 06:24:47 生成) 對於執行緒 1 是必需的  
  27. ORA-00289: 建議: /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_09/o1_mf_1_2_%u_.arc  
  28. ORA-00280: 更改 500797 (用於執行緒 1) 在序列 #2 中  
  29.   
  30.   
  31. 指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}  
  32. cancel  
  33. 介質恢復已取消。  
  34. SQL> select * from v$recover_file;  
  35.   
  36.      FILE# ONLINE  ONLINE_ ERROR                                                                CHANGE# TIME  
  37. ---------- ------- ------- ----------------------------------------------------------------- ---------- --------------  
  38.          1 ONLINE  ONLINE                                                                        500797 09-10月-11  
  39.          2 ONLINE  ONLINE                                                                        500797 09-10月-11  
  40.          3 ONLINE  ONLINE                                                                        500797 09-10月-11  
  41.          4 ONLINE  ONLINE                                                                        500797 09-10月-11  
  42.          5 ONLINE  ONLINE                                                                        500797 09-10月-11  
  43.          6 ONLINE  ONLINE                                                                        500797 09-10月-11  
  44.   
  45. 已選擇6行。  
  46. SQL> alter database open;  
  47. alter database open  
  48. *  
  49. 第 1 行出現錯誤:  
  50. ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項  
  51.   
  52. SQL> alter database open resetlogs;  
  53.   
  54. 資料庫已更改。  
  55.   
  56. SQL> select status from v$instance;  
  57.   
  58. STATUS  
  59. ------------  
  60. OPEN  
  61.   
  62. SQL> conn u1/u1;  
  63. 已連線。  
  64. SQL> select * from t;  
  65.   
  66.         ID VALUE  
  67. ---------- ----------  
  68.          1 a