1. 程式人生 > >ARCHIVELOG模式下使用者管理恢復控制檔案—使用二進位制控制檔案恢復

ARCHIVELOG模式下使用者管理恢復控制檔案—使用二進位制控制檔案恢復

在生產資料庫中,控制檔案一般多路複用的。每個控制檔案的內容是一模一樣的,只要其中有一個沒有丟失,那麼就可以複製一下,改一下名字就可以用了。

 

首先在資料庫中備份執行一個二進位制的控制檔案,也可以使用作業系統的命令直接複製控制檔案來備份。

[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.   
  12. SQL> create tablespace tb1 datafile '/u01/app/oracle/oradata/orcl/tb1.dbf' size 10m;   
  13.   
  14. 表空間已建立。  
  15.   
  16. SQL> create user u1 identified by u1 default tablespace tb1;  
  17.   
  18. 使用者已建立。  
  19.   
  20. SQL> grant connect,resource to u1;  
  21.   
  22. 授權成功。  
  23.   
  24. SQL> conn u1/u1  
  25. 已連線。  
  26.   
  27. SQL> create table t (id int,value varchar2(10));  
  28.   
  29. 表已建立。  
  30.   
  31. SQL> insert into t values(1,'a');  
  32.   
  33. 已建立 1 行。  
  34.   
  35. SQL> commit;  
  36.   
  37. 提交完成。  
  38.   
  39. SQL> select * from t;  
  40.   
  41.         ID VALUE  
  42. ---------- ----------  
  43.          1 a  
  44.   
  45. SQL> conn /as sysdba  
  46. 已連線。  
  47. SQL> alter system checkpoint;  
  48.   
  49. 系統已更改。  
  50.   
  51. SQL> alter system archive log current;  
  52.   
  53. 系統已更改。  
  54.   
  55. SQL> alter system switch logfile;  
  56.   
  57. 系統已更改。  
  58.   
  59. SQL> /  
  60.   
  61. 系統已更改。  
  62.   
  63. SQL> /  
  64.   
  65. 系統已更改。  
  66.   
  67. SQL> /  
  68.   
  69. 系統已更改。  
  70. SQL> alter database backup controlfile to '/u01/app/oracle/controlfile/control.ctl';  
  71.   
  72. 資料庫已更改。  
  73.   
  74. SQL> shutdown immediate  
  75. 資料庫已經關閉。  
  76. 已經解除安裝資料庫。  
  77. ORACLE 例程已經關閉。  
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> create tablespace tb1 datafile '/u01/app/oracle/oradata/orcl/tb1.dbf' size 10m; 

表空間已建立。

SQL> create user u1 identified by u1 default tablespace tb1;

使用者已建立。

SQL> grant connect,resource to u1;

授權成功。

SQL> conn u1/u1
已連線。

SQL> create table t (id int,value varchar2(10));

表已建立。

SQL> insert into t values(1,'a');

已建立 1 行。

SQL> commit;

提交完成。

SQL> select * from t;

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

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

系統已更改。

SQL> alter system archive log current;

系統已更改。

SQL> alter system switch logfile;

系統已更改。

SQL> /

系統已更改。

SQL> /

系統已更改。

SQL> /

系統已更改。
SQL> alter database backup controlfile to '/u01/app/oracle/controlfile/control.ctl';

資料庫已更改。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。


現在關閉資料庫後,所有的控制檔案丟失了,然後把備份的控制檔案複製過去,該一下名字。

[sql] view plain copy print ?
  1. [[email protected] orcl]$ rm -rf control0*  
  2. [[email protected] orcl]$ cp /u01/app/oracle/controlfile/control.ctl .  
  3. [[email protected] orcl]$ mv control.ctl control01.ctl   
  4. [[email protected] orcl]$ cp control01.ctl control02.ctl   
  5. [[email protected] orcl]$ cp control01.ctl control03.ctl   
[[email protected] orcl]$ rm -rf control0*
[[email protected] orcl]$ cp /u01/app/oracle/controlfile/control.ctl .
[[email protected] orcl]$ mv control.ctl control01.ctl 
[[email protected] orcl]$ cp control01.ctl control02.ctl 
[[email protected] orcl]$ cp control01.ctl control03.ctl 


下面記錄恢復操作

[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-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項  
  11.   
  12. SQL> select status from v$instance;  
  13.   
  14. STATUS  
  15. ------------  
  16. MOUNTED  
  17.   
  18. SQL> select * from v$log;  
  19.   
  20.     GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME  
  21. ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------  
  22.          1          1         13   52428800          1 YES INACTIVE                474583 10-10月-11  
  23.          3          1         12   52428800          1 YES INACTIVE                474581 10-10月-11  
  24.          2          1         14   52428800          1 NO  CURRENT                 474585 10-10月-11  
  25.   
  26. SQL> select member from v$logfile;  
  27.   
  28. MEMBER  
  29. --------------------------------------------------------------------------------  
  30. /u01/app/oracle/oradata/orcl/redo03.log  
  31. /u01/app/oracle/oradata/orcl/redo02.log  
  32. /u01/app/oracle/oradata/orcl/redo01.log  
  33.   
  34. SQL> recover database using backup controlfile;  
  35. ORA-00279: 更改 474585 (在 10/10/2011 01:15:57 生成) 對於執行緒 1 是必需的  
  36. ORA-00289: 建議: /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_10/o1_mf_1_14_%u_.arc  
  37. ORA-00280: 更改 474585 (用於執行緒 1) 在序列 #14 中  
  38.   
  39.   
  40. 指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}  
  41. /u01/app/oracle/oradata/orcl/redo02.log  
  42. 已應用的日誌。  
  43. 完成介質恢復。  
  44.   
  45. SQL> alter database open resetlogs;  
  46.   
  47. 資料庫已更改。  
  48.   
  49. SQL> select status from v$instance;  
  50.   
  51. STATUS  
  52. ------------  
  53. OPEN  
  54.   
  55. SQL> conn u1/u1  
  56. 已連線。  
  57. SQL> select * from t;  
  58.   
  59.         ID VALUE  
  60. ---------- ----------  
  61.          1 a