zoukankan      html  css  js  c++  java
  • (转载)数据库出现ORA-00283/ORA-01610的问题

    在这里需要感谢棉花糖给予无私帮助,真的谢谢他!
    http://blog.itpub.net/67668/viewspace-353270/
    处理过程可以参照http://www.itpub.net/viewthread.php?tid=1010027&extra=&page=1

    下面我把问题的处理做一个小的总结,希望有所帮助
    问题主要是:resetlogs/noresetlogs与控制文件方面的(参照eygle的书)
    第一:
    要弄清楚resetlogs与noresetlogs的区别
    norestlogs,控制文件的scn是来自当前日志的high scn,而resetlogs控制文件的scn是来自数据文件。
    我在这里开始没有弄明白,我以noresetlogs进行恢复没有问题,后来请教了棉花糖才知道为什么noresetlogs可以成功,而resetlogs没有成功。

    第二:
    如何时取得创建控制文件的脚本,方法如下:
    sql>alter database backup to trace;
    然后通过查询跟踪文件的脚本可以查询到相关的详细信息
    SQL> SELECT a.VALUE||b.symbol||c.instance_name||'_ora_'||d.spid||'.trc' TRACE_FILE_NAME
      2  FROM (SELECT VALUE FROM v$parameter WHERE NAME='user_dump_dest') a,
      3       (SELECT SUBSTR(VALUE,-6,1) symbol FROM v$parameter WHERE NAME='user_dump_dest') b,
      4       (SELECT instance_name FROM v$instance) c,
      5       (SELECT spid FROM v$session s,v$process p,v$mystat m
      6        WHERE s.paddr=p.addr AND s.SID=m.SID AND m.statistic#=0) d
      7  /

    TRACE_FILE_NAME
    ---------------------------------------------------------------------------------------------
    E:ORACLEPRODUCT10.2.0ADMINORCLUDUMPorcl_ora_5724.trc
    在这orcl_ora_5724.trc脚本中可以找到创建控制文件的两种方式noresetlogs/resetlogs.

    第三:模拟出错的过程
    shutdown abort来进行关闭据库。
    第四:利用noresetlogs来进行控件文件以及数据库的恢复
    1.启动到数据库为nomount状态
    sql>startup nomount;
    2.开始创建控制文件
    CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES 100
        MAXINSTANCES 8
        MAXLOGHISTORY 292
    LOGFILE
      GROUP 1 'E:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG'  SIZE 50M,
      GROUP 2 'E:ORACLEPRODUCT10.2.0ORADATAORCLREDO02.LOG'  SIZE 50M,
      GROUP 3 'E:ORACLEPRODUCT10.2.0ORADATAORCLREDO03.LOG'  SIZE 50M
    -- STANDBY LOGFILE
    DATAFILE
      'E:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLUNDOTBS01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLSYSAUX01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLUSERS01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLEXAMPLE01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLFTITEM10G01',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLEYGLE01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLFTTEST01',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLUSERS02.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLXF1.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLXF2.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLTZX01.DBF'
    CHARACTER SET ZHS16GBK
    ;
    3.recover database; //恢复数据库
    4.打开数据库 alter database open;
    因为noresetlogs是用当前日志的high scn来恢复,所以基本没有问题。

    第四:利用resetlogs来进行控件文件以及数据库的恢复,这里出现的一些问题
    1.shutdown abort
    2.数据库启动到nomount状态
    3.创建控制文件
    CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG
        MAXLOGFILES 16
        MAXLOGMEMBERS 3
        MAXDATAFILES 100
        MAXINSTANCES 8
        MAXLOGHISTORY 292
    LOGFILE
      GROUP 1 'E:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG'  SIZE 50M,
      GROUP 2 'E:ORACLEPRODUCT10.2.0ORADATAORCLREDO02.LOG'  SIZE 50M,
      GROUP 3 'E:ORACLEPRODUCT10.2.0ORADATAORCLREDO03.LOG'  SIZE 50M
    -- STANDBY LOGFILE
    DATAFILE
      'E:ORACLEPRODUCT10.2.0ORADATAORCLSYSTEM01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLUNDOTBS01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLSYSAUX01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLUSERS01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLEXAMPLE01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLFTITEM10G01',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLEYGLE01.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLFTTEST01',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLUSERS02.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLXF1.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLXF2.DBF',
      'E:ORACLEPRODUCT10.2.0ORADATAORCLTZX01.DBF'
    CHARACTER SET ZHS16GBK
    ;
    4.alter database mount; 把数据库启动到mount状态
    5.SQL> recover database;
       ORA-00283: 恢复会话因错误而取消
       ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成
    因为采用的resetlogs方式,所以会出现如上的错误
    这时需要用如下的方式进行恢复
    SQL> recover database using backup controlfile until cancel;
    ORA-00279: 更改 6432534 (在 06/22/2008 16:39:31 生成) 对于线程 1 是必需的
    ORA-00289: 建议:
    E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2008_06_22O1_MF_1_
    13_%U_.ARC
    ORA-00280: 更改 6432534 (用于线程 1) 在序列 #13 中


    指定日志: {=suggested | filename | AUTO | CANCEL}

    在这里有几个选项
    suggested:在上面ORA-00289: 建议:....会按这个文件去恢复
    filename:自己指定日志文件
    auto:自动选择,但我个人觉得好像和suggestted一样呢:(
    cancel:这个可以不从介质恢复。

    我在这里选择auto和suggested无不行,报的错误如下:
    指定日志: {=suggested | filename | AUTO | CANCEL}
    auto
    ORA-00308: 无法打开归档日志 'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2008_06_22
    ORA-27041: 无法打开文件
    OSD-04002: 无法打开文件
    O/S-Error: (OS 2) 系统找不到指定的文件。

    采用cancel报如下错:
    ORA-01112: 未启动介质恢复

    经过以上的步骤后来发现:
    我这里的归档日志中要求的是日志文件不存在
    指定日志: {=suggested | filename | AUTO | CANCEL}
    E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2008_06_22O1_MF_1_9_45W1NQDP_.ARC
    ORA-00310: 归档日志包含序列 9; 要求序列 10
    ORA-00334: 归档日志:
    'E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2008_06_22O1_MF_1
    _9_45W1NQDP_.ARC'

    查看日志文件:
    select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS      
    ------ ---------- ---------- ---------- ---------- --- --------
         1          1          0   52428800          1 YES UNUSED
         3          1          0   52428800          1 YES CURRENT
         2          1          0   52428800          1 YES UNUSED
    发现这里的理解有问题,因为采用的是resetlogs,所以日志文件肯定是unused的,呵, 这里要多谢棉花糖的。

    6.仔细查看eygle的书这时有一句话
    "如果在线日志未损坏,则可以指定在线日志文件执行恢复",这时棉花糖也指出了这点:
    “哦,忘了你的是resetlogs,你的在线日志还在吧 ,把在线日志的路径输入啊,比如这样D:ORACLEPRODUCT10.2.0ORADATATESTREDO01.LOG ,你把所有的日志测试过去,有一个应该是能用来做恢复”
    经过再次尝试终于成功了
    SQL> recover database using backup controlfile until cancel;
    ORA-00279: 更改 6432534 (在 06/22/2008 16:39:31 生成) 对于线程 1 是必需的
    ORA-00289: 建议:
    E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2008_06_22O1_MF_1_
    13_%U_.ARC
    ORA-00280: 更改 6432534 (用于线程 1) 在序列 #13 中


    指定日志: {=suggested | filename | AUTO | CANCEL}
    E:ORACLEPRODUCT10.2.0ORADATAORCLREDO03.LOG
    ORA-00310: 归档日志包含序列 12; 要求序列 13
    ORA-00334: 归档日志: 'E:ORACLEPRODUCT10.2.0ORADATAORCLREDO03.LOG'


    SQL>  recover database using backup controlfile until cancel;
    ORA-00279: 更改 6432534 (在 06/22/2008 16:39:31 生成) 对于线程 1 是必需的
    ORA-00289: 建议:
    E:ORACLEPRODUCT10.2.0FLASH_RECOVERY_AREAORCLARCHIVELOG2008_06_22O1_MF_1_
    13_%U_.ARC
    ORA-00280: 更改 6432534 (用于线程 1) 在序列 #13 中


    指定日志: {=suggested | filename | AUTO | CANCEL}
    E:ORACLEPRODUCT10.2.0ORADATAORCLREDO02.LOG
    已应用的日志。
    完成介质恢复。
    SQL> alter database open;
    alter database open
    *
    第 1 行出现错误:
    ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
    SQL> alter database open resetlogs;
    数据库已更改。

  • 相关阅读:
    感触
    儿子会走了
    OLB(outlook bar)控件开发计划
    又要上班了
    OLB(outlook bar)控件开发计划
    将Vim打造成完美的IDE神器
    简明 Vim 练级攻略
    Java , C , C++ ,PHP, python 运算符优先级对照表
    史上最强的vimrc文件
    vim学习资料汇总
  • 原文地址:https://www.cnblogs.com/nfyz/p/4726357.html
Copyright © 2011-2022 走看看