首页 > 代码库 > 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