BBED工具的安装使用(一)
BBED是用来直接查看和修改数据文件数据的一个工具,是Oracle一款内部工具,可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。要想使用该工具,需用户自己安装,在Oracle9i和10g版本中,安装的方法很简单:
[oracle@node1u01]$cd$ORACLE_HOME/rdbms/lib/
[oracle@node1lib]$make-fins_rdbms.mk$ORACLE_HOME/rdbms/lib/bbed
LinkingBBEDutility(bbed)
rm-f/u01/app/oracle/10.2.0/db_1/rdbms/lib/bbed
gcc-o/u01/app/oracle/10.2.0/db_1/rdbms/lib/bbed-L/u01/app/oracle/10.2.0/db_1/rdbms/lib/-L/u01/app/oracle/10.2.0/db_1/lib/-L/u01/app/oracle/10.2.0/db_1/lib/stubs/-L/usr/lib-lirc/u01/app/oracle/10.2.0/db_1/lib/s0main.o/u01/app/oracle/10.2.0/db_1/rdbms/lib/ssbbded.o/u01/app/oracle/10.2.0/db_1/rdbms/lib/sbbdpt.o`cat/u01/app/oracle/10.2.0/db_1/lib/ldflags`-lnsslb10-lncrypt10-lnsgr10-lnzjs10-ln10-lnnz10-lnl10/u01/app/oracle/10.2.0/db_1/rdbms/lib/defopt.o-ldbtools10-lclntsh`cat/u01/app/oracle/10.2.0/db_1/lib/ldflags`-lnsslb10-lncrypt10-lnsgr10-lnzjs10-ln10-lnnz10-lnl10-lnro10`cat/u01/app/oracle/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/10.2.0/db_1/lib/ldflags`-lnsslb10-lncrypt10-lnsgr10-lnzjs10-ln10-lnnz10-lnl10-lnro10`cat/u01/app/oracle/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/10.2.0/db_1/lib/sysliblist`-Wl,-rpath,/u01/app/oracle/10.2.0/db_1/lib-lm`cat/u01/app/oracle/10.2.0/db_1/lib/sysliblist`-ldl-lm-L/u01/app/oracle/10.2.0/db_1/lib
Oracle11g中缺省不提供BBET库文件,如果需要可以将10g中的文件copy到11g相应目录再执行安装:
$ORACLE_HOME/rdbms/lib/ssbbded.o
$ORACLE_HOME/rdbms/lib/sbbdpt.o
$ORACLE_HOME/rdbms/mesg/bbedus.msb
$ORACLE_HOME/rdbms/mesg/bbedus.msg
在第一次使用时会发现有默认的口令,从这里可以看出oracle对bbed工具的限制,默认的密码是blockedit
[oracle@node1~]$cd$ORACLE_HOME/rdbms/lib
[oracle@node1lib]$./bbed
Password:
BBED:Release2.0.0.0.0-LimitedProductiononThuJul1016:09:572014
Copyright(c)1982,2005,Oracle.Allrightsreserved.
*************!!!ForOracleInternalUseonly!!!***************
查看一下bbed命令
BBED>helpall
SETDBA[dba|file#,block#]
SETFILENAME'filename'
SETFILEfile#
SETBLOCK[+/-]block#
SETOFFSET[[+/-]byteoffset|symbol|*symbol]
SETBLOCKSIZEbytes
SETLIST[FILE]'filename'
SETWIDTHcharacter_count
SETCOUNTbytes_to_display
SETIBASE[HEX|OCT|DEC]
SETOBASE[HEX|OCT|DEC]
SETMODE[BROWSE|EDIT]
SETSPOOL[Y|N]
SHOW[<SETparameter>|ALL]
INFO
MAP[/v][DBA|FILENAME|FILE|BLOCK]
DUMP[/v][DBA|FILENAME|FILE|BLOCK|OFFSET|COUNT]
PRINT[/x|d|u|o|c][DBA|FILE|FILENAME|BLOCK|OFFSET|symbol|*symbol]
EXAMINE[/Nuf][DBA|FILE|FILENAME|BLOCK|OFFSET|symbol|*symbol]
</Nuf>:
N-anumberwhichspecifiesarepeatcount.
u-aletterwhichspecifiesaunitsize:
b-b1,ub1(byte)
h-b2,ub2(half-word)
w-b4,ub4(word)
r-Oracletable/indexrow
f-aletterwhichspecifiesadisplayformat:
x-hexadecimal
d-decimal
u-unsigneddecimal
o-octal
c-character(native)
n-Oraclenumber
t-Oracledate
i-Oraclerowid
FIND[/x|d|u|o|c]numeric/characterstring[TOP|CURR]
COPY[DBA|FILE|FILENAME|BLOCK]TO[DBA|FILE|FILENAME|BLOCK]
MODIFY[/x|d|u|o|c]numeric/characterstring
[DBA|FILE|FILENAME|BLOCK|OFFSET|symbol|*symbol]
ASSIGN[/x|d|u|o]<targetspec>=<sourcespec>
<targetspec>:[DBA|FILE|FILENAME|BLOCK|OFFSET|symbol|*symbol]
<sourcespec>:[value|<targetspecoptions>]
SUM[DBA|FILE|FILENAME|BLOCK][APPLY]
PUSH[DBA|FILE|FILENAME|BLOCK|OFFSET]
POP[ALL]
REVERT[DBA|FILE|FILENAME|BLOCK]
UNDO
HELP[<bbedcommand>|ALL]
VERIFY[DBA|FILE|FILENAME|BLOCK]
CORRUPT[DBA|FILE|FILENAME|BLOCK]
set设定当前的环境
show查看当前的环境参数,跟sqlplus的同名命令类似。
dump列出指定block的内容
find在指定的block中查找指定的字符串,结果是显示出字符串,及其偏移量--offset,偏移量就是在block中的字节数
modify修改指定block的指定偏移量的值,可以在线修改。
copy把一个block的内容copy到另一个block中
verify检查当前环境是否有坏块
sum计算block的checksum,modify之后block就被标识为坏块,currentchecksum与reqiredchecksum不一致,sum命令可以计算出新的checksum并应用到当前块。
undo回滚当前的修改操作,如果手误做错了,undo一下就ok了,回到原来的状态。
revert回滚所有之前的修改操作,意思就是undoall
为bbed配置一个参数文本
制作bbed列表
SQL>setheadingoff;
SQL>setfeedbackoff;
SQL>spool/u01/bbedlist.parf
SQL>selectfile#||''||name||''||bytesfromv$datafile;
1/u01/app/oracle/oradata/orcl_dup/system01.dbf524288000
3/u01/app/oracle/oradata/orcl_dup/sysaux01.dbf346030080
4/u01/app/oracle/oradata/orcl_dup/users01.dbf191365120
5/u01/app/oracle/oradata/orcl_dup/example01.dbf104857600
6/u01/app/oracle/oradata/orcl_dup/tts01.dbf20971520
7/u01/app/oracle/oradata/orcl_dup/tts02.dbf20971520
8/u01/app/oracle/oradata/orcl_dup/undotbs001.dbf104857600
SQL>spooloff;
SQL>setheadingon;
SQL>setfeedbackon;
制作parfile
[oracle@node1lib]$vi/u01/bbed.par
blocksize=8192
listfile=/u01/bbedlist.parf
mode=edit
用parfile启动bbed
[oracle@node1lib]$./bbedparfile=/u01/bbed.parpassword=blockedit
BBED:Release2.0.0.0.0-LimitedProductiononThuJul1016:42:272014
Copyright(c)1982,2005,Oracle.Allrightsreserved.
*************!!!ForOracleInternalUseonly!!!***************
BBED>show
FILE#1
BLOCK#1
OFFSET0
DBA0x00400001(41943051,1)
FILENAME/u01/app/oracle/oradata/orcl_dup/system01.dbf
BIFILEbifile.bbd
LISTFILE/u01/bbedlist.parf
BLOCKSIZE8192
MODEEdit
EDITUnrecoverable
IBASEDec
OBASEDec
WIDTH80
COUNT512
LOGFILElog.bbd
SPOOLNo
通过bbed获取指定数值的RDBA(RelativeDataBlockAddress)
SQL>select*frombbed_test;
JOB
-------------------------
123456
1234567890
2rowsselected.
SQL>select
2rowid,
3dbms_rowid.rowid_relative_fno(rowid)rel_fno,
4dbms_rowid.rowid_block_number(rowid)blockno,
5dbms_rowid.rowid_row_number(rowid)rowno
6frombbed_test;
ROWIDREL_FNOBLOCKNOROWNO
------------------------------------------------
AAAN9GAAEAAAAK0AAA46920
AAAN9GAAEAAAAK0AAB46921
2rowsselected.
BBED>setdba4,692offset0
DBA0x010002b4(167779084,692)
OFFSET0
BBED>show
FILE#4
BLOCK#692
OFFSET8168
DBA0x010002b4(167779084,692)
FILENAME/u01/app/oracle/oradata/orcl_dup/users01.dbf
BIFILEbifile.bbd
LISTFILE/u01/bbedlist.parf
BLOCKSIZE8192
MODEEdit
EDITUnrecoverable
IBASEDec
OBASEDec
WIDTH80
COUNT512
LOGFILElog.bbd
SPOOLNo
当然数据库中通过dbms_utility包也很容易就能获得,此处可以对比一下
SQL>variableget_rdbavarchar2(30);
SQL>exec:dba:=dbms_utility.make_data_block_address(4,692);
PL/SQLproceduresuccessfullycompleted.
SQL>printdba
DBA
--------------------------------
16777908
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。