Oracle 11g重建控制文件——控制文件所有丟失,從零開始

粘貼出處:http://blog.csdn.net/xiaobluesky/article/details/49718757 寫的很好,解決個人需求css

控制文件(control file)是一個至關小的文件(最多能增加到64M左右),其中包含Oracle須要的其餘文件的一個目錄。參數文件告知實例控制文件的位置,控制文件則告知示例數據庫和在線重作日誌文件的位置。控制文件還告知了Oracle其餘一些事情,如已發生檢查點的有關信息、數據庫名(必須和db_name參數匹配)、建立數據庫的時間戳、歸檔重作日誌的歷史(有時這會讓控制文件變大)、RMAN信息等。
     控制文件應該經過硬件(RAID)多路保存,若是不支持鏡像,則要經過Oracle多路保存。應該有不止一個副本,並且它們應該保存在不一樣的磁盤上,以防止萬一出現磁盤故障而丟失控制文件。丟失控制文件並非致命的,可是會使恢復變得困難不少。
     若是丟失了全部的控制文件而且沒有任何的備份,咱們能夠經過重建控制文件來打開數據庫。其中,重建控制文件至少須要如下信息:
     1.數據庫名
     2.字符集
     3.數據文件名稱
    4.初始化參數,包括MAXLOGFILES、MAXLOGMEMBERS、MAXDATAFILES、MAXINSTANCES、MAXLOGHISTORY等; 

java

1.環境準備

數據庫版本

咱們在Oracle11g中進行測試。

sql

點擊(此處)摺疊或打開數據庫

  1. SQL> 
    oracle

  2. SQL> select * from v$version;
    app


  3. BANNER
    dom

  4. --------------------------------------------------------------------------------
    ide

  5. Oracle Database 11g Enterprise Edition Release 11.2.0.3.- Production
    測試

  6. PL/SQL Release 11.2.0.3.- Production
    spa

  7. CORE 11.2.0.3.0 Production

  8. TNS for Linux: Version 11.2.0.3.- Production

  9. NLSRTL Version 11.2.0.3.- Production


  10. SQL>


刪除控制文件

1.經過查詢control_files初始化參數,獲取控制文件路徑;

點擊(此處)摺疊或打開

  1. SQL> 

  2. SQL> show parameter control_files


  3. NAME TYPE VALUE

  4. ------------------------------------ ----------- ------------------------------

  5. control_files string                             /u01/app/oracle/oradata/HOEGH/

  6.                                                  control01.ctl, /u01/app/oracle

  7.                                                  /oradata/HOEGH/control02.ctl

  8. SQL>


2.而後,使用rm命令刪除控制文件;

點擊(此處)摺疊或打開

  1. [oracle@HOEGH ~]$ rm /u01/app/oracle/oradata/HOEGH/control01.ctl

  2. [oracle@HOEGH ~]$ rm /u01/app/oracle/oradata/HOEGH/control02.ctl

  3. [oracle@HOEGH ~]$

3.此時,強制關閉數據庫,而後重啓數據庫,報ORA-00205錯誤。須要注意的是,此時執行shutdown immediate命令,數據庫沒法正常關閉,只能關閉到mounted狀態;須要使用shutdown abort命令強制關閉數據庫。

點擊(此處)摺疊或打開

  1. SQL> 

  2. SQL> shutdown immediate

  3. Database closed.

  4. ORA-00210: cannot open the specified control file

  5. ORA-00202: control file: \'/u01/app/oracle/oradata/HOEGH/control01.ctl\'

  6. ORA-27041: unable to open file

  7. Linux Error: 2: No such file or directory

  8. Additional information: 3



  9. SQL> select status from v$instance;


  10. STATUS

  11. ------------

  12. MOUNTED


  13. SQL> 

  14. SQL> shutdown abort

  15. ORACLE instance shut down.

  16. SQL>




  17. SQL> 

  18. SQL> startup

  19. ORACLE instance started.


  20. Total System Global Area 941600768 bytes

  21. Fixed Size 1348860 bytes

  22. Variable Size 515902212 bytes

  23. Database Buffers 419430400 bytes

  24. Redo Buffers 4919296 bytes

  25. ORA-00205: error in identifying control file, check alert log for more info



  26. SQL>


2.獲取數據庫名

首先生成文本格式的參數文件;

