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

相关文章
相关标签/搜索