刚在vm的linux下把oracle中的三个ctl文件删除了,之前一直没有备份过,现在无法mount数据库,请问如何才能把ctl找回,创建可以么
ps:oracle中的数据是空的,新建的库

解决方案 »

  1.   


    wildwave 升星了呀, 散分庆祝下呀... 哈哈..三. 控制文件的重建:CREATE CONTROLFILE SET/reuse DATABASE SID RESETLOGS/NOresetlogs NOARCHIVELOG/archivelongORA-00205: error in identifying control file, check alert log for more info当三个控制文件都已损坏,又没有控制文件的备份,我们只能采取重建控制文件的做法。SQL> startup nomount
    ORACLE instance started.
    Total System Global Area  268435456 bytes
    Fixed Size                  1266968 bytes
    Variable Size              88083176 bytes
    Database Buffers          176160768 bytes
    Redo Buffers                2924544 bytesSQL> create controlfile reuse database woody noresetlogs archivelog
      2  LOGFILE
      3  GROUP 1 '/u01/app/oracle/oradata/woody/redo01.log',
      4  GROUP 2 '/u01/app/oracle/oradata/woody/redo02.log',
      5  GROUP 3 '/u01/app/oracle/oradata/woody/redo03.log'
      6  DATAFILE
      7  '/u01/app/oracle/oradata/woody/sysaux01.dbf',
      8  '/u01/app/oracle/oradata/woody/system01.dbf',
      9  '/u01/app/oracle/oradata/woody/UNDOTBS01.dbf'
    10  CHARACTER SET ZHS16GBK
    11  ;
    Control file created.
    成功地重建控制文件后,我们尝试着打开数据库,但系统报错,提示需要进行介质恢复。SQL> conn /as sysdba;
    Connected to an idle instance.
    SQL> startup
    ORACLE instance started.
    Total System Global Area  268435456 bytes
    Fixed Size                  1266968 bytes
    Variable Size              88083176 bytes
    Database Buffers          176160768 bytes
    Redo Buffers                2924544 bytes
    Database mounted.
    ORA-01113: file 1 needs media recovery
    ORA-01110: data file 1: '/u01/app/oracle/oradata/woody/system01.dbf'SQL> recover datafile '/u01/app/oracle/oradata/woody/system01.dbf';
    Media recovery complete.
    SQL> recover datafile '/u01/app/oracle/oradata/woody/UNDOTBS01.dbf';
    Media recovery complete.
    SQL> recover datafile '/u01/app/oracle/oradata/woody/sysaux01.dbf';
    Media recovery complete.介质恢复后,重新打开数据库,提示日志文件也需恢复。
    SQL> recover database until cancel;
    日志已恢复。
    控制文件、数据文件、日志文件全部恢复后,将三种文件同步,并打开数据库,成功地完成了数据库的恢复工作。
    SQL> alter database open resetlogs;
    数据库已更改。 在做了alter database open resetlogs;会把online redelog file清空,数据文件丢失.所以这个时候要做一个全备份。resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使用resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置联机重做日志内容.这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)。Oracle 控制文件
    http://user.qzone.qq.com/251097186/blog/1252557580
      

  2.   

    试过了,报了以下错误:
    create controlfile reuse database orcl noresetlogs archivelog
    *
    ERROR at line 1:
    ORA-01503: CREATE CONTROLFILE failed
    ORA-01163: SIZE clause indicates 640 (blocks), but should match header 5120
    ORA-01110: data file 2: '/u01/app/oracle/oradata/orcl/undotbs01.dbf'
      

  3.   

    我又在这里发了一个贴,关于ORA-01245的,现在被这个问题卡住一下午了,希望高手帮忙看看。
      

  4.   


    这里的情况很复杂,不是说不可能恢复,不过是需要很多的临场的经验一步步的排查,才有可能找到问题,解决问题,所以作为新手在这方面处理还有些过早,如果是学习的话,可以先跳过这样的错误。至于这里的问题是个工作原则的问题,平时要多做备份,而且对于删除重要文件这样的操作前要先备份。作为dba就是要知道一个enter可能对我们造成的打击。
      

  5.   

    ctl全部都丢失了,怎么恢复,真有点麻烦.
    这是我做过的一个恢复过程,首先是利用老的控制文件alter database backup controlfile to trace;
    利用生成的trace 文件编辑sql脚本恢复的过程:
    LZ 可以参考下
     1>创建pfile,制定我欲恢复的控制文件的位置
    [oracle@yysf dbs]$ vi initorcl.oraorcl.__db_cache_size=79691776
    orcl.__java_pool_size=4194304
    orcl.__large_pool_size=4194304
    orcl.__shared_pool_size=109051904
    orcl.__streams_pool_size=0
    *.audit_file_dest='/oracle/admin/orcl/adump'
    *.audit_trail='NONE'
    *.background_dump_dest='/oracle/admin/orcl/bdump'
    *.compatible='10.2.0.1.0'
    *.control_files='/home/oracle/recover.ctl'
    *.core_dump_dest='/oracle/admin/orcl/cdump'
    *.db_block_size=8192
    *.db_cache_size=79691776
    *.db_create_file_dest='/oracle/oradata'
    *.db_domain=''
    *.db_file_multiblock_read_count=16
    *.db_name='orcl'
    *.db_recovery_file_dest='/oracle/flash_recovery_area'
    *.db_recovery_file_dest_size=2147483648
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
    *.java_pool_size=4194304
    *.job_queue_processes=10
    *.large_pool_size=4194304
    *.log_archive_format='%t_%s_%r.dbf'
    *.open_cursors=300
    *.pga_aggregate_target=66060288
    *.processes=150
    *.remote_login_passwordfile='exclusive'
    *.sga_target=201326592
    *.shared_pool_size=109051904
    *.streams_pool_size=0
    *.undo_management='AUTO'
    *.undo_tablespace='UNDOTBS1'
    *.user_dump_dest='/oracle/admin/orcl/udump'
    ~
    2.察看trc 文件,把建立控制文件的那一部分拷贝出来:
    STARTUP NOMOUNT
    CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES 100
        MAXINSTANCES 8
        MAXLOGHISTORY 292
    LOGFILE
      GROUP 1 (
        '/oracle/oradata/ORCL/onlinelog/o1_mf_1_5bbblfr4_.log',
        '/oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_1_5bbblgwf_.log',
        '/home/oracle/damao.dbf'
      ) SIZE 50M,
      GROUP 2 (
        '/oracle/oradata/ORCL/onlinelog/o1_mf_2_5bbbljjw_.log',
        '/oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_2_5bbblkdc_.log'
      ) SIZE 50M,
      GROUP 3 (
        '/oracle/oradata/ORCL/onlinelog/o1_mf_3_5bbbllln_.log',
        '/oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_5bbblmq0_.log'
      ) SIZE 50M
    -- STANDBY LOGFILE
    DATAFILE
      '/oracle/oradata/ORCL/datafile/o1_mf_system_5bbbjkn1_.dbf',
      '/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_5bbbjkv1_.dbf',
      '/oracle/oradata/ORCL/datafile/o1_mf_sysaux_5bbbjko0_.dbf',
      '/oracle/oradata/ORCL/datafile/o1_mf_users_5bbbjkw8_.dbf',
      '/oracle/oradata/ORCL/datafile/o1_mf_example_5bbbmdyq_.dbf'
    CHARACTER SET AL32UTF8
    ;做成文件 recover.sql
    [oracle@yysf ~]$ sqlplus / as sysdbaSQL*Plus: Release 10.2.0.1.0 - Production on Sun Sep 13 21:47:46 2009Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining optionsSQL> shutdown abort;
    ORACLE instance shut down.
    ---用建立的pfile把数据库置于 nomount状态,---------
    SQL> startup nomount pfile='/oracle/product/10.2.0/db_1/dbs/initorcl.ora';
    ORACLE instance started.Total System Global Area  201326592 bytes
    Fixed Size                  1218508 bytes
    Variable Size             117442612 bytes
    Database Buffers           79691776 bytes
    Redo Buffers                2973696 bytes----用建立的sql脚本重建控制文件---------
    SQL> @/home/oracle/control.sql
    ORA-01081: cannot start already-running ORACLE - shut it down firstControl file created.恢复数据库,并已resetlogs 方式打开数据库。
    [oracle@yysf ~]$ sqlplus / as sysdbaSQL*Plus: Release 10.2.0.1.0 - Production on Sun Sep 13 21:50:31 2009Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining optionsSQL> select status from v$instance;STATUS
    ------------
    MOUNTED
    SQL> recover database using backup controlfile;
    ORA-00279: change 813732 generated at 09/13/2009 21:21:13 needed for thread 1
    ORA-00289: suggestion :
    /oracle/flash_recovery_area/ORCL/archivelog/2009_09_13/o1_mf_1_26_%u_.arc
    ORA-00280: change 813732 for thread 1 is in sequence #26
    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    /oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_2_5bbblkdc_.log
    Log applied.
    Media recovery complete
    SQL> alter database open resetlogs;Database altered.
      

  6.   


    多谢朋友的回复,请问alter database backup controlfile to trace;这句执行后会在onlinelog或udump中生成trace文件么,没有找到
      

  7.   

    1>编辑pfile initorcl.ora
    orcl.__db_cache_size=79691776 
    orcl.__java_pool_size=4194304 
    orcl.__large_pool_size=4194304 
    orcl.__shared_pool_size=109051904 
    orcl.__streams_pool_size=0 
    *.audit_file_dest='/oracle/admin/orcl/adump' 
    *.audit_trail='NONE' 
    *.background_dump_dest='/oracle/admin/orcl/bdump' 
    *.compatible='10.2.0.1.0' 
    *.control_files='/home/oracle/old.ctl' 
    *.core_dump_dest='/oracle/admin/orcl/cdump' 
    *.db_block_size=8192 
    *.db_cache_size=79691776 
    *.db_create_file_dest='/oracle/oradata' 
    *.db_domain='' 
    *.db_file_multiblock_read_count=16 
    *.db_name='orcl' 
    *.db_recovery_file_dest='/oracle/flash_recovery_area' 
    *.db_recovery_file_dest_size=2147483648 
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)' 
    *.java_pool_size=4194304 
    *.job_queue_processes=10 
    *.large_pool_size=4194304 
    *.log_archive_format='%t_%s_%r.dbf' 
    *.open_cursors=300 
    *.pga_aggregate_target=66060288 
    *.processes=150 
    *.remote_login_passwordfile='exclusive' 
    *.sga_target=201326592 
    *.shared_pool_size=109051904 
    *.streams_pool_size=0 
    *.undo_management='AUTO' 
    *.undo_tablespace='UNDOTBS1' 
    *.user_dump_dest='/oracle/admin/orcl/udump' 
     
    2>利用老的控制文件把数据库置于mount状态,
    SQL> startup nomount pfile='initorcl.ora';SQL> select status from v$instance; STATUS 
    ------------ 
    MOUNTED 3>产生数据库脚本 trace文件,
    SQL>alter database backup controlfile to trace;
    需要数据库在挂载的情况下,
    生成一个trc文件导出到 udump文件夹中去,
    这个trc大小是7K左右.
      

  8.   


    一般这样的情况,能够进行恢复的话, 需要以下条件 
    1. 上次冷备份一份 
    2. 从上次冷备份以来的所以归档文件,如果是归档文件中间有中断的,只能恢复好中断前的 
    3. 有完整而正确的redo文件 
    4. 数据库必须是正常关闭的,如果是abort关闭,必须保证是clear的数据库 
    5. 故障的数据库故障后,没有进行任何非正确的恢复手段。 
    只有是以上这样的前提,才能进行正确的恢复,否则就是靠经验来进行排查,用一些方法来诊断和恢复了。所以,你这里没有备份的话,已经是基本上断了正常恢复的所有的路了。 
      

  9.   

    所以备份对于恢复的重要性,通过这里你应该很有体验了。先学习基本的备份,和恢复的一些原理性的知识,对于你现在来说是更有意义的,你可以先看看这个文章,
    http://bbs.inthirties.com/thread-83-1-1.htmloracle恢复流程.doc
      

  10.   

    没用过oracle,但是将来肯定会用到。收藏
      

  11.   

    所以备份对于恢复的重要性,通过这里你应该很有体验了。 先学习基本的备份,和恢复的一些原理性的知识,对于你现在来说是更有意义的, 你可以先看看这个文章, 
    http://bbs.inthirties.com/thread-83-1-1.html oracle恢复流程.doc
      

  12.   

    inthirties 你的博客,今天怎么访问不了了??