欢迎光临
我们一直在努力

Oracle 11g重建控制文件——控制文件全部丢失,从零开始


控制文件(control file)是一个相当小的文件(最多能增长到64M左右),其中包含Oracle需要的其他文件的一个目录。参数文件告知实例控制文件的位置,控制文件则告知示例数据库和在线重做日志文件的位置。控制文件还告知了Oracle其他一些事情,如已发生检查点的有关信息、数据库名(必须和db_name参数匹配)、创建数据库的时间戳、归档重做日志的历史(有时这会让控制文件变大)、RMAN信息等。



     控制文件应该通过硬件(RAID)多路保存,如果不支持镜像,则要通过Oracle多路保存。应该有不止一个副本,而且它们应该保存在不同的磁盘上,以防止万一出现磁盘故障而丢失控制文件。丢失控制文件并不是致命的,但是会使恢复变得困难很多。



     如果丢失了所有的控制文件并且没有任何的备份,我们可以通过重建控制文件来打开数据库。其中,重建控制文件至少需要以下信息:



     1.数据库名



     2.字符集



     3.数据文件名称



    4.初始化参数,包括MAXLOGFILES、MAXLOGMEMBERS、MAXDATAFILES、MAXINSTANCES、MAXLOGHISTORY等; 

1.环境准备

数据库版本


我们在Oracle11g中进行测试。

点击(

此处

)折叠或打开


  1. SQL

    >

     

  2. SQL

    >

     

    select

     

    *

     

    from

     v$version

    ;

  3. BANNER


  4. ——————————————————————————–

  5. Oracle 

    Database

     11g Enterprise Edition 

    Release

     11

    .

    2

    .


    .

    3

    .





     Production

  6. PL

    /

    SQL 

    Release

     11

    .

    2

    .


    .

    3

    .





     Production

  7. CORE 11

    .

    2

    .


    .

    3

    .

    0 Production

  8. TNS 

    for

     Linux

    :

     Version 11

    .

    2

    .


    .

    3

    .





     Production

  9. NLSRTL Version 11

    .

    2

    .


    .

    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

    =

  9. HOEGH

    .

    __shared_pool_size

    =

    130023424

  10. HOEGH

    .

    __streams_pool_size

    =


  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

    .


    .

    3

    .





     Production

  22. PL

    /

    SQL 

    Release

     11

    .

    2

    .


    .

    3

    .





     Production

  23. CORE 11

    .

    2

    .


    .

    3

    .

    0 Production

  24. TNS 

    for

     Linux

    :

     Version 11

    .

    2

    .


    .

    3

    .





     Production

  25. NLSRTL Version 11

    .

    2

    .


    .

    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 —


      

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30162081/viewspace-1677995/,如需转载,请注明出处,否则将追究法律责任。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。