文档章节

使用BBED模拟数据块损坏

郑加威
 郑加威
发布于 2017/02/16 13:18
字数 1337
阅读 14
收藏 0

有一个有趣的观点提到,如果这个工具被广泛传播,那么可能有些人不是用BBED来修复数据,意外的破坏可能更为多见。最终的后果可能是Oracle彻底把这个工具移除。

BBED是Block Browser/Editor的缩写,是Oracle的一个内部工具,不对外发布文档及支持。
BBED随软件发布,但是我们需要进行简单的relink才能使用,relink请参考:How to compile Oracle10g BBED tools.

虽然BBED工具的使用存在很多风险,但是如果利用得当,可以以之解决很多棘手的问题。
本文简单介绍一下如何用BBED模拟坏块,以练习坏块修复等技术,此前我曾经介绍过另外一种方法,请参考:Oracle中模拟及修复数据块损坏

1.创建测试表

[oracle@jumper conner]$ sqlplus "/ as sysdba"

SQL*Plus: Release 9.2.0.4.0 - Production on Sun Sep 11 19:59:27 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production

SQL> create table bbed tablespace users as select * from dba_tables;

Table created.

SQL> select count(*) from bbed;

  COUNT(*)
----------
       523

SQL> col segment_name for a10
SQL> select segment_name,file_id,block_id from dba_extents where segment_name='BBED';

SEGMENT_NA    FILE_ID   BLOCK_ID
---------- ---------- ----------
BBED                3          9
BBED                3         17
BBED                3         25

SQL> select count(*) from bbed;

  COUNT(*)
----------
       523

2.创建BBED参数文件等

[oracle@jumper conner]$ more filelist.txt 
         1 /opt/oracle/oradata/conner/system01.dbf   440401920
         2 /opt/oracle/oradata/conner/undotbs01.dbf  104857600
         3 /opt/oracle/oradata/conner/users01.dbf     27262976
[oracle@jumper conner]$ more par.bbd 
blocksize=8192
listfile=filelist.txt
mode=edit

3.使用BBED

[oracle@jumper conner]$ bbed parfile=par.bbd 
Password: 

BBED: Release 2.0.0.0.0 - Limited Production on Sun Sep 11 20:01:01 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

************* !!! For Oracle Internal Use only !!! ***************

BBED> set file 3
        FILE#           3

BBED> show
        FILE#           3
        BLOCK#          1
        OFFSET          0
        DBA             0x00c00001 (12582913 3,1)
        FILENAME        /opt/oracle/oradata/conner/users01.dbf
        BIFILE          bifile.bbd
        LISTFILE        filelist.txt
        BLOCKSIZE       8192
        MODE            Edit
        EDIT            Unrecoverable
        IBASE           Dec
        OBASE           Dec
        WIDTH           80
        COUNT           512
        LOGFILE         log.bbd
        SPOOL           No

4.回滚误操作
如果操作中发生误操作,可以使用revert命令回滚。

BBED> modify /x 0x00c00011
 File: /opt/oracle/oradata/conner/users01.dbf (3)
 Block: 1                Offsets: 1000 to 1511           Dba:0x00c00001
------------------------------------------------------------------------
 00c00011 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 

 <32 bytes per line>

BBED> revert
All changes made in this session will be rolled back. Proceed? (Y/N) Y
Reverted file '/opt/oracle/oradata/conner/users01.dbf', block 1
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) Y

5.改写数据块
模拟坏块.

BBED> modify 1000 file 3 block 17
 File: /opt/oracle/oradata/conner/users01.dbf (3)
 Block: 17               Offsets: 1000 to 1511           Dba:0x00c00011
------------------------------------------------------------------------
 03e80000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 
 00000000 00000000 002c002f 03535953 18415050 4c59245f 434f4e46 5f48444c 
 525f434f 4c554d4e 53065359 5354454d ffff02c1 0b02c129 02c10203 c2033804 
 c3073825 ff02c102 06c51630 31252eff 02c10202 c1020359 4553014e ffffffff 
 ffffffff 0a202020 20202020 2020310a 20202020 20202020 20310520 2020204e 
 07454e41 424c4544 ffff024e 4fff014e 014e024e 4f074445 4641554c 54084449 
 5341424c 4544024e 4f024e4f ff084449 5341424c 4544024e 4fff0844 49534142 
 4c454408 44495341 424c4544 2c002f03 53595314 4150504c 59245f45 52524f52 
 5f48414e 444c4552 06535953 54454dff ff02c10b 02c12902 c10203c2 033804c3 
 073825ff 02c10206 c5163031 252eff02 c10202c1 02035945 53014eff ffffffff 
 ffffff0a 20202020 20202020 20310a20 20202020 20202020 31052020 20204e07 
 454e4142 4c4544ff ff024e4f ff014e01 4e024e4f 07444546 41554c54 08444953 
 41424c45 44024e4f 024e4fff 08444953 41424c45 44024e4f ff084449 5341424c 
 45440844 49534142 4c45442c 002f0353 59530c41 50504c59 245f4552 524f5206 

 <32 bytes per line>

6.检查数据块损坏
使用verify命令,可以发现刚才修改的file 3 block 17已经被标记为损坏。

BBED> verify
DBVERIFY - Verification starting
FILE = /opt/oracle/oradata/conner/users01.dbf
BLOCK = 17

Block 17 is corrupt
***
Corrupt block relative dba: 0x00c00011 (file 0, block 17)
Bad check value found during verification
Data in bad block -
 type: 6 format: 2 rdba: 0x00c00011
 last change scn: 0x0000.20a3b575 seq: 0x1 flg: 0x04
 consistency value in tail: 0xb5750601
 check value in block header: 0x3006, computed block checksum: 0xe803
 spare1: 0x0, spare2: 0x0, spare3: 0x0
***


DBVERIFY - Verification complete

Total Blocks Examined         : 1
Total Blocks Processed (Data) : 0
Total Blocks Failing   (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing   (Index): 0
Total Blocks Empty            : 0
Total Blocks Marked Corrupt   : 1
Total Blocks Influx           : 0

BBED> quit

7.使用DBV检查

[oracle@jumper conner]$ dbv file=users01.dbf blocksize=8192

DBVERIFY: Release 9.2.0.4.0 - Production on Sun Sep 11 20:13:23 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

DBVERIFY - Verification starting : FILE = users01.dbf
Page 17 is marked corrupt
***
Corrupt block relative dba: 0x00c00011 (file 3, block 17)
Bad check value found during dbv: 
Data in bad block -
 type: 6 format: 2 rdba: 0x00c00011
 last change scn: 0x0000.20a3b575 seq: 0x1 flg: 0x04
 consistency value in tail: 0xb5750601
 check value in block header: 0x3006, computed block checksum: 0xe803
 spare1: 0x0, spare2: 0x0, spare3: 0x0
***



DBVERIFY - Verification complete

Total Pages Examined         : 128
Total Pages Processed (Data) : 107
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 20
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 0
Total Pages Marked Corrupt   : 1
Total Pages Influx           : 0

8.全表扫描此时出现ORA-01578错误
重新启动数据库以后,执行全表扫描,此时错误出现:

SQL> startup force;
ORACLE instance started.

Total System Global Area  101782828 bytes
Fixed Size                   451884 bytes
Variable Size              37748736 bytes
Database Buffers           62914560 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
SQL> select count(*) from bbed;
select count(*) from bbed
                     *
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 3, block # 17)
ORA-01110: data file 3: '/opt/oracle/oradata/conner/users01.dbf'


SQL> 

以上方法仅供测试使用。

- END -

© 著作权归作者所有

郑加威
粉丝 175
博文 183
码字总数 387300
作品 0
杭州
架构师
私信 提问
如何使用BBED修复损坏的BLOCK

前面我已经介绍了如何使用BBED模拟坏块,本文简要介绍如何使用BBED修复损坏的BLOCK。 1.备份数据文件 要想恢复损坏的文件,需要存在一个良好文件,本文简单冷备份一下文件. 2.修改BBED参数文...

郑加威
2017/02/16
14
0
【BBED】BBED模拟并修复ORA-08102错误

【BBED】BBED模拟并修复ORA-08102错误 1.1 BLOG文档结构图 1.2 前言部分 1.2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~...

小麦苗best
2018/06/29
0
0
Oracle坏块问题处理

曾经遇到过ORA-8103,01578的坏块错误记录下方法 首先,制造坏块 修改Checksum的值 导出第31个块(算上os header block,物理上是32个块)来把它的变成坏块,使用dd考出data block 【更多关于...

长平狐
2012/08/22
121
0
数据块Checksum值为0的情况

看到崔华的【怎样在windows上用DD配合ultraEdit修改数据】文章后进行试验时我发现了这个Checksum值为0的情况。这里是我的记录。我们都知道data block的offset位置是16-17是Checksum Value,它...

长平狐
2012/08/22
135
0
ORACLE 如何检查找出损坏索引 ( Corrupt Indexes )

原文出处:潇湘隐者 在Oracle数据库中如何找出损坏索引呢? 下面我们人为构造一个案例,将索引块损坏。如下案例所示: SQL> create tablespace test_data2 datafile '/u01/app/oracle/oradat...

潇湘隐者
2018/09/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Rust:最小化窗口后 CPU占用率高 (winit,glutin,imgui-rust)

最近试着用 imgui-rust 绘制界面,发现窗口最小化后CPU占用会增大。 查询的资料如下: https://github.com/rust-windowing/winit/issues/783 https://github.com/ocornut/imgui/issues/1151 ...

reter
30分钟前
10
0
cloud-zuul路由网关

九、zuul路由网关 概述 1.1 能干嘛 路由、过滤 路由基本配置 路由访问映射规则 十、springCloud config分布式配置中心

榴莲黑芝麻糊
30分钟前
14
0
Circuit Breaker模式

Circuit Breaker模式会处理一些需要一定时间来重连远程服务和远端资源的错误。该模式可以提高一个应用的稳定性和弹性。 问题 在类似于云的分布式环境中,当一个应用需要执行一些访问远程资源...

mskk
43分钟前
16
0
写论文之前的准备都有哪些?干货来了!

原文链接:https://www.lwfdy.com/archives/144.html 之前跟大家谈了许多有关于初稿修改以及写作事项需要注意的问题,那么今天我们来说一说,在写之前,我们需要做哪些准备呢,为了做到下笔如...

辅导员
49分钟前
11
0
idea快捷键

Alt + Enter 引入类 Ctrl + O 查看我们继承的类或者接口中的方法,以及我们要实现的方法 Ctrl + Alt + b 查看接口实现类中方法(就是我们使用接口编程时,在调用实现类方法处直接Ctrl+鼠标左...

行者终成事
57分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部