使用BBED模拟Oracle数据库坏块
BBED(OracleBlockBrowerandEDitor Tool),用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。该工具不受Oracle支持,所以默认是没有生成可执行文件的,在使用前需要重新连接。
1.安装BBED
[oracle@std lib]$ pwd
/u02/app/product/10.2./db_1/rdbms/lib
[oracle@std lib]$ make-f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
-bash: make-f: command not found
[oracle@std lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed Linking BBED utility (bbed)
rm -f /u02/app/product/10.2./db_1/rdbms/lib/bbed
gcc -o /u02/app/product/10.2./db_1/rdbms/lib/bbed -L/u02/app/product/10.2./db_1/rdbms/lib/ -L/u02/app/product/10.2./db_1/lib/ -L/u02/app/product/10.2./db_1/lib/stubs/ -L/usr/lib -lirc /u02/app/product/10.2./db_1/lib/s0main.o /u02/app/product/10.2./db_1/rdbms/lib/ssbbded.o /u02/app/product/10.2./db_1/rdbms/lib/sbbdpt.o `cat /u02/app/product/10.2./db_1/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 /u02/app/product/10.2./db_1/rdbms/lib/defopt.o -ldbtools10 -lclntsh `cat /u02/app/product/10.2./db_1/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lnro10 `cat /u02/app/product/10.2./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 /u02/app/product/10.2./db_1/lib/ldflags` -lnsslb10 -lncrypt10 -lnsgr10 -lnzjs10 -ln10 -lnnz10 -lnl10 -lnro10 `cat /u02/app/product/10.2./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 /u02/app/product/10.2./db_1/lib/sysliblist` -Wl,-rpath,/u02/app/product/10.2./db_1/lib -lm `cat /u02/app/product/10.2./db_1/lib/sysliblist` -ldl -lm -L/u02/app/product/10.2./db_1/lib
[oracle@std lib]$ ll bbed
-rwxr-xr-x oracle oinstall Feb : bbed
[oracle@std lib]$ ./bbed
Password: --密码默认为blockedit BBED: Release 2.0.0.0. - Limited Production on Thu Feb :: Copyright (c) , , Oracle. All rights reserved. ************* !!! For Oracle Internal Use only !!! *************** BBED> info
File# Name Size(blks)
----- ---- ----------
OracleDatabase 11g中缺省的未提供BBED库文件,但是可以用10g的文件编译出来,需要先从10g中复制如下文件到相应目录,然后再执行上述连接命令。
$ORACLE_HOME/rdbms/lib/ssbbded.o
$ORACLE_HOME/rdbms/lib/sbbdpt.o
$ORACLE_HOME/rdbms/msg/bbedus.msb
2.使用参数文件连接BBED
--查询出当前库的数据文件并保存在文本文件中
SQL> select file#||' '||name||' '||bytes from v$datafile ; FILE#||''||NAME||''||BYTES
--------------------------------------------------------------------------------
/u02/app/oradata/PSDB/system01.dbf
/u02/app/oradata/PSDB/undotbs01.dbf
/u02/app/oradata/PSDB/sysaux01.dbf
/u02/app/oradata/PSDB/users01.dbf
/u02/app/oradata/PSDB/example01.dbf
/u02/app/oradata/PSDB/livan_tbs01.dbf rows selected.
--注意保存在文件里的文件号要与我们数据库查询出来的FILE#相同
[oracle@std lib]$ cat ~/psdb_file.txt
/u02/app/oradata/PSDB/system01.dbf
/u02/app/oradata/PSDB/undotbs01.dbf
/u02/app/oradata/PSDB/sysaux01.dbf
/u02/app/oradata/PSDB/users01.dbf
/u02/app/oradata/PSDB/example01.dbf
/u02/app/oradata/PSDB/livan_tbs01.dbf
--BBED使用参数文件登录
oracle@std lib]$ cat ~/bbed_parameter.txt
blocksize=
listfile=/home/oracle/psdb_file.txt
mode=edit
[oracle@std lib]$ ./bbed parfile=/home/oracle/bbed_parameter.txt
Password: BBED: Release 2.0.0.0. - Limited Production on Thu Feb :: Copyright (c) , , Oracle. All rights reserved. ************* !!! For Oracle Internal Use only !!! *************** BBED> info
File# Name Size(blks)
----- ---- ----------
/u02/app/oradata/PSDB/system01.dbf
/u02/app/oradata/PSDB/undotbs01.dbf
/u02/app/oradata/PSDB/sysaux01.dbf
/u02/app/oradata/PSDB/users01.dbf
/u02/app/oradata/PSDB/example01.dbf
/u02/app/oradata/PSDB/livan_tbs01.dbf BBED>
3.创建测试对象
[oracle@std lib]$ sqlplus livan/livan SQL*Plus: Release 10.2.0.4. - Production on Thu Feb :: Copyright (c) , , Oracle. All Rights Reserved. Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4. - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> create table test(id int,name varchar2()); Table created. SQL> insert into test values(,'beijing'); row created. SQL> insert into test values(,'shanghai'); row created. SQL> insert into test values(,'shandong'); row created. SQL> commit; Commit complete.
--查看测试对象的数据块分布
SQL> select
dbms_rowid.ROWID_RELATIVE_FNO(rowid) fno,
dbms_rowid.ROWID_BLOCK_NUMBER(rowid) bno,
dbms_rowid.ROWID_ROW_NUMBER(rowid) rowno,
name from test; FNO BNO ROWNO NAME
---------- ---------- ---------- ------------------------------
beijing
shanghai
shandong
4.使用BBED编辑数据块
[oracle@std lib]$ ./bbed parfile=/home/oracle/bbed_parameter.txt
Password: BBED: Release 2.0.0.0. - Limited Production on Thu Feb :: Copyright (c) , , Oracle. All rights reserved. ************* !!! For Oracle Internal Use only !!! *************** BBED> info
File# Name Size(blks)
----- ---- ----------
/u02/app/oradata/PSDB/system01.dbf
/u02/app/oradata/PSDB/undotbs01.dbf
/u02/app/oradata/PSDB/sysaux01.dbf
/u02/app/oradata/PSDB/users01.dbf
/u02/app/oradata/PSDB/example01.dbf
/u02/app/oradata/PSDB/livan_tbs01.dbf BBED> set dba ,
DBA 0x0180000c ( ,) BBED> dump /v dba , offset
File: /u02/app/oradata/PSDB/livan_tbs01.dbf ()
Block: Offsets: to Dba:0x0180000c
-------------------------------------------------------
06a20000 0c008001 60d40700 l .?.....`?.....
5c4d0000 c9ce0000 51d40700 l \M......晌..Q?.
05002c00 l .............,.
1c010000 b1058000 f1000500 l ....?..?... ..
60d40700 l `?.............
l ................
ffff1800 6c1f541f l ............l.T.
541f0000 03008a1f 7b1f6c1f l T.......{.l..... < bytes per line> BBED> modify /x dba , offset
File: /u02/app/oradata/PSDB/livan_tbs01.dbf ()
Block: Offsets: to Dba:0x0180000c
------------------------------------------------------------------------
0c008001 60d40700 5c4d0000 c9ce0000 51d40700
05002c00 1c010000 b1058000 f1000500
60d40700
ffff1800 6c1f541f 541f0000 03008a1f 7b1f6c1f < bytes per line> BBED> sum dba , apply
Check value for File , Block :
current = 0xa31e, required = 0xa31e
5.登录SQLPLUS验证表
[oracle@std lib]$ sqlplus '/as sysdba' SQL*Plus: Release 10.2.0.4. - Production on Thu Feb :: Copyright (c) , , Oracle. All Rights Reserved. Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4. - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> conn livan/livan
Connected.
SQL> select * from test; ID NAME
---------- ------------------------------
beijing
shanghai
shandong SQL> conn /as sysdba
Connected.
SQL> alter system flush buffer_cache; System altered. SQL> conn livan/livan
Connected.
SQL> select * from test;
select * from test
*
ERROR at line :
ORA-: ORACLE data block corrupted (file # , block # )
ORA-: data file : '/u02/app/oradata/PSDB/livan_tbs01.dbf'
6.使用DBV工具检查数据坏块
[oracle@std lib]$ dbv file=/u02/app/oradata/PSDB/livan_tbs01.dbf DBVERIFY: Release 10.2.0.4. - Production on Thu Feb :: Copyright (c) , , Oracle. All rights reserved. DBVERIFY - Verification starting : FILE = /u02/app/oradata/PSDB/livan_tbs01.dbf
Page is marked corrupt
Corrupt block relative dba: 0x0180000c (file , block )
Bad check value found during dbv:
Data in bad block:
type: format: rdba: 0x0180000c
last change scn: 0x0000.0007d460 seq: 0x5 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xd4600605
check value in block header: 0x4d5c
computed block checksum: 0x1607 DBVERIFY - Verification complete Total Pages Examined :
Total Pages Processed (Data) :
Total Pages Failing (Data) :
Total Pages Processed (Index):
Total Pages Failing (Index):
Total Pages Processed (Other):
Total Pages Processed (Seg) :
Total Pages Failing (Seg) :
Total Pages Empty :
Total Pages Marked Corrupt : --发现坏块
Total Pages Influx :
Highest block SCN : (0.513120)
7.使用rman工具检查数据文件验证坏块
[oracle@std lib]$ rman target / Recovery Manager: Release 10.2.0.4. - Production on Thu Feb :: Copyright (c) , , Oracle. All rights reserved. connected to target database: PSDB (DBID=) RMAN> backup check logical validate database; Starting backup at -FEB-
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid= devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno= name=/u02/app/oradata/PSDB/system01.dbf
input datafile fno= name=/u02/app/oradata/PSDB/livan_tbs01.dbf
input datafile fno= name=/u02/app/oradata/PSDB/sysaux01.dbf
input datafile fno= name=/u02/app/oradata/PSDB/example01.dbf
input datafile fno= name=/u02/app/oradata/PSDB/undotbs01.dbf
input datafile fno= name=/u02/app/oradata/PSDB/users01.dbf
channel ORA_DISK_1: backup set complete, elapsed time: ::
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: backup set complete, elapsed time: ::
Finished backup at -FEB-
----只对某个数据文件检查
RMAN> backup check logical validate datafile ; Starting backup at -FEB-
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid= devtype=DISK
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno= name=/u02/app/oradata/PSDB/livan_tbs01.dbf
channel ORA_DISK_1: backup set complete, elapsed time: ::
Finished backup at -FEB-
--RMAN的检查结果放在v$database_block_corruption
SQL> select file#,block#,blocks from v$database_block_corruption;
FILE# BLOCK# BLOCKS
---------- ---------- ----------
8.使用exp导出工具验证坏块
[oracle@std lib]$ exp livan/livan file=/home/oracle/livan_table.dmp tables=test Export: Release 10.2.0.4. - Production on Thu Feb :: Copyright (c) , , Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4. - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Export done in US7ASCII character set and AL16UTF16 NCHAR character set
server uses AL32UTF8 character set (possible charset conversion) About to export specified tables via Conventional Path ...
. . exporting table TEST
EXP-: ORACLE error encountered
ORA-01578: ORACLE data block corrupted (file # 6, block # 12)
ORA-: data file : '/u02/app/oradata/PSDB/livan_tbs01.dbf'
Export terminated successfully with warnings.
9.使用dbms_repair.check_object检验坏块
SQL> BEGIN
DBMS_REPAIR.ADMIN_TABLES (
TABLE_NAME => 'REPAIR_TABLE',
TABLE_TYPE => dbms_repair.repair_table,
ACTION => dbms_repair.create_action,
TABLESPACE => 'livan_tbs');
END;
/ PL/SQL procedure successfully completed. SQL> set serveroutput on
SQL> DECLARE
num_corrupt INT;
BEGIN
num_corrupt := ;
DBMS_REPAIR.CHECK_OBJECT (
SCHEMA_NAME => 'LIVAN',
OBJECT_NAME => 'TEST',
REPAIR_TABLE_NAME => 'REPAIR_TABLE',
corrupt_count => num_corrupt);
DBMS_OUTPUT.PUT_LINE('number corrupt: ' || TO_CHAR (num_corrupt));
END;
/
number corrupt: PL/SQL procedure successfully completed. SQL> select RELATIVE_FILE_ID,BLOCK_ID,CORRUPT_TYPE,OBJECT_NAME
from REPAIR_TABLE; RELATIVE_FILE_ID BLOCK_ID CORRUPT_TYPE OBJECT_NAME
---------------- ---------- ------------ ------------------------------
TEST
10.使用analyze命令检验坏块
SQL> analyze table test validate structure cascade online;
analyze table test validate structure cascade online
*
ERROR at line :
ORA-: ORACLE data block corrupted (file # , block # )
ORA-: data file : '/u02/app/oradata/PSDB/livan_tbs01.dbf'
11.使用bbed自带的命令verify检验坏块
BBED> verify dba ,
DBVERIFY - Verification starting
FILE = /u02/app/oradata/PSDB/livan_tbs01.dbf
BLOCK = Block is corrupt
Corrupt block relative dba: 0x0180000c (file , block )
Bad check value found during verification
Data in bad block:
type: format: rdba: 0x0180000c
last change scn: 0x0000.0007d460 seq: 0x5 flg: 0x06
spare1: 0x0 spare2: 0x0 spare3: 0x0
consistency value in tail: 0xd4600605
check value in block header: 0x4d5c
computed block checksum: 0x1607 DBVERIFY - Verification complete Total Blocks Examined :
Total Blocks Processed (Data) :
Total Blocks Failing (Data) :
Total Blocks Processed (Index):
Total Blocks Failing (Index):
Total Blocks Empty :
Total Blocks Marked Corrupt :
Total Blocks Influx :
参考:张晓明<<大话Oracle RAC>>
http://blog.csdn.net/tianlesoftware/article/details/5006580
http://blog.itpub.net/8494287/viewspace-1357457/
http://blog.csdn.net/haiross/article/details/15340489
http://blog.sina.com.cn/s/blog_a57562c801015pzr.html
使用BBED模拟Oracle数据库坏块的更多相关文章
- 13 oracle数据库坏块-逻辑坏块(模拟/修复)
13 oracle数据库坏块-逻辑坏块 逻辑数据坏块的场景1)oracle bug也可能导致逻辑坏块的产生. 特别是parallel dml. 例如:Bug 5621677 Logical corru ...
- undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库坏块导致
本文转自 惜纷飞 大师. 模拟基表事务未提交数据库crash,undo丢失恢复异常恢复,运维DBA反映Oracle数据库无法启动报错ORA-01157 ORA-01110,分析原因为Oracle数据库 ...
- 12 oracle 数据库坏块--物理坏块-ORA-01578/ORA-01110
oracle 数据库坏块--物理坏块 数据坏块的类型物理坏块:通常是由于硬件损坏如磁盘异常导致.内存有问题.存储链有问题. IO有问题.文件系统有问题. Oracle本身的问题等逻辑坏块:可能都是软件 ...
- Oracle数据库坏块的恢复
模拟数据块坏块: 对于发生数据块不一致的数据块,如果当前数据库有备份且处于归档模式,那么就可以利用rman工具数据块恢复功能 对数据块进行恢复,这种方法最简单有效,而且可以在数据文件在线时进行,不会发 ...
- 对Oracle数据库坏块的理解
1.物理坏块和逻辑坏块 在数据库中有一个概念叫做数据块的一致性,Oracle的数据块的一致性包括了两个层次:物理一致性和逻辑一致性,如果一个数据块在这两个层次上存在不一致性,那就对应到了我们今天要要说 ...
- oracle BBED 直接改动数据库block块
1.BBED配置 1)将相应文件放到$ORACLE_HOME/rdbms/mesg和$ORACLE_HOME/rdbms/lib中: --将lib中bbedus.msb和bbedus.msg ...
- Oracle 处理坏块
本文主要介绍如何去处理在Oracle数据库中出现坏块的问题,对于坏块产生在不同的对象上,处理的方法会有所不同,本文将大致对这些方法做一些介绍.因为数据库运行时间长了,由于硬件设备的老化,出现坏块的几率 ...
- oracle数据库代码块
--申明变量.游标 declare a ):'; --逻辑 begin INSERT into TEMP_DSF.TEST VALUES (a); end; tips:mysql不支持匿名块.仅在存储 ...
- [转]RMAN检测数据库坏块
backup validate check logical database; select * from v$database_block_corruption; RMAN> backup v ...
随机推荐
- PHP数组合并+与array_merge的区别分析 & 对多个数组合并去重技巧
PHP中两个数组合并可以使用+或者array_merge,但之间还是有区别的,而且这些区别如果了解不清楚项目中会要命的! 主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意 ...
- 《UNIX环境高级编程第三版》apue.h等源码文件的编译安装
操作系统:Ubuntu 12/14 1.下载书中的源代码:点击下载 2.编译 tar -zxvf *.tar.gz cd ./apue.3e make 报错: can,t find -lbsd 解决办 ...
- CMake命令/函数汇总(翻译自官方手册)
查看官方文档 cmake命令 选项 CMake变量 CMake命令汇总 / add_custom_command add_custom_target/add_definitions/add_depen ...
- 《征服 C 指针》摘录2:C变量的 作用域 和 生命周期(存储期)
在开发一些小程序的时候,也许我们并不在意作用域的必要性.可是,当你书写几万行,甚至几十万行的代码的时候,没有作用域肯定是不能忍受的. C 语言有如下 3 种作用域. 1.全局变量 在函数之外声明的变量 ...
- Java中普通代码块,构造代码块,静态代码块执行顺序
//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 1 //普通代码块 ...
- 【分享】SQL中的注入漏洞
例:假设一个账户密码的输入在数据库中是这样进行判断的. ' ) AS PWDCORRECT FROM T_USER WHERE FUSER= 'GUEST' 如果输入: ') AS PWDCORREC ...
- ICMP的应用--Traceroute
Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具.前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器.所以 ...
- 设置UITableView的separatorInset值为UIEdgeInsetsZero,分隔线不最左端显示的问题
一.问题描述 UITableView分割线要显示到最左端 查看UITableView的属性,发现设置separatorInset的值可以自定义分割线的位置. @property (nonatomic) ...
- iOS文件类型判断
最近在做的东西有下载zip,只是服务器发送过来的是二进制,需要根据二进制来判断是什么类型的文件,从而进行保存操作.起初很不理解,到后来发现可以通过二进制的前2位的ascii码来进行判断.如下: // ...
- 根据字体计算CGRect
UILabel *label = [[UILabel alloc]init]; label.numberOfLines = ;//多行显示 label.backgroundColor = [UICol ...