首页 > 代码库 > oracle data file header replace(测)

oracle data file header replace(测)

SQL> create tablespace rm_tbs datafile ‘f1.dbf‘ size 10m;
Tablespace created.
SQL> select file#,name from v$datafile;
[oracle@VSZ-ORCLE-jftest ~]$ rm /home/oracle/product/10g/dbs/f1.dbf
[oracle@VSZ-ORCLE-jftest ~]$ exit
exit

SQL> select file#,name from v$datafile;
 13  /home/oracle/product/10g/dbs/f1.dbf
13 rows selected.
SQL> alter tablespace rm_tbs add datafile ‘f2.dbf‘ size 10m;
Tablespace altered.
SQL> select file#,name from v$datafile;

13 /home/oracle/product/10g/dbs/f1.dbf
14 /home/oracle/product/10g/dbs/f2.dbf

14 rows selected.
SQL> shutdown immediate
ORA-03113: end-of-file on communication channel

[oracle@VSZ-ORCLE-jftest ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.5.0 - Production on Fri Jul 25 09:37:29 2014
Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup

ORACLE instance started.
Total System Global Area 2147483648 bytes
Fixed Size                  2097656 bytes
Variable Size             654315016 bytes
Database Buffers         1476395008 bytes
Redo Buffers               14675968 bytes
Database mounted.

ORA-01157: cannot identify/lock data file 13 - see DBWR trace file
ORA-01110: data file 13: ‘/home/oracle/product/10g/dbs/f1.dbf‘

SQL>       
SQL> select file#||‘ ‘||name||‘ ‘||bytes from v$datafile;

11 /home/oracle/product/10g/dbs/datafile2.dbf 10485760
12 /home/oracle/product/10g/dbs/system_audit_01.dbf 104857600
13 /home/oracle/product/10g/dbs/f1.dbf 10485760
14 /home/oracle/product/10g/dbs/f2.dbf 10485760

Database mounted.
ORA-01122: database file 13 failed verification check
ORA-01110: data file 13: ‘/home/oracle/product/10g/dbs/f1.dbf‘
ORA-01204: file number is 14 rather than 13 - wrong file

############################## bbed --rdba_kcbh
BBED> map /v
 File: /home/oracle/product/10g/dbs/f1.dbf (13)
 Block: 1                                     Dba:0x03400001     --正确数据
------------------------------------------------------------

BBED> p kcvfhbfh

struct kcvfhbfh, 20 bytes                   @0      
   ub1 type_kcbh                            @0        0x0b
   ub1 frmt_kcbh                            @1        0xa2
   ub1 spare1_kcbh                          @2        0x00
   ub1 spare2_kcbh                          @3        0x00
   ub4 rdba_kcbh                            @4        0x03800001   --错误数据:

   ub4 bas_kcbh                             @8        0x00000000
   ub2 wrp_kcbh                             @12       0x0000
   ub1 seq_kcbh                             @14       0x01
   ub1 flg_kcbh                             @15       0x04 (KCBHFCKV)
   ub2 chkval_kcbh                          @16       0xd060
   ub2 spare3_kcbh                          @18       0x0000

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

############################## bbed --kcvfhrfn
BBED> show

        FILE#           13
        BLOCK#          1
        OFFSET          368
        DBA             0x03400001 (54525953 13,1)
        FILENAME        /home/oracle/product/10g/dbs/f1.dbf
        BIFILE          bifile.bbd
        LISTFILE        /home/oracle/hjbbed/bbedlist
        BLOCKSIZE       8192

        MODE            Edit
        EDIT            Unrecoverable
        IBASE           Dec
        OBASE           Dec
        WIDTH           80
        COUNT           512
        LOGFILE         log.bbd
        SPOOL           No

BBED> dump
 File: /home/oracle/product/10g/dbs/f1.dbf (13)
 Block: 1                Offsets:  368 to  879           Dba:0x03400001
------------------------------------------------------------------------
 0e000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
 00000000 00000000 00000000 00000000 3892b92a 01000000 00000000 00000000

BBED> modify /x 0d
 File: /home/oracle/product/10g/dbs/f1.dbf (13)
 Block: 1                Offsets:  368 to  879           Dba:0x03400001
------------------------------------------------------------------------
 0d000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
 00000000 00000000 00000000 00000000 3892b92a 01000000 00000000 00000000

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

############################## bbed --kccfhfno

BBED> p kcvfhhdr
struct kcvfhhdr, 76 bytes                   @20     
   ub4 kccfhswv                             @20       0x00000000
   ub4 kccfhcvn                             @24       0x0a200500
   ub4 kccfhdbi                             @28       0x07e116ae
   text kccfhdbn[0]                         @32      T
   text kccfhdbn[1]                         @33      E
   text kccfhdbn[2]                         @34      X
   text kccfhdbn[3]                         @35      T

   text kccfhdbn[4]                         @36      
   text kccfhdbn[5]                         @37      
   text kccfhdbn[6]                         @38      
   text kccfhdbn[7]                         @39      
   ub4 kccfhcsq                             @40       0x000091ad
   ub4 kccfhfsz                             @44       0x00000500
   s_blkz kccfhbsz                          @48       0x00
   ub2 kccfhfno                             @52       0x000e

############################## bbed --kscnbas  
BBED> modify /x 0d
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
 File: /home/oracle/product/10g/dbs/f1.dbf (13)
 Block: 1                Offsets:   52 to  563           Dba:0x03400001
------------------------------------------------------------------------
 0d000300 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 
 BBED> p kcvfhcrs

struct kcvfhcrs, 8 bytes                    @100    
   ub4 kscnbas                              @100      0x01addf00
   ub2 kscnwrp                              @104      0x0000

BBED>   set offset 100
        OFFSET          100

BBED> dump

 File: /home/oracle/product/10g/dbs/f1.dbf (13)
 Block: 1                Offsets:  100 to  611           Dba:0x03400001
------------------------------------------------------------------------
 00dfad01 00000000 378ee432 b01a642f a9ec0500 00000000 00000000 00000000
 00000000 00000400 02000000 00000000 01000000 00000000 00000000 00000000

BBED> modify /x cc 
 File: /home/oracle/product/10g/dbs/f1.dbf (13)
 Block: 1                Offsets:  100 to  611           Dba:0x03400001
------------------------------------------------------------------------
 ccdfad01 00000000 378ee432 b01a642f a9ec0500 00000000 00000000 00000000
 
BBED> sum apply

############################## bbed --kscnbas
 
SQL> alter database datafile 13 online;
alter database datafile 13 online
*
ERROR at line 1:

ORA-01122: database file 13 failed verification check
ORA-01110: data file 13: ‘/home/oracle/product/10g/dbs/f1.dbf‘
ORA-01202: wrong incarnation of this file - wrong creation time

############################## bbed --kcvfhcrt
BBED> p kcvfhcrt
ub4 kcvfhcrt                                @108      0x32e48e37
BBED> set offset 108
        OFFSET          108
BBED> dump
 File: /home/oracle/product/10g/dbs/f1.dbf (13)

 Block: 1                Offsets:  108 to  619           Dba:0x03400001
------------------------------------------------------------------------
 378ee432 b01a642f a9ec0500 00000000 00000000 00000000 00000000 00000400
 02000000 00000000 01000000 00000000 00000000 00000000 00000000 00000000
BBED> modify /x 8d
 File: /home/oracle/product/10g/dbs/f1.dbf (13)
 Block: 1                Offsets:  109 to  620           Dba:0x03400001

------------------------------------------------------------------------
 8de432b0 1a642fa9 ec050000 00000000 00000000 00000000 00000000 00040002
 00000000 00000001 00000000 00000000 00000000 00000000 00000000 00000000
 BBED> sum apply
Check value for File 13, Block 1:
current = 0xd2b3, required = 0xd2b3

SQL> select file#,to_char(creation_time,‘yyyymmdd hh24miss‘) from v$datafile;

        12 20140709 153030
        13 20140725 093536
        14 20140725 093655

SQL>  alter database datafile 13 online;
    alter database datafile 13 online

ERROR at line 1:
ORA-01113: file 13 needs media recovery if it was restored from backup, or END 【不重启服务器可能没这个问题】
BACKUP if it was not
ORA-01110: data file 13: ‘/home/oracle/product/10g/dbs/f1.dbf‘

SQL> recover datafile 13;
Media recovery complete.
SQL> alter database datafile 13 online;
Database altered.

--时间信息换算如下:
SELECT TO_NUMBER(‘32e48e37‘,‘XXXXXXXX‘)  from dual
853839415  --十进制

26 06 24 09 36 55--差异天数

时间原来这样算
select 26*12*31*24*60*60 --年
       +6*31*24*60*60+   --月
       24*24*60*60+      --天
       9*60*60+          --小时
       36*60             --分钟
       +55 from dual    --s

20140725 093536
26 06 24 09 35 36--差异天数
select 26*12*31*24*60*60 --年
       +6*31*24*60*60+   --月
       24*24*60*60+      --天
       9*60*60+          --小时
       35*60             --分钟
       +36 from dual    --s

 

853839336
select to_char(853839336,‘XXXXXXXX‘) from dual          -- 32E48DE8  文件13创建时间
select to_char(853839415,‘XXXXXXXX‘) from dual          -- 32E48E37
SELECT TO_NUMBER(‘32E48DE8‘,‘XXXXXXXX‘)  from dual
853839336

 

---
01addf00
SELECT TO_NUMBER(‘01addf00‘,‘XXXXXXXX‘)  from dual
--28172032
select to_char(28172032,‘XXXXXXXX‘) from dual
--1ADDF00
select to_char(28171980,‘XXXXXXXX‘) from dual
-- 1ADDECC

--这个实验告诉我们,实验要自己做,做了才知道哪一步很重要..

其他

需要调整的是:

ub4 rdba_kcbh                         @4      ---data block address

ub2 kccfhfno                          @52     ---file number

ub4 kscnbas                           @100    ---scn bas

ub4 kcvfhcrt                           @108    ---file create time

ub4 kcvfhrfn                           @368    ---reference file number