zoukankan      html  css  js  c++  java
  • Oracle bbed 实用示例-----File Header Reset

    一.查看当前环境

    1.1 当前控制文件中的SCN号

    [oracle@ora10 ~]$ sqlplus /nolog
    SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jan 17 10:11:34 2015
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    SQL> conn /as sysdba
    Connected.
    SQL> col name format a65
    
    SQL> select file#,to_char(checkpoint_change#,'999999999999') from v$datafile;
    
         FILE# TO_CHAR(CHECK
    ---------- -------------
             1        490652
             2        490652
             3        490652
             4        490652
             5        490652
    
    SQL>

     1.2 当前数据文件的状态

    SQL> select file#,status,name from v$datafile;
    
         FILE# STATUS  NAME
    ---------- ------- -----------------------------------------------------------------
             1 SYSTEM  /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bc7ld3sf_.dbf
             2 ONLINE  /u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_bc7ldql4_.dbf
             3 ONLINE  /u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_bc7lf4bd_.dbf
             4 ONLINE  /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_bc7lflno_.dbf
             5 ONLINE  /u01/app/oracle/oradata/ORCL/datafile/test_01.dbf
    
    SQL>

    二.模拟故障场景

    2.1 将datafile 5 offline

    SQL> alter database datafile 5 offline;
    
    Database altered.
    
    SQL> select file#,status,name from v$datafile;
    
         FILE# STATUS  NAME
    ---------- ------- -----------------------------------------------------------------
             1 SYSTEM  /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bc7ld3sf_.dbf
             2 ONLINE  /u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_bc7ldql4_.db
                       f
    
             3 ONLINE  /u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_bc7lf4bd_.dbf
             4 ONLINE  /u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_bc7lflno_.dbf
             5 RECOVER /u01/app/oracle/oradata/ORCL/datafile/test_01.dbf  ---文件5的状态已经被改变
    
    SQL>

    2.2 更改文件的SCN号

    --做日志切换,多执行几次
    SQL> alter system switch logfile;
    .........
    SQL> select file#,checkpoint_change# from v$datafile;
    
         FILE# CHECKPOINT_CHANGE#
    ---------- ------------------
             1             491337  
             2             491337
             3             491337
             4             491337
             5             490652  --SCN号未变
    
    SQL> 
    
    ---查看需要恢复datafile 的SCN:
    SQL> select file#,online_status,change# from v$recover_file;
    
         FILE# ONLINE_    CHANGE#
    ---------- ------- ----------
             5 OFFLINE     490652
    
    SQL>

    2.3 将datafile 5 online

    SQL> alter database datafile 5 online;
    alter database datafile 5 online
    *
    ERROR at line 1:
    ORA-01113: file 5 needs media recovery
    ORA-01110: data file 5: '/u01/app/oracle/oradata/ORCL/datafile/test_01.dbf'
    
    SQL> 

    三.利用bbed修改文件5的scn号

    3.1 再利用bbed前,将数据库关闭

    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> 

    3.2 利用bbed查看文件1和文件5的scn号

    ----查看文件的scn号之前,先了解文件中的scn号的4个属性值

       Oracle根据4个属性来判断datafile 是否和其他的datafile 一致,如果都一致,可以正常操作,如果不一致,那么会报ORA-01113错误。

    • kscnbas (at offset 484) - SCN of last change to the datafile.
    • kcvcptim (at offset 492) -Time of the last change to the datafile. 
    • kcvfhcpc (at offset 140) - Checkpoint count.
    • kcvfhccc (at offset 148) - Unknown, but is always 1 less than thecheckpoint point count

         这四个属性值存在File header中,即文件的第一个数据块中

    ---查看文件1的4个SCN属性值
    BBED> set file 1
            FILE#           1
    
    BBED> set block 1
            BLOCK#          1
    
    BBED> map /v
     File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bc7ld3sf_.dbf (1)
     Block: 1                                     Dba:0x00400001
    ------------------------------------------------------------
     Data File Header
    
     struct kcvfh, 676 bytes                    @0       
        struct kcvfhbfh, 20 bytes               @0       
        struct kcvfhhdr, 76 bytes               @20      
        ub4 kcvfhrdb                            @96      
        struct kcvfhcrs, 8 bytes                @100     
        ub4 kcvfhcrt                            @108     
        ub4 kcvfhrlc                            @112     
        struct kcvfhrls, 8 bytes                @116     
        ub4 kcvfhbti                            @124     
        struct kcvfhbsc, 8 bytes                @128     
        ub2 kcvfhbth                            @136     
        ub2 kcvfhsta                            @138     
        struct kcvfhckp, 36 bytes               @484     
        ub4 kcvfhcpc                            @140     
        ub4 kcvfhrts                            @144     
        ub4 kcvfhccc                            @148     
        struct kcvfhbcp, 36 bytes               @152     
        ub4 kcvfhbhz                            @312     
        struct kcvfhxcd, 16 bytes               @316     
        word kcvfhtsn                           @332     
        ub2 kcvfhtln                            @336     
        text kcvfhtnm[30]                       @338     
        ub4 kcvfhrfn                            @368     
        struct kcvfhrfs, 8 bytes                @372     
        ub4 kcvfhrft                            @380     
        struct kcvfhafs, 8 bytes                @384     
        ub4 kcvfhbbc                            @392     
        ub4 kcvfhncb                            @396     
        ub4 kcvfhmcb                            @400     
        ub4 kcvfhlcb                            @404     
        ub4 kcvfhbcs                            @408     
        ub2 kcvfhofb                            @412     
        ub2 kcvfhnfb                            @414     
        ub4 kcvfhprc                            @416     
        struct kcvfhprs, 8 bytes                @420     
        struct kcvfhprfs, 8 bytes               @428     
        ub4 kcvfhtrt                            @444     
    
     ub4 tailchk                                @8188    
    
    
    BBED> print kcvfhckp
    struct kcvfhckp, 36 bytes                   @484     
       struct kcvcpscn, 8 bytes                 @484     
          ub4 kscnbas                           @484      0x00077fd0
          ub2 kscnwrp                           @488      0x0000
       ub4 kcvcptim                             @492      0x33cf444d
       ub2 kcvcpthr                             @496      0x0001
       union u, 12 bytes                        @500     
          struct kcvcprba, 12 bytes             @500     
             ub4 kcrbaseq                       @500      0x00000010
             ub4 kcrbabno                       @504      0x000000f3
             ub2 kcrbabof                       @508      0x0010
       ub1 kcvcpetb[0]                          @512      0x02
       ub1 kcvcpetb[1]                          @513      0x00
       ub1 kcvcpetb[2]                          @514      0x00
       ub1 kcvcpetb[3]                          @515      0x00
       ub1 kcvcpetb[4]                          @516      0x00
       ub1 kcvcpetb[5]                          @517      0x00
       ub1 kcvcpetb[6]                          @518      0x00
       ub1 kcvcpetb[7]                          @519      0x00
    
    BBED> print kcvfhcpc
    ub4 kcvfhcpc                                @140      0x0000004e
    
    BBED> print kcvfhccc
    ub4 kcvfhccc                                @148      0x0000004d
    
    BBED>
    
    注意:print打印出来的值和在文件中存储的值可能不是完全一致。在intel 的little endian是低位先存储,即顺序与我们看到的是相反的.利用
    dump出数据实际存储值:
    
    BBED> dump /v dba 1,1 offset 484 count 32
     File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bc7ld3sf_.dbf (1)
     Block: 1       Offsets:  484 to  515  Dba:0x00400001
    -------------------------------------------------------
     d07f0700 00000000 4d44cf33 01000a00 l ......MD....
     10000000 f3000000 1000ffbf 02000000 l ............
    
     <16 bytes per line>
    
    BBED> dump /v dba 1,1 offset 140 count 32
     File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bc7ld3sf_.dbf (1)
     Block: 1       Offsets:  140 to  171  Dba:0x00400001
    -------------------------------------------------------
     4e000000 1ecfce33 4d000000 00000000 l N....衔3M.......
     00000000 00000000 00000000 00000000 l ................
    
     <16 bytes per line>
    
    BBED> 
    
    
    ub4 kscnbas            @484      0x00077fd0 -->d07f0700 这四个值才是我们要写入文件5中的
    ub4 kcvcptim           @492      0x33cf444d -->4d44cf33
    ub4 kcvfhcpc           @140      0x0000004e -->4e000000
    ub4 kcvfhccc           @148      0x0000004d -->4d000000

    3.3 修改文件5的4个SCN值

    ----修改kscnbas

    BBED> modify /x d07f0700 dba 5,1 offset 484
    BBED-00209: invalid number (d07f0700)
    
    --报无法修改,看看两个文件的484至487的4个字节值的异同:
    BBED> dump /v dba 1,1 offset 484 count 32
     File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bc7ld3sf_.dbf (1)
     Block: 1       Offsets:  484 to  515  Dba:0x00400001
    -------------------------------------------------------
     d07f0700 00000000 4d44cf33 01000a00 l ......MD....
     10000000 f3000000 1000ffbf 02000000 l ............
    
     <16 bytes per line>
    
    BBED>
    
    BBED> dump /v dba 5,1 offset 484 count 32
     File: /u01/app/oracle/oradata/ORCL/datafile/test_01.dbf (5)
     Block: 1       Offsets:  484 to  515  Dba:0x01400001
    -------------------------------------------------------
     9c7c0700 0000870a 1d3fcf33 01000000 l .|.......?....
     09000000 02000000 1000ffbf 02000000 l ..............
    
     <16 bytes per line>
    
    BBED>
    
    --观察文件1和文件5的前四个字节的异同,只修改484,485前两字节
    
    BBED> modify /x d07f dba 5,1 offset 484
    Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y
     File: /u01/app/oracle/oradata/ORCL/datafile/test_01.dbf (5)
     Block: 1                Offsets:  484 to  515           Dba:0x01400001
    ------------------------------------------------------------------------
     d07f0700 0000870a 1d3fcf33 01000000 09000000 02000000 1000ffbf 02000000 
    
     <32 bytes per line>
    
    BBED> 

    ----修改kcvcptim

    ----观察文件1和文件5的前四个字节的异同
    BBED> dump /v dba 1,1 offset 492 count 4
     File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bc7ld3sf_.dbf (1)
     Block: 1       Offsets:  492 to  495  Dba:0x00400001
    -------------------------------------------------------
     4d44cf33                            l MD
    
    
     <16 bytes per line>
    
    BBED> dump /v dba 5,1 offset 492 count 4
     File: /u01/app/oracle/oradata/ORCL/datafile/test_01.dbf (5)
     Block: 1       Offsets:  492 to  495  Dba:0x01400001
    -------------------------------------------------------
     1d3fcf33                            l .?
    
    
     <16 bytes per line>
    
    BBED>
    
    同理,只需修改492,493两字节的值
    
    BBED> modify /x 4d44 dba 5,1 offset 492
     File: /u01/app/oracle/oradata/ORCL/datafile/test_01.dbf (5)
     Block: 1                Offsets:  492 to  495           Dba:0x01400001
    ------------------------------------------------------------------------
     4d44cf33 
    
     <32 bytes per line>
    
    BBED> 

    ----修改kcvfhcpc

    ----观察前四个字节的异同
    BBED> dump /v dba 1,1 offset 140 count 4
     File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bc7ld3sf_.dbf (1)
     Block: 1       Offsets:  140 to  143  Dba:0x00400001
    -------------------------------------------------------
     4e000000                            l N...
    
     <16 bytes per line>
    
    BBED> dump /v dba 5,1 offset 140 count 4
     File: /u01/app/oracle/oradata/ORCL/datafile/test_01.dbf (5)
     Block: 1       Offsets:  140 to  143  Dba:0x01400001
    -------------------------------------------------------
     49000000                            l I...
    
     <16 bytes per line>
    
    BBED> 
    
    
    --只需修改前两个字节
    BBED> modify /x 4e00 dba 5,1 offset 140
     File: /u01/app/oracle/oradata/ORCL/datafile/test_01.dbf (5)
     Block: 1                Offsets:  140 to  143           Dba:0x01400001
    ------------------------------------------------------------------------
     4e000000 
    
     <32 bytes per line>
    
    BBED>

    ----修改kcvfhccc

    ----观察前四个字节的异同
    BBED> dump /v dba 1,1 offset 148 count 4
     File: /u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bc7ld3sf_.dbf (1)
     Block: 1       Offsets:  148 to  151  Dba:0x00400001
    -------------------------------------------------------
     4d000000                            l M...
    
     <16 bytes per line>
    
    BBED> dump /v dba 5,1 offset 148 count 4
     File: /u01/app/oracle/oradata/ORCL/datafile/test_01.dbf (5)
     Block: 1       Offsets:  148 to  151  Dba:0x01400001
    -------------------------------------------------------
     48000000                            l H...
    
     <16 bytes per line>
    
    BBED>
    
    ----只需修改前两个字节
    BBED> modify /x 4d00 dba 5,1 offset 148
     File: /u01/app/oracle/oradata/ORCL/datafile/test_01.dbf (5)
     Block: 1                Offsets:  148 to  151           Dba:0x01400001
    ------------------------------------------------------------------------
     4d000000 
    
     <32 bytes per line>
    
    BBED> 

    3.4 应用修改

    BBED> sum apply
    Check value for File 5, Block 1:
    current = 0xf719, required = 0xf719
    
    BBED>

    四.创建控制文件

      虽然我们修改了datafile header里的几个值,但是v$datafile里的scn并没有改变,因为v$datafile里的scn是从控制文件里读取的。 而BBED 不能修改控制文件,所以,还需要重建控制文件。

    4.1 用带*._allow_resetlogs_corruption=TRUE的pfile启库到nomount状态

    SQL> startup nomount pfile=/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora
    ORACLE instance started.
    
    Total System Global Area  285212672 bytes
    Fixed Size                  1218992 bytes
    Variable Size              92276304 bytes
    Database Buffers          188743680 bytes
    Redo Buffers                2973696 bytes
    SQL> 
    
    注:如果没有此参数后期open resetlogs 时会报:
    SQL> alter database open resetlogs;
    alter database open resetlogs
    *
    ERROR at line 1:
    ORA-01194: file 5 needs more recovery to be consistent
    ORA-01110: data file 5: '/u01/app/oracle/oradata/ORCL/datafile/test_01.dbf'

    4.2 创建控制文件

    SQL> CREATE CONTROLFILE REUSE DATABASE "orcl" NORESETLOGS  ARCHIVELOG
      2      MAXLOGFILES 16
      3      MAXLOGMEMBERS 3
      4      MAXDATAFILES 100
      5      MAXINSTANCES 8
      6      MAXLOGHISTORY 292
      7  LOGFILE
      8    GROUP 1 '/u01/app/oracle/oradata/ORCL/onlinelog/redo01.log'  SIZE 50M,
      9    GROUP 2 '/u01/app/oracle/oradata/ORCL/onlinelog/redo02.log'  SIZE 50M,
     10    GROUP 3 '/u01/app/oracle/oradata/ORCL/onlinelog/redo03.log'  SIZE 50M
     11  DATAFILE
     12     '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_bc7lf4bd_.dbf',
     13     '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bc7ld3sf_.dbf',
     14     '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_bc7ldql4_.dbf',
     15     '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_bc7lflno_.dbf',
     16     '/u01/app/oracle/oradata/ORCL/datafile/test_01.dbf'
     17  CHARACTER SET AL32UTF8
     18  ;
    CREATE CONTROLFILE REUSE DATABASE "orcl" NORESETLOGS  ARCHIVELOG
    *
    ERROR at line 1:
    ORA-01503: CREATE CONTROLFILE failed
    ORA-01229: data file 5 is inconsistent with logs
    ORA-01110: data file 5: '/u01/app/oracle/oradata/ORCL/datafile/test_01.dbf'
    
    
    SQL>
    
    因为ORA-01229: data file 5 is inconsistent with logs,索引不能用NORESETLOGS创建控制文件,只能用RESETLOGS
    
    SQL> CREATE CONTROLFILE REUSE DATABASE "orcl" RESETLOGS  ARCHIVELOG
      2      MAXLOGFILES 16
      3      MAXLOGMEMBERS 3
      4      MAXDATAFILES 100
      5      MAXINSTANCES 8
      6      MAXLOGHISTORY 292
      7  LOGFILE
      8    GROUP 1 '/u01/app/oracle/oradata/ORCL/onlinelog/redo01.log'  SIZE 50M,
      9    GROUP 2 '/u01/app/oracle/oradata/ORCL/onlinelog/redo02.log'  SIZE 50M,
     10    GROUP 3 '/u01/app/oracle/oradata/ORCL/onlinelog/redo03.log'  SIZE 50M
     11  DATAFILE
     12     '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_sysaux_bc7lf4bd_.dbf',
     13     '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_system_bc7ld3sf_.dbf',
     14     '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_undotbs1_bc7ldql4_.dbf',
     15     '/u01/app/oracle/oradata/ORCL/datafile/o1_mf_users_bc7lflno_.dbf',
     16     '/u01/app/oracle/oradata/ORCL/datafile/test_01.dbf'
     17  CHARACTER SET AL32UTF8
     18  ;
    
    Control file created.
    
    SQL>

    4.3 恢复数据库

    SQL> recover database using backup controlfile until cancel;
    ORA-00279: change 491472 generated at 01/17/2015 10:24:13 needed for thread 1
    ORA-00289: suggestion : /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2015_01_17/o1_mf_1_9_%u_.arc
    ORA-00280: change 491472 for thread 1 is in sequence #9
    
    
    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    auto   
    ORA-00328: archived log ends at change 491322, need later change 491472
    ORA-00334: archived log: '/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2015_01_17/o1_mf_1_9_bcnzchrb_.arc'
    
    
    ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
    ORA-01194: file 5 needs more recovery to be consistent
    ORA-01110: data file 5: '/u01/app/oracle/oradata/ORCL/datafile/test_01.dbf'
    
    
    SQL> alter database open resetlogs;  --
    
    Database altered.
    
    SQL>

    至此,数据库打开,不过并不是完全恢复

  • 相关阅读:
    Python—Socket
    python-—计算器
    Python—I-O多路复用
    Python—redis
    《Python数据分析常用手册》一、NumPy和Pandas篇
    python--Selenium-模拟浏览器
    python--selenium简单模拟百度搜索点击器
    关于selenium实现滑块验证
    python 读写、创建 文件的方法(必看)
    Python 爬虫的工具列表大全
  • 原文地址:https://www.cnblogs.com/polestar/p/4243646.html
Copyright © 2011-2022 走看看