Oracle bbed 实用示例-----File Header Reset

一.查看当前环境

1.1 当前控制文件中的SCN号

[[email protected] ~]$ 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>

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

时间: 2024-08-26 20:59:33

Oracle bbed 实用示例-----File Header Reset的相关文章

Oracle bbed 实用示例-----修改Data内容、恢复delete的rows

bbed 可以在db open 状态来进行修改,但是建议在做任何修改操作之前先shutdown db. 这样避免checkpoint 进程重写bbed 对block 的修改. 也避免oracle 在bbed 修改完成之前读block 或者申明block 为corrupt. 一. 示例: 修改Data内容 1.1连接bbed [[email protected] ~]$ bbed parfile=/u01/app/oracle/bbed/bbed.par Password: BBED: Relea

oracle data file header replace(测)

SQL> create tablespace rm_tbs datafile 'f1.dbf' size 10m; Tablespace created. SQL> select file#,name from v$datafile; [[email protected] ~]$ rm /home/oracle/product/10g/dbs/f1.dbf [[email protected] ~]$ exit exit SQL> select file#,name from v$dat

【Oracle】IMP-00010: not a valid export file, header failed verification

别人给了一个Oracle文件,结果在导入的时候发现有问题,报错如下: IMP-00010: not a valid export file, header failed verification 在网上查询后发现,是版本数据库问题造成,使用UE编辑器打开dmp文件,看到首行如下: 上图表明该数据库版本为:Oracle12c的版本 使用SQL:select * from v$version 查询当前数据库版本 我们将dmp文件的TEXPORT:V12.02修改为V11.02,再次导入,完美解决问题

Freeze file header

SQL> select * from v$version where rownum=1; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production 我们可以使用alter tablespace ... begin backup将表空间置于联

oracle BBED 直接改动数据库block块

1.BBED配置 1)将相应文件放到$ORACLE_HOME/rdbms/mesg和$ORACLE_HOME/rdbms/lib中: --将lib中bbedus.msb和bbedus.msg 放在$ORACLE_HOME/rdbms/mesg下 --将lib中sbbdpt.o和ssbbded.o 放在$ORACLE_HOME/rdbms/lib下 2)安装BBED --在$ORACLE_HOME/rdbms/lib下运行: [[email protected] lib]$ make -f ins

oracle BBED 直接修改数据库block块

--将lib中bbedus.msb和bbedus.msg 放在$ORACLE_HOME/rdbms/mesg下 --将lib中sbbdpt.o和ssbbded.o 放在$ORACLE_HOME/rdbms/lib下 --在$ORACLE_HOME/rdbms/lib下执行:[[email protected] lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed 执行后会在lib下生成一个bbed可执行文件 默认密码; blockedit

Oracle bbed使用说明2---常用命令

一.BBED常用命令说明 先看帮助的说明 BBED> help all SET DBA [ dba | file#, block# ] SET FILENAME 'filename' SET FILE file# SET BLOCK [+/-]block# SET OFFSET [ [+/-]byte offset | symbol | *symbol ] SET BLOCKSIZE bytes SET LIST[FILE] 'filename' SET WIDTH character_coun

修改file header (测)

--修改file header ------------------------------------------------------------------------- cd $ORACLE_H0ME/rdbms/lib ./bbed blockedit set filename '/u01/app/oracle/product/10.2.0/db_1/dbs/test01.dbf' show map /v p kcvfhckp BBED> modify /x 005a --拷贝 文件

改动file header (測)

--改动file header ------------------------------------------------------------------------- cd $ORACLE_H0ME/rdbms/lib ./bbed blockedit set filename '/u01/app/oracle/product/10.2.0/db_1/dbs/test01.dbf' show map /v p kcvfhckp BBED> modify /x 005a --拷贝 文件