BBED模拟数据块不一致
来源:互联网 发布:java httpclient 保持 编辑:程序博客网 时间:2024/05/29 15:28
模拟数据块不一致
本节中将利用BBED(Block Browser and Editor)这个工具直接修改数据块内容,从而模拟数据块的不一致。这个工具是Oracle自带的一个工具,它可以编辑Oracle数据块的内容,因此虽然功能很强大,但是也比较危险。这个工具只供Oracle Internal使用,Oracle不提供任何文档。目前网上可见的最好文档是由Graham Thornton编写的。
再次强调一下,这个工具虽然功能强大,但也是一个很危险的工具。所以,以下操作练习一定要在测试库进行。
(1)编译BBED:
- [oracle@dbs ~]$ cd $ORACLE_HOME/rdbms/lib
- [oracle@dbs ~]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
确认在目录下产生了BBED二进制文件:
- [oracle@dbs ~]$ ll bbed
- rwxr-xr-x 1 oracle dba 544001 6月 24 09:35 bbed
(2)感受BBED。BBED是个交互式工具,使用时需要提供密码,这个密码并不是数据库密码,缺省密码是blockedit。
- [oracle@dbs lib]$ ./bbed
- Password: blockedit
- BBED: Release 2.0.0.0.0 - Limited Productionon Tue Apr 29 08:44:28 2008
- Copyright (c) 1982, 2005, Oracle. All rights reserved.
- ************* !!! For Oracle Internal Use only !!! ***************
- BBED> help
(3)创建测试表test,插入两条测试数据:
- SQL> create table test (id number,name varchar2(100));
- SQL> insert into test values(10,'zhang');
- SQL> insert into test values (20,'xiao');
- SQL> commit;
(4)根据记录的ROWID确认记录所在的数据文件、数据块,这要用到dbms_rowid包:
- SQL>set serveroutput on
- SQL>DECLARE
- ridtyp NUMBER;
- objnum NUMBER;
- relfno NUMBER;
- blno NUMBER;
- rowno NUMBER;
- rid ROWID;
- BEGIN
- SELECT rowid
- INTO rid
- FROM test where id=10;
- dbms_rowid.rowid_info(rid,ridtyp,objnum,relfno,blno,rowno,'SMALLFILE');
- dbms_output.put_line('Row Typ-' || TO_CHAR(ridtyp));
- dbms_output.put_line('Obj No-' || TO_CHAR(objnum));
- dbms_output.put_line('RFNO-' || TO_CHAR(relfno));
- dbms_output.put_line('Block No-' || TO_CHAR(blno));
- dbms_output.put_line('Row No-' || TO_CHAR(rowno));
- END;
- /
脚本输出如下,提示刚才创建的测试数据在数据文件1的28618号数据块上:
- Row Typ-1
- Obj No-10235
- RFNO-1
- Block No- 28618
- Row No-0
(5)使用BBED工具编辑这个数据块。准备BBED的参数文件:
- [oracle@dbs bbed]cat bbed.par
- blocksize=8192
- listlistfile=list
- mode=edit
- [oracle@dbs bbed]$ bbed parfile=bbed.par
- Password: blockedit
输入密码,缺省是blockedit,密码通过后,进入BBED交互式环境。
- BBED: Release 2.0.0.0.0 - Limited Productionon Tue Apr 29 10:24:39 2008
- Copyright (c) 1982, 2005, Oracle. All rights reserved.
- ************* !!! For OracleInternal Use only !!! ***************
使用set命令定位到想要修改的数据块:
- BBED> set dba 1,28618
- DBA 0x00406fca (4222922 1,28618)
可以先查看一下,确定这个数据块确实包含该记录:
- BED> find /c zhang --确认这个记录在这个数据块中。
- File: /backup/test/test/system01.dbf (1)
- Block: 28618 Offsets:8183 to 8191 Dba:0x00406fca
- -------------------------------------------------------
- 7a68616e 67010642 a3
- <32 bytes per line>
上面输出提示记录相对数据块头的偏移量是8183。
使用dump命令打印出8183开始的内容,输出内容中确实是zhang:
- BBED> dump /v dba 1,28618 offset 8183 count 32
- File: /backup/test/test/system01.dbf (1)
- Block: 28618 Offsets: 8183 to 8191 Dba:0x00406fca
- --------------------------------------------
- 7a68616e 67010642 a3 l zhang..B.
- <16 bytes per line>
使用modify命令修改内容,这里的目的是破坏原来数据内容,所以修改成什么内容并不重要。
- BBED> modify 100 dba 1,28618
- Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
- File: /backup/test/test/system01.dbf (1)
- Block: 28618 Offsets: 0 to 511 Dba:0x00406fca
- ---------------------------------------------------------
- 64a20000 ca6f4000 42a30200 00000106 09340000 01000000 fb270000 3ca30200
- 00000000 02000300 00000000 01000e00 52000000 7b3b8000 18000500 01200000
- ……
最后退出BBED环境。
- BBED> exit
(6)先使用DBV检查数据文件,检查结果显示有一个损坏的数据块:
- [oracle@dbs bbed]$ dbv file=/backup/test/test/system01.dbf
- DBVERIFY: Release 10.2.0.1.0 - Production on Tue Apr 29 10:37:41 2008
- Copyright (c) 1982, 2005, Oracle. All rights reserved.
- DBVERIFY - Verification starting : FILE =/backup/test/test/system01.dbf
- Page 28618 is marked corrupt
- Corrupt block relative dba: 0x00406fca (file 1, block 28618)
- Bad check value found during dbv:
- Data in bad block:
- type: 6 format: 2 rdba: 0x00406fca
- last change scn: 0x0000.0002a341 seq: 0x1 flg: 0x04
- spare1: 0x0 spare2: 0x0 spare3: 0x0
- consistency value in tail: 0xa3410601
- check value in block header: 0x3675
- computed block checksum: 0x1e00
- DBVERIFY - Verification complete
- Total Pages Examined : 38400
- Total Pages Processed (Data) : 11263
- Total Pages Failing (Data) : 0
- Total Pages Processed (Index): 3243
- Total Pages Failing (Index): 0
- Total Pages Processed (Other): 1768
- Total Pages Processed (Seg) : 0
- Total Pages Failing (Seg) : 0
- Total Pages Empty : 22125
- Total Pages Marked Corrupt : 1
- Total Pages Influx : 0
- Highest block SCN : 173409 (0.173409)
(7)用RMAN工具检查数据文件:
- RMAN> backup check logical validate database;
- Starting backup at 29-APR-08
- using target database control file instead of recovery catalog
- allocated channel: ORA_DISK_1
- channel ORA_DISK_1: sid=143 devtype=DISK
- channel ORA_DISK_1: starting datafile copy
- input datafile fno=00001 name=/backup/test/test/system01.dbf
- channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
- channel ORA_DISK_1: starting datafile copy
- input datafile fno=00002 name=/backup/test/test/undotbs01.dbf
- channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
- channel ORA_DISK_1: starting datafile copy
- input datafile fno=00003 name=/backup/test/test/sysaux01.dbf
- channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
- channel ORA_DISK_1: starting datafile copy
- input datafile fno=00004 name=/backup/test/test/users01.dbf
- channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
- Finished backup at 29-APR-08
- RMAN> exit
RMAN的检查结果需要从视图中查看:
- SQL> select FILE#,block#,blocks from v$database_block_corruption;
- FILE# BLOCK# BLOCKS
- ------ ------ -------
- 1 28618 1
(8)演示ORA-1578错误。现在如果对表test进行全表扫描,就会抛出ORA-1578错误,参数(file# 1,block# 28618)和上面RMAN检查结果一致。
- SQL> select * from test;
- select * from test
- *
- ERROR at line 1:
- ORA-01578: ORACLE data block corrupted (file # 1, block # 28618)
- ORA-01110: data file 1: '/backup/test/test/system01.dbf'
- BBED模拟数据块不一致
- BBED模拟表数据块的损坏
- bbed 解析数据块
- 问题12:如何利用oracle bbed 来模拟破坏数据块,并且用RMAN进行恢复?
- 2.Oracle BBED解析数据块——准备BBED
- Oracle之BBED之(二)-----BBED更改数据块
- Oracle BBED模拟坏块&验证坏块
- 9.Oracle BBED解析数据块——BBED基本案例一改变数据
- 3.Oracle BBED解析数据块——BBED基本使用一
- 4.Oracle BBED解析数据块——BBED基本使用二
- 5.Oracle BBED解析数据块——BBED基本使用三
- 6.Oracle BBED解析数据块——BBED基本使用四
- 7.Oracle BBED解析数据块——BBED基本使用五(FIND)
- 8.Oracle BBED解析数据块——BBED基本使用五
- oracle BBED---数据块浏览和编辑工具 详解
- 使用BBED帮助理解Oracle数据块结构
- 使用BBED帮助理解Oracle数据块结构
- bbed copy修复坏块和delete的数据
- 《权力》读书笔记,第9章 挫折也是一种财富
- 找中位数(用堆维持小的一半数,建立大根堆)
- 由jdveloper运行不起的解决办法 <Received exception while creating connection for pool "Connection1": ORA-01033:
- linux内核中的文件描述符(二)--socket和文件描述符
- 《权力》读书笔记,第12章 大胆地去竞逐权力吧
- BBED模拟数据块不一致
- 【转载】《敏捷软件测试:测试人员与敏捷团队的实践指南》一书思维图
- HDU 2795
- 混迹C++ 之构造器和析构器
- JavaScript专题——专题三 JavaScript 面向对象
- codeforces 219A
- 网络抓包工具抓取本地环回接口127.0.0.1的数据包
- H-JTAG提示错误及解决办法
- 分享python def和lambda的一点心得