點擊(此處)摺疊或打開

  1. SQL> 

  2. SQL> create pfile from spfile;


  3. File created.


  4. SQL>

打開參數文件,查看db_name參數值,即爲數據庫名稱。

點擊(此處)摺疊或打開

  1. [oracle@hoegh dbs]$ cat initHOEGH.ora 

  2. HOEGH.__db_cache_size=419430400

  3. HOEGH.__java_pool_size=4194304

  4. HOEGH.__large_pool_size=4194304

  5. HOEGH.__oracle_base=\'/u01/app/oracle\'#ORACLE_BASE set from environment

  6. HOEGH.__pga_aggregate_target=377487360

  7. HOEGH.__sga_target=566231040

  8. HOEGH.__shared_io_pool_size=0

  9. HOEGH.__shared_pool_size=130023424

  10. HOEGH.__streams_pool_size=0

  11. *.audit_file_dest=\'/u01/app/oracle/admin/HOEGH/adump\'

  12. *.audit_trail=\'db\'

  13. *.compatible=\'11.2.0.0.0\'

  14. *.control_files=\'/u01/app/oracle/oradata/HOEGH/control01.ctl\',\'/u01/app/oracle/oradata/HOEGH/control02.ctl\'

  15. *.db_block_size=8192

  16. *.db_domain=\'\'

  17. *.db_name=\'HOEGH\'

  18. *.diagnostic_dest=\'/u01/app/oracle\'

  19. *.dispatchers=\'(PROTOCOL=TCP) (SERVICE=HOEGHXDB)\'

  20. *.memory_max_target=943718400

  21. *.memory_target=943718400

  22. *.open_cursors=300

  23. *.processes=150

  24. *.remote_login_passwordfile=\'EXCLUSIVE\'

  25. *.undo_tablespace=\'UNDOTBS1\'

  26. [oracle@hoegh dbs]$


3.啓動到nomount狀態,獲取字符集

因爲須要執行查詢語句select userenv('language') from dual;來獲取字符集,所以須要將數據庫啓動到nomount狀態。

點擊(此處)摺疊或打開

  1. SQL> 

  2. SQL> startup nomount

  3. ORACLE instance started.


  4. Total System Global Area 941600768 bytes

  5. Fixed Size 1348860 bytes

  6. Variable Size 515902212 bytes

  7. Database Buffers 419430400 bytes

  8. Redo Buffers 4919296 bytes

  9. SQL> 

  10. SQL> select userenv(\'language\') from dual;


  11. USERENV(\'LANGUAGE\')

  12. ----------------------------------------------------

  13. AMERICAN_AMERICA.US7ASCII


  14. SQL> 

  15. SQL>

4.獲取數據文件名稱

經過ls命令獲取數據文件列表。

點擊(此處)摺疊或打開

  1. [oracle@hoegh HOEGH]$ ls -lh

  2. total 1.8G

  3. -rw-r----- 1 oracle oinstall 314M May 30 11:07 example01.dbf

  4. -rw-r----- 1 oracle oinstall 51M May 30 11:07 redo01.log

  5. -rw-r----- 1 oracle oinstall 51M May 30 11:07 redo02.log

  6. -rw-r----- 1 oracle oinstall 51M May 30 11:07 redo03.log

  7. -rw-r----- 1 oracle oinstall 541M May 30 11:07 sysaux01.dbf

  8. -rw-r----- 1 oracle oinstall 721M May 30 11:07 system01.dbf

  9. -rw-r----- 1 oracle oinstall 30M Oct 13 2014 temp01.dbf

  10. -rw-r----- 1 oracle oinstall 96M May 30 11:07 undotbs01.dbf

  11. -rw-r----- 1 oracle oinstall 5.1M May 30 11:07 users01.dbf

  12. [oracle@hoegh HOEGH]$

5.生成建立控制文件腳本

這樣,建立控制文件所需的基本信息都已經有了,咱們來生成建立控制文件腳本。

點擊(此處)摺疊或打開

  1. STARTUP NOMOUNT

  2. CREATE CONTROLFILE REUSE DATABASE \"HOEGH\" NORESETLOGS ARCHIVELOG

  3.     MAXLOGFILES 5

  4.     MAXLOGMEMBERS 3

  5.     MAXDATAFILES 100

  6.     MAXINSTANCES 1

  7.     MAXLOGHISTORY 226

  8. LOGFILE

  9.   GROUP 1 \'/u01/app/oracle/oradata/HOEGH/redo01.log\' SIZE 50M,

  10.   GROUP 2 \'/u01/app/oracle/oradata/HOEGH/redo02.log\' SIZE 50M,

  11.   GROUP 3 \'/u01/app/oracle/oradata/HOEGH/redo03.log\' SIZE 50M

  12. DATAFILE

  13.   \'/u01/app/oracle/oradata/HOEGH/system01.dbf\',

  14.   \'/u01/app/oracle/oradata/HOEGH/sysaux01.dbf\',

  15.   \'/u01/app/oracle/oradata/HOEGH/undotbs01.dbf\',

  16.   \'/u01/app/oracle/oradata/HOEGH/users01.dbf\',

  17.   \'/u01/app/oracle/oradata/HOEGH/example01.dbf\',

  18.   \'/u01/app/oracle/oradata/HOEGH/temp01.dbf\'

  19. CHARACTER SET US7ASCII

  20. ;

6.重建控制文件

須要注意的是,在執行上述建立腳本時會報錯,系統提示臨時文件不屬於數據文件,以下所示:

點擊(此處)摺疊或打開

  1. SQL> @/u01/app/oracle/oradata/HOEGH/CreateControlFile.sql

  2. ORA-01081: cannot start already-running ORACLE - shut it down first

  3. CREATE CONTROLFILE REUSE DATABASE \"HOEGH\" NORESETLOGS ARCHIVELOG

  4. *

  5. ERROR at line 1:

  6. ORA-01503: CREATE CONTROLFILE failed

  7. ORA-01160: file is not a data file

  8. ORA-01110: data file : \'/u01/app/oracle/oradata/HOEGH/temp01.dbf\'



  9. SQL>


修改腳本並從新執行,重建控制文件後,數據庫會打開到mount狀態。

點擊(此處)摺疊或打開

  1. SQL> 

  2. SQL> @/u01/app/oracle/oradata/HOEGH/CreateControlFile.sql

  3. ORACLE instance started.


  4. Total System Global Area 941600768 bytes

  5. Fixed Size 1348860 bytes

  6. Variable Size 515902212 bytes

  7. Database Buffers 419430400 bytes

  8. Redo Buffers 4919296 bytes


  9. Control file created.


  10. SQL> 

  11. SQL> select status from v$instance;


  12. STATUS

  13. ------------

  14. MOUNTED


  15. SQL>


7.打開數據庫

在打開數據庫時,會報錯,提示system01數據文件須要執行介質恢復,咱們執行recover database便可。

點擊(此處)摺疊或打開

  1. SQL> 

  2. SQL> alater database open;

  3. SP2-0734: unknown command beginning \"alater dat...\" - rest of line ignored.

  4. SQL> 

  5. SQL> alter database open;

  6. alter database open

  7. *

  8. ERROR at line 1:

  9. ORA-01113: file 1 needs media recovery

  10. ORA-01110: data file 1: \'/u01/app/oracle/oradata/HOEGH/system01.dbf\'



  11. SQL> 

  12. SQL> recover database;

  13. Media recovery complete.

  14. SQL> 

  15. SQL> alter database open;


  16. Database altered.


  17. SQL> 

  18. SQL> select * from v$version;


  19. BANNER

  20. --------------------------------------------------------------------------------

  21. Oracle Database 11g Enterprise Edition Release 11.2.0.3.- Production

  22. PL/SQL Release 11.2.0.3.- Production

  23. CORE 11.2.0.3.0 Production

  24. TNS for Linux: Version 11.2.0.3.- Production

  25. NLSRTL Version 11.2.0.3.- Production


  26. SQL>

  27. SQL> select tablespace_name from dba_tablespaces;


    TABLESPACE_NAME
    ------------------------------
    SYSTEM
    SYSAUX
    UNDOTBS1
    TEMP
    USERS
    EXAMPLE


    6 rows selected.


    SQL> 


8.總結

下面總結一下重建控制文件的步驟:
1.獲取數據庫名;
2.獲取字符集名;
3.獲取數據文件名;
4.重建控制文件;
5.執行介質恢復;
6.打開數據庫。

hoegh

15.05.30

-- The End --


粘貼出處:http://blog.csdn.net/xiaobluesky/article/details/49718757

相關文章
相關標籤/搜索