一.查看当前环境

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#,'') 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>

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

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

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

    bbed 可以在db open 状态来进行修改,但是建议在做任何修改操作之前先shutdown db. 这样避免checkpoint 进程重写bbed 对block 的修改. 也避免oracle 在b ...

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

    别人给了一个Oracle文件,结果在导入的时候发现有问题,报错如下: IMP-00010: not a valid export file, header failed verification 在网 ...

  3. oracle data file header replace(測)

    SQL> create tablespace rm_tbs datafile 'f1.dbf' size 10m; Tablespace created. SQL> select file ...

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

    一.BBED常用命令说明 先看帮助的说明 BBED> help all SET DBA [ dba | file#, block# ] SET FILENAME 'filename' SET F ...

  5. Oracle BBED 工具 说明

    一.  BBED介绍        有关BBED 详细使用说明的pdf文档,也是从网上下载的:               http:          Thename bbed is an acro ...

  6. 改动file header (測)

    --改动file header ------------------------------------------------------------------------- cd $ORACLE ...

  7. oracle BBED 直接改动数据库block块

    1.BBED配置 1)将相应文件放到$ORACLE_HOME/rdbms/mesg和$ORACLE_HOME/rdbms/lib中:     --将lib中bbedus.msb和bbedus.msg ...

  8. 10 oracle bbed恢复ora-600[4193][4194]的错误

    ORA ] 错误解析 ERROR: Format: ORA ] [a] [b] VERSIONS: versions 6.0 to 12.1 DESCRIPTION: A mismatch has b ...

  9. Linux 中 17 个 tar 命令实用示例

    Tar(Tape ARchive,磁带归档的缩写,LCTT 译注:最初设计用于将文件打包到磁带上,现在我们大都使用它来实现备份某个分区或者某些重要的目录)是类 Unix 系统中使用最广泛的命令,用于归 ...

随机推荐

  1. 从源码的角度分析ViewGruop的事件分发

    从源码的角度分析ViewGruop的事件分发. 首先我们来探讨一下,什么是ViewGroup?它和普通的View有什么区别? 顾名思义,ViewGroup就是一组View的集合,它包含很多的子View ...

  2. centos下卸载rpm包

    rpm -qa|grep sphinx rpm -e sphinx..... 安全地卸载 RPM卸载软件包,并不是简单地将原来安装的文件逐个删除,那样做的话,可能会出现这样或那样的问题.如,A软件包依 ...

  3. IOS 中frame与bounds的区别

    文章摘要:http://www.sendong.com/news1733.html bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系 ...

  4. 基本java类-In.java

    package com.algorithm.api; /************************************************************************ ...

  5. nginx 反向代理设置

    假设对本机80端口的访问为一台服务器,对本机8000端口的访问为另一台服务器,下面这样写一个nginx的反向代理配置,就可以实现所有请求都转移 server {listen 0.0.0.0:80;se ...

  6. Oracle数据库作业-1

    设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表 ...

  7. Differential Geometry之第一章欧式空间

    书籍:<微分几何>彭家贵 局部微分几何 第一章.欧式空间 1.1向量空间 (1)向量空间 a.向量空间是集合,集合中的元素需要定义加法和乘法运算.向量空间和n维数组空间R^n不是同一个概念 ...

  8. GetImage

    check路径是是否有效,网络访问地址.notfound查找不到,httpstatuscode枚举数较多,根据自己想要的设置就好了. public bool checkValid(string pat ...

  9. asp.net的简单分页程序

    *.apsx页面 1: <%@ Page Language="C#" Debug ="true" AutoEventWireup="true&q ...

  10. IIS Session问题解决

    Windows Server 2008 +IIS +ASP.net +SQLServer2008搭建的内部WEB系统. 发现用户Session总是不知不觉就自行遗失,原因就是 IIS的不稳定性将导致S ...