• 07 归档模式 Active redo log丢失或损坏的恢复


    环境同上一篇

    模拟处于active状态的redo log损坏

    sesion 1

    SYS@ orcl >/                         
    
        GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE      MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
    ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
         1        1          19   52428800       512        2 NO  CURRENT             9777054 06-JUN-19     2.8147E+14
         2        1          17   52428800       512        1 YES ACTIVE             9776201 06-JUN-19        9776627 06-JUN-19
         3        1          18   52428800       512        1 YES ACTIVE             9776627 06-JUN-19        9777054 06-JUN-19

    session 2

    [oracle@DSI ~]$ sqlplus test/test
    SQL> create table t7 (id int,name varchar2(100));
    Table created.
    
    SQL> begin
    for i in 1 .. 50000000
    loop
    insert into t7 values(i,'AAAAAA');
    end loop;
    commit;
    end;
    /  

    session 1

    SYS@ orcl >shutdown abort;
    ORACLE instance shut down.

    session 2 报错

    /  2    3    4    5    6    7    8  
    begin
    *
    ERROR at line 1:
    ORA-03113: end-of-file on communication channel
    Process ID: 6269
    Session ID: 141 Serial number: 527

    SQL> conn /as sysdba
    Connected to an idle instance.
    
    SQL> startup mount;
    ORACLE instance started.
    
    Total System Global Area  784998400 bytes
    Fixed Size            2257352 bytes
    Variable Size          478154296 bytes
    Database Buffers      297795584 bytes
    Redo Buffers            6791168 bytes
    Database mounted.
    SQL> set linesize 1000
    SQL> select * from v$log;
    
        GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE      MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
    ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
         1        1          19   52428800       512        2 YES ACTIVE             9777054 06-JUN-19        9777480 06-JUN-19
         3        1          18   52428800       512        1 YES ACTIVE             9776627 06-JUN-19        9777054 06-JUN-19
         2        1          20   52428800       512        1 NO  CURRENT             9777480 06-JUN-19     2.8147E+14
    
    SQL> select * from v$logfile;
    
        GROUP# STATUS  TYPE    MEMBER                       IS_
    ---------- ------- ------- ---------------------------------------------------------------- ---
         2       ONLINE  /u01/app/oracle/oradata/orcl/redo02.log        NO
         1       ONLINE  /u01/app/oracle/oradata/orcl/redo01.log        NO
         3       ONLINE  /u01/app/oracle/oradata/orcl/redo03.log        NO
         1       ONLINE  /u01/app/oracle/oradata/orcl/redo11.log    

    损坏active的3号文件

    [oracle@DSI ~]$ dd if=/dev/null of=/u01/app/oracle/oradata/orcl/redo03.log bs=512 count=20
    0+0 records in
    0+0 records out
    0 bytes (0 B) copied, 0.000121828 s, 0.0 kB/s

    打开报错

    SQL> alter database open;
    alter database open
    *
    ERROR at line 1:
    ORA-00313: open failed for members of log group 3 of thread 1
    ORA-00312: online log 3 thread 1: '/u01/app/oracle/oradata/orcl/redo03.log'
    ORA-27047: unable to read the header block of file
    Linux-x86_64 Error: 25: Inappropriate ioctl for device
    Additional information: 1
    SQL> alter database open resetlogs;
    alter database open resetlogs
    *
    ERROR at line 1:
    ORA-01139: RESETLOGS option only valid after an incomplete database recovery
    
    
    SQL> recover database until cancel;
    ORA-00279: change 9776627 generated at 06/06/2019 09:25:59 needed for thread 1
    ORA-00289: suggestion : /u01/app/oracle/fra/ORCL/archivelog/2019_06_06/o1_mf_1_18_ghjtxbjq_.arc
    ORA-00280: change 9776627 for thread 1 is in sequence #18
    
    
    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    
    ORA-00279: change 9777054 generated at 06/06/2019 09:26:02 needed for thread 1
    ORA-00289: suggestion : /u01/app/oracle/fra/ORCL/archivelog/2019_06_06/o1_mf_1_19_ghjtxfjt_.arc
    ORA-00280: change 9777054 for thread 1 is in sequence #19
    ORA-00278: log file '/u01/app/oracle/fra/ORCL/archivelog/2019_06_06/o1_mf_1_18_ghjtxbjq_.arc' no longer needed for this recovery
    
    
    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    
    ORA-00279: change 9777480 generated at 06/06/2019 09:26:05 needed for thread 1
    ORA-00289: suggestion : /u01/app/oracle/fra/ORCL/archivelog/2019_06_06/o1_mf_1_20_%u_.arc
    ORA-00280: change 9777480 for thread 1 is in sequence #20
    ORA-00278: log file '/u01/app/oracle/fra/ORCL/archivelog/2019_06_06/o1_mf_1_19_ghjtxfjt_.arc' no longer needed for this recovery
    
    
    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    
    ORA-00308: cannot open archived log '/u01/app/oracle/fra/ORCL/archivelog/2019_06_06/o1_mf_1_20_%u_.arc'
    ORA-27037: unable to obtain file status
    Linux-x86_64 Error: 2: No such file or directory
    Additional information: 3
    
    
    ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
    ORA-01194: file 1 needs more recovery to be consistent
    ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
    
    
    SQL> alter database open resetlogs;
    alter database open resetlogs
    *
    ERROR at line 1:
    ORA-01194: file 1 needs more recovery to be consistent
    ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
    [oracle@DSI ~]$ tail -n 100 /tmp/pfile.ora

    修改隐含参数

    *._allow_resetlogs_corruption=true
    *._allow_error_simulation=true

    [oracle@DSI ~]$ sqlplus / as sysdba
    
    SQL*Plus: Release 11.2.0.4.0 Production on Thu Jun 6 09:32:52 2019
    
    Copyright (c) 1982, 2013, Oracle.  All rights reserved.
    
    Connected to an idle instance.
    
    SQL> startup pfile='/tmp/pfile.ora' mount;
    ORACLE instance started.
    
    Total System Global Area  784998400 bytes
    Fixed Size            2257352 bytes
    Variable Size          478154296 bytes
    Database Buffers      297795584 bytes
    Redo Buffers            6791168 bytes
    Database mounted.
    SQL> alter database open resetlogs;
    
    Database altered.
    SQL> select * from v$log;
    
        GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE      MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
    ---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
         1        1           1   52428800       512        2 YES ACTIVE             9777481 06-JUN-19        9778409 06-JUN-19
         2        1           2   52428800       512        1 YES ACTIVE             9778409 06-JUN-19        9778925 06-JUN-19
         3        1           3   52428800       512        1 NO  CURRENT             9778925 06-JUN-19     2.8147E+14
    SQL> alter system switch logfile;
    
    System altered.
    
    SQL> /
    
    System altered.
    
    SQL> /
    
    System altered.
    SQL> select * from test.t7;
    
    no rows selected

    查看错误日志
    [oracle@DSI ~]$ tail -f -n 100 /u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
    ##处于active/current redo log损坏,进行强制启动打开的话,比较小的库最好是进行导出导出,防止出现其他错误,比较大的库(上百t)迁移的时间就比较长
    如果有报错,有些可能修复,有些不能修复的致命错误比如ora-600等,还是导出导入修复比较安全

  • 相关阅读:
    mysql__视图
    mysql__索引的设计和使用
    mysql————表类型(存储引擎)的选择
    mysql 常用函数
    mysql中的运算符
    HTML5 API详解(1):fullscreen全屏模式
    深入了解 Flexbox 伸缩盒模型
    BAT及各大互联网公司2014前端笔试面试题--Html,Css篇
    js运动动画
    原创:自定义三叉树
  • 原文地址:https://www.cnblogs.com/yhq1314/p/10983280.html
Copyright © 2020-2023  润新知