问题12:如何利用oracle bbed 来模拟破坏数据块,并且用RMAN进行恢复?
来源:互联网 发布:在线支付php源码 编辑:程序博客网 时间:2024/05/22 17:20
目的:利用oracle的内部工具bbed来破坏数据块
【说明】
由于linux下利用vi编辑器破坏数据块不总是很有效,用UE(ultraedit)远程ftp破坏数据块又很麻烦,利用一款oracle内部的数据库工具BBED(Block Browser and Edit),修改起来精确无误。
步骤如下:
1. BBED 的安装
进入到 $ORACLE_HOME/rdbms/lib目录下,执行下面的命令:
复制代码2.确认在该目录下,是否生成了bbed文件:
复制代码3.在lib目录下,创建一个后缀名为.par的参数文件,在应用BBED工具时,一般会用到这个参数复制代码【说明】
1).par的参数文件名字可以随便取的
2)文件内容中的listfile后面指定的文件名字、文件的位置也是随便的指定的
4.进入到sqlplus,执行一个如下的查询操作:
复制代码将以下的内容加入到listfile后面指定的文件中即/u01/oradata/radius/fileunix_gbminer.log
复制代码5.创建测试表进行测试(在测试之前用RMAN对数据库进行备份或者说对操作的表空间的数据文件进行备份)
1)创建一张表
复制代码2)向表中插入数据并提交
复制代码3)对表进行分析,并且查看test表所占用的块的个数及每个块中包含的记录的个数
复制代码分析test表,查询到test表占用了5个数据库块,1 2 3三行记录在第406块内,4 5 6 三行记录在第407块内,基本上是一个块存有三行记录
查看test表的头块:
复制代码test表的头块是403
4)登陆BBED
复制代码【说明】
密码是:blockedit
5)通过set 命令指定数据块
复制代码set dba 4,407 这里的4指的是4号文件,就是user01.dbf文件,407指的是包含4 5 6三行数据的数据块
使用find命令查看记录的偏移量
复制代码这里的偏移量指的是块里面的字节号,一个块有8192个字节,就有8192个偏移量
【说明】
发现偏移量是2170 到2681 就是从第2170字节开始到2681字节
可以在BBED中dump这些字节,看一下内容:
复制代码dump了从2170字节之后的64个字节,发现zhang 6 是第4行数据
因为上面显示的是16进制的,所以两位数代表一个字节,7a就是第2170字节,68就是第2171个字节,以此类推。20代表空格的意思。
因为:
之后全是空格,因为char类型的是用空格填满列定义的字节数。
用find命令,查找下一个包含zhang的信息
复制代码这是第五行数据
我们知道这个块的块头是 第 403块,可以dump一下:
复制代码破坏这个块即对这个块进行修改:
复制代码破坏成功,切换到OS即操作系统利用DBV工具,查看受损的数据块
复制代码通过返回的结果可以知道:4号文件的第403个数据块损坏
Corrupt block relative dba: 0x01000193 (file 4, block 403)
切换到RMAN进行该数据块的恢复:
复制代码再用DBV工具检查下数据文件:
复制代码【说明】
RMAN恢复损坏的数据块成功!
--END--
【说明】
由于linux下利用vi编辑器破坏数据块不总是很有效,用UE(ultraedit)远程ftp破坏数据块又很麻烦,利用一款oracle内部的数据库工具BBED(Block Browser and Edit),修改起来精确无误。
步骤如下:
1. BBED 的安装
进入到 $ORACLE_HOME/rdbms/lib目录下,执行下面的命令:
- [oracle@10gr2 lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
- Linking BBED utility (bbed)
- rm -f /u01/app/oracle/product/10.2.0/db_1/rdbms/lib/bbed
- gcc -o /u01/app/oracle/product/10.2.0/db_1/rdbms/lib/bbed -L/u01/app/oracle/product/10.2.0/db_1/rdbms/lib/ -L/u01/app/oracle/product/10.2.0/db_1/lib/ -L/u01/app/oracle/product/10.2.0/db_1/lib/stubs/ /u01/app/oracle/product/10.2.0/db_1/lib/s0main.o /u01/app/oracle/product/10.2.0/db_1/rdbms/lib/ssbbded.o /u01/app/oracle/product/10.2.0/db_1/rdbms/lib/sbbdpt.o `cat /u01/app/oracle/product/10.2.0/db_1/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 /u01/app/oracle/product/10.2.0/db_1/rdbms/lib/defopt.o -ldbtools10 -lclntsh `cat /u01/app/oracle/product/10.2.0/db_1/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lnro10 `cat /u01/app/oracle/product/10.2.0/db_1/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lclient10 -lnnetd10 -lvsn10 -lcommon10 -lgeneric10 -lmm -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10 `cat /u01/app/oracle/product/10.2.0/db_1/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lnro10 `cat /u01/app/oracle/product/10.2.0/db_1/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lclient10 -lnnetd10 -lvsn10 -lcommon10 -lgeneric10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10 -lclient10 -lnnetd10 -lvsn10 -lcommon10 -lgeneric10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lcore10 -lsnls10 -lnls10 -lxml10 -lcore10 -lunls10 -lsnls10 -lnls10 -lcore10 -lnls10 `cat /u01/app/oracle/product/10.2.0/db_1/lib/sysliblist` -Wl,-rpath,/u01/app/oracle/product/10.2.0/db_1/lib -lm `cat /u01/app/oracle/product/10.2.0/db_1/lib/sysliblist` -ldl -lm -L/u01/app/oracle/product/10.2.0/db_1/lib
- [oracle@10gr2 lib]$ pwd
- /u01/app/oracle/product/10.2.0/db_1/rdbms/lib
- [oracle@10gr2 lib]$
- [oracle@10gr2 lib]$ ls -l bbed
- -rwxr-xr-x 1 oracle oinstall 548768 Sep 3 15:20 bbed
- [oracle@10gr2 lib]$ cat bbed_gbminer.par
- blocksize=8192
- listfile=/u01/oradata/radius/fileunix_gbminer.log
- mode=edit
1).par的参数文件名字可以随便取的
2)文件内容中的listfile后面指定的文件名字、文件的位置也是随便的指定的
4.进入到sqlplus,执行一个如下的查询操作:
- SQL> select file#||' '||name||' '||bytes as "Parameter"from v$datafile;
- Parameter
- ------------------------------------------------
- 1 /u01/oradata/radius/system01.dbf 503316480
- 2 /u01/oradata/radius/undotbs01.dbf 26214400
- 3 /u01/oradata/radius/sysaux01.dbf 251658240
- 4 /u01/oradata/radius/users01.dbf 5242880
- 5 /u01/oradata/radius/example01.dbf 104857600
- [oracle@10gr2 radius]$ cat fileunix_gbminer.log
- 1 /u01/oradata/radius/system01.dbf 503316480
- 2 /u01/oradata/radius/undotbs01.dbf 26214400
- 3 /u01/oradata/radius/sysaux01.dbf 251658240
- 4 /u01/oradata/radius/users01.dbf 5242880
- 5 /u01/oradata/radius/example01.dbf 104857600
1)创建一张表
- <p>SQL> create table test(id number,name char(2000)) tablespace users;</p><p>Table created.</p>
- SQL> insert into test values(1,'zhang 1');
- 1 row created.
- SQL> insert into test values(2,'zhang 2');
- 1 row created.
- SQL> insert into test values(3,'zhang 3');
- 1 row created.
- SQL> insert into test values(4,'zhang 4');
- 1 row created.
- SQL> insert into test values(5,'zhang 5');
- 1 row created.
- SQL> insert into test values(6,'zhang 6');
- 1 row created.
- SQL> insert into test values(7,'zhang 7');
- 1 row created.
- SQL> insert into test values(8,'zhang 8');
- 1 row created.
- SQL> insert into test values(9,'zhang 9');
- 1 row created.
- SQL> insert into test values(10,'zhang 10');
- 1 row created.
- SQL> commit;
- Commit complete.
- SQL> analyze table test compute statistics;
- Table analyzed.
- SQL> select blocks from user_tables where table_name = 'TEST';
- BLOCKS
- ----------
- 5
- SQL> select dbms_rowid.rowid_relative_fno(rowid) R_FNO,dbms_rowid.rowid_block_number(rowid) b_no,id from test order by 1,2;
- R_FNO B_NO ID
- ---------- ---------- ----------
- 4 404 10
- 4 406 1
- 4 406 2
- 4 406 3
- 4 407 4
- 4 407 6
- 4 407 5
- 4 408 8
- 4 408 7
- 4 408 9
- 10 rows selected.
查看test表的头块:
- SQL> select segment_name,header_block from dba_segments where segmenT_name = 'TEST';
- SEGMENT_NAME HEADER_BLOCK
- -------------------- ------------
- TEST 403
4)登陆BBED
- [oracle@10gr2 lib]$ ./bbed parfile=bbed_gbminer.par
- Password:
- BBED: Release 2.0.0.0.0 - Limited Production on Wed Sep 3 17:41:26 2014
- Copyright (c) 1982, 2007, Oracle. All rights reserved.
- ************* !!! For Oracle Internal Use only !!! ***************
- BBED>
密码是:blockedit
5)通过set 命令指定数据块
- BBED> set dba 4,407
- DBA 0x01000197 (16777623 4,407)
- BBED> show
- FILE# 4
- BLOCK# 407
- OFFSET 0
- DBA 0x01000197 (16777623 4,407)
- FILENAME /u01/oradata/radius/users01.dbf
- BIFILE bifile.bbd
- LISTFILE /u01/oradata/radius/fileunix_gbminer.log
- BLOCKSIZE 8192
- MODE Edit
- EDIT Unrecoverable
- IBASE Dec
- OBASE Dec
- WIDTH 80
- COUNT 512
- LOGFILE log.bbd
- SPOOL No
使用find命令查看记录的偏移量
- BBED> find /c zhang
- File: /u01/oradata/radius/users01.dbf (4)
- Block: 407 Offsets: 2170 to 2681 Dba:0x01000197
- ------------------------------------------------------------------------
- 7a68616e 67203620 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- <32 bytes per line>
【说明】
发现偏移量是2170 到2681 就是从第2170字节开始到2681字节
可以在BBED中dump这些字节,看一下内容:
- BBED> dump /v dba 4,407 offset 2170 count 64
- File: /u01/oradata/radius/users01.dbf (4)
- Block: 407 Offsets: 2170 to 2233 Dba:0x01000197
- -------------------------------------------------------
- 7a68616e 67203620 20202020 20202020 l zhang 6
- 20202020 20202020 20202020 20202020 l
- 20202020 20202020 20202020 20202020 l
- 20202020 20202020 20202020 20202020 l
- <16 bytes per line>
因为上面显示的是16进制的,所以两位数代表一个字节,7a就是第2170字节,68就是第2171个字节,以此类推。20代表空格的意思。
因为:
7a 68 616e 67 20 36
Z h a n g 6之后全是空格,因为char类型的是用空格填满列定义的字节数。
用find命令,查找下一个包含zhang的信息
- BBED> find
- File: /u01/oradata/radius/users01.dbf (4)
- Block: 407 Offsets: 4179 to 4242 Dba:0x01000197
- ------------------------------------------------------------------------
- 7a68616e 67203520 20202020 20202020 20202020 20202020 20202020 20202020
- 20202020 20202020 20202020 20202020 20202020 20202020 20202020 20202020
- <32 bytes per line>
- BBED> dump /v dba 4,407 offset 4179 count 64
- File: /u01/oradata/radius/users01.dbf (4)
- Block: 407 Offsets: 4179 to 4242 Dba:0x01000197
- -------------------------------------------------------
- 7a68616e 67203520 20202020 20202020 l zhang 5
- 20202020 20202020 20202020 20202020 l
- 20202020 20202020 20202020 20202020 l
- 20202020 20202020 20202020 20202020 l
- <16 bytes per line>
我们知道这个块的块头是 第 403块,可以dump一下:
- BBED> set dba 4,403
- DBA 0x01000193 (16777619 4,403)
- BBED> show
- FILE# 4
- BLOCK# 403
- OFFSET 6188
- DBA 0x01000193 (16777619 4,403)
- FILENAME /u01/oradata/radius/users01.dbf
- BIFILE bifile.bbd
- LISTFILE /u01/oradata/radius/fileunix_gbminer.log
- BLOCKSIZE 8192
- MODE Edit
- EDIT Unrecoverable
- IBASE Dec
- OBASE Dec
- WIDTH 80
- COUNT 64
- LOGFILE log.bbd
- SPOOL No
- BBED> dump /v dba 4,403 offset 1 count 64
- File: /u01/oradata/radius/users01.dbf (4)
- Block: 403 Offsets: 1 to 64 Dba:0x01000193
- -------------------------------------------------------
- a2000093 01000176 cb090000 00020447 l ?.....v?.....G
- 65000000 00000000 00000000 00000000 l e...............
- 00000001 00000008 0000009c 0a000000 l ................
- 00000008 00000008 00000099 01000100 l ................
- <16 bytes per line>
- <p>BBED> modify /c 12345 dba 4,403 offset 1;
- Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
- File: /u01/oradata/radius/users01.dbf (4)
- Block: 403 Offsets: 1 to 64 Dba:0x01000193
- ------------------------------------------------------------------------
- 31323334 35000176 cb090000 00020447 65000000 00000000 00000000 00000000
- 00000001 00000008 0000009c 0a000000 00000008 00000008 00000099 01000100
- <32 bytes per line></p><p>BBED> dump /v dba 4,403 offset 1 count 64
- File: /u01/oradata/radius/users01.dbf (4)
- Block: 403 Offsets: 1 to 64 Dba:0x01000193
- -------------------------------------------------------
- 31323334 35000176 cb090000 00020447 l 12345..v?.....G
- 65000000 00000000 00000000 00000000 l e...............
- 00000001 00000008 0000009c 0a000000 l ................
- 00000008 00000008 00000099 01000100 l ................</p><p> <16 bytes per line></p>
- [oracle@10gr2 radius]$ dbv file=users01.dbf blocksize=8192
- DBVERIFY: Release 10.2.0.4.0 - Production on Wed Sep 3 18:32:20 2014
- Copyright (c) 1982, 2007, Oracle. All rights reserved.
- DBVERIFY - Verification starting : FILE = users01.dbf
- Page 403 is marked corrupt
- Corrupt block relative dba: 0x01000193 (file 4, block 403)
- Bad header found during dbv:
- Data in bad block:
- type: 35 format: 1 rdba: 0x01003534
- last change scn: 0x0000.0009cb76 seq: 0x2 flg: 0x04
- spare1: 0x32 spare2: 0x33 spare3: 0x0
- consistency value in tail: 0xcb762302
- check value in block header: 0x6547
- computed block checksum: 0x9495
- DBVERIFY - Verification complete
- Total Pages Examined : 640
- Total Pages Processed (Data) : 58
- Total Pages Failing (Data) : 0
- Total Pages Processed (Index): 63
- Total Pages Failing (Index): 0
- Total Pages Processed (Other): 494
- Total Pages Processed (Seg) : 0
- Total Pages Failing (Seg) : 0
- Total Pages Empty : 24
- Total Pages Marked Corrupt : 1
- Total Pages Influx : 0
- Highest block SCN : 641927 (0.641927)
Corrupt block relative dba: 0x01000193 (file 4, block 403)
切换到RMAN进行该数据块的恢复:
- RMAN> blockrecover datafile 4 block 403;
- Starting blockrecover at 03-SEP-14
- using target database control file instead of recovery catalog
- allocated channel: ORA_DISK_1
- channel ORA_DISK_1: sid=142 devtype=DISK
- channel ORA_DISK_1: restoring block(s)
- channel ORA_DISK_1: specifying block(s) to restore from backup set
- restoring blocks of datafile 00004
- channel ORA_DISK_1: reading from backup piece /u01/backup/backup_full/full_RADIUS_20140903_1_1
- channel ORA_DISK_1: restored block(s) from backup piece 1
- piece handle=/u01/backup/backup_full/full_RADIUS_20140903_1_1 tag=TAG20140903T151235
- channel ORA_DISK_1: block restore complete, elapsed time: 00:00:01
- starting media recovery
- media recovery complete, elapsed time: 00:00:03
- Finished blockrecover at 03-SEP-14
- [oracle@10gr2 radius]$ dbv file=users01.dbf blocksize=8192
- DBVERIFY: Release 10.2.0.4.0 - Production on Wed Sep 3 18:35:46 2014
- Copyright (c) 1982, 2007, Oracle. All rights reserved.
- DBVERIFY - Verification starting : FILE = users01.dbf
- DBVERIFY - Verification complete
- Total Pages Examined : 640
- Total Pages Processed (Data) : 58
- Total Pages Failing (Data) : 0
- Total Pages Processed (Index): 63
- Total Pages Failing (Index): 0
- Total Pages Processed (Other): 495
- Total Pages Processed (Seg) : 0
- Total Pages Failing (Seg) : 0
- Total Pages Empty : 24
- Total Pages Marked Corrupt : 0
- Total Pages Influx : 0
- Highest block SCN : 641927 (0.641927)
RMAN恢复损坏的数据块成功!
--END--
0 0
- 问题12:如何利用oracle bbed 来模拟破坏数据块,并且用RMAN进行恢复?
- Oracle 之利用BBED修改数据块SCN----极端环境下的数据恢复(一)
- Oracle 之利用BBED修改数据块SCN----没有备份数据文件的数据恢复
- BBED模拟数据块不一致
- ORACLE模拟一个数据文件坏块并使用RMAN备份来恢复
- 非常规数据恢复的几种场景(利用bbed恢复坏块数据)
- 利用RMAN备份恢复ORACLE数据
- BBED模拟表数据块的损坏
- 用BBED理解和修改Oracle数据块
- Oracle RMAN 坏块恢复
- OCP考题解析_043:rman系列之 BBED破坏,BlockRecover恢复的案例演示
- 2.Oracle BBED解析数据块——准备BBED
- Oracle之BBED之(二)-----BBED更改数据块
- Oracle BBED模拟坏块&验证坏块
- 利用 RMAN 进行异机全恢复
- 【Oracle】使用bbed恢复delete的数据
- 【Oracle】使用bbed恢复update的数据
- 如何利用EasyRecovery工具进行数据恢复
- 一些电子相关的网站
- XSS Funny Vector Review
- App.Config详解及读写操作
- 常见正则表达式
- CXF学习-WSDL文档深入了解
- 问题12:如何利用oracle bbed 来模拟破坏数据块,并且用RMAN进行恢复?
- hdu 5023 线段树延迟更新+状态压缩
- 最舒服的十种颜色
- php ci框架之controller
- Windows任务栏空白图标的解决方案
- 仿函数
- 2014 ACM/ICPC Asia Regional Guangzhou Online
- Web server echo benchmark
- Java之集合类应用总结