前面一章bbed的使用(一)介绍了BBED的编译安装,这一章主要介绍bbed的语法规则。
使用bbed 需要使用parfile和listfile
1 PARFILE:参数文件记录以下参数:
此文件主要记录
BLOCKSIZE:数据库的标准块大小
MODE: BBED的运行模式:browse或者edit
SILENT:控制操作的输出(Y/N)
SPOOL:将输出内容spool到 bbed.log (Y/N)
LISTFILE:被编辑的文件列表的名字
CMDFILE:执行命令的集合的文件名
BIFILE :undo 文件的名称
LOGFILE:用户日志文件默认为:log.bbd
一般使用的参数:
BLOCKSIZE=8192
LISTFILE=/home/oracle/filelinux.txt
MODE=edit
2 listfile.txt (文件名随意)
LISTFILE 文件中的格式为:文件号 路径名称 大小,使用如下sql语句可以得到listfile的内容:
select file#||' '||name||' '||bytes from v$datafile;
BBED 主要使用的命令及其作用:
show 查看当前的环境参数,跟sqlplus的同名命令类似。
dump 列出指定block的内容
find 在指定的block中查找指定的字符串,结果是显示出字符串,及其偏移量--offset,偏移量就是在block中的字节数
modify 修改指定block的指定偏移量的值,可以在线修改。
copy 把一个block的内容copy到另一个block中
verify 检查当前环境是否有坏块
sum 计算block的checksum,modify之后block就被标识为坏块,current checksum与reqired checksum不一致,sum命令可以计算出新的checksum并应用到当前块。
undo 回滚当前的修改操作,如果误操作,执行undo 命令,便可以恢复到以前的状态。
revert 回滚所有之前的修改操作,意思就是undo all
BBED> help all
设置当前要修改的数据块,格式:文件号,数据块号
1 SET DBA [ dba | file#, block# ]
例如:
set dba 3,632
如果成功,将返回数据块的RDBA(relative data block address)
BBED>set dba 3,632
DBA 0x00c00278 (12583644 3,632)
2 SET FILENAME 'filename'
指定某个文件,filename必须是有效的oracle 数据文件而且必须被单引号'filename' 包含。
BBED> set filename '/opt/oracle/oradata/rac/users01.dbf'
FILENAME /opt/oracle/oradata/rac/users01.dbf
3 SET FILE file#
设定当前文件为指定文件号的文件。该编号必须是在数据库启动参照的文件列表里面。
BBED> set file 2
FILE# 2
4 SET BLOCK [+/-]block#
设置当前的数据块,次数据块必须是属于已经指定的fileanme或者file的。使用set block命令可以指定绝对的block,也可以使用+ -指定相对偏移的block
比如 设置了当前的block为15,
BBED> set block 15
BLOCK# 15
BBED> set block +15
BLOCK# 30 相对当前15号块偏移量为15的块:数据块 30
5 SET OFFSET [ [+/-]byte offset | symbol | *symbol ]
与设置块类似,使用此命令必须先指定数据块。绝对或者相对偏移量都可以指定。
BBED> set offset 28
OFFSET 28
BBED> set offset +12
OFFSET 30
6 SET BLOCKSIZE bytes
指定数据块的大小,次数据块大小必须和已经指定的文件中的数据块大小一致,否则会报错。
BBED> set blocksize 8192
BLOCKSIZE 8192
7 SET LIST[FILE] 'filename'
如果在参数文件/命令行中没有指定listfile,可以使用此命令指定listfile。listfile必须使用 '' 包含。
BBED> set listfile /home/oracle/filelinux.txt
LISTFILE /home/oracle/filelinux.txt
8 SET WIDTH character_count
设置屏幕字符宽度,默认为80个字符宽度。
9 SET COUNT bytes_to_display
设置dump 命令显示数据块 bytes的大小,默认512,比如查看一个8Kb 大小的数据块,需要dump 8次 偏移量分别为 0,512,1024,1536,2048,2560,3092,3604。
设置的值越高,dump的次数越多,设置的值越小,dump的次数就越少。
10 SET IBASE [ HEX | OCT | DEC ]
设置内部数据编码,默认为10进制,当然也可以设置为16进制或者8进制。也允许set block,set file,set offset 命令使用可选的进制到10进制
BBED>set ibase hex
IBASE Hex
BBED> set block +A
BLOCK# 11
11 SET OBASE [ HEX | OCT | DEC ]
未知的命令
12 SET MODE [ BROWSE | EDIT ]
设置bbed 的模式:浏览模式或者编辑模式。浏览模式不允许任何更改操作,在编辑模式可以对数据库进行修改
13 SET SPOOL [ Y | N ]
此命令无效
14 SHOW [| ALL ]
显示 当前的所有设置
15 INFO
列出正在被查看或者编辑的文件列表
16 MAP[/v] [ DBA | FILENAME | FILE | BLOCK ]
此命令可以显示当前数据块的内部图。和参数 /v 命令一起可以显示更加详细的信息。此图可以显示整个数据块的偏移量,其中包含了块头部,数据块头部和数据行信息
如果set命令还没设置一个当前的block,或者用户想指定一个其他的block而保留当前的block,可以使用map 命令指定文件名,文件号,数据块,DBA而不影响当前的block的指定。
通过使用map命令,可以检查或着修改数据块中的数据。
如下事例为一个blocksize为8k的数据块的map信息。
BBED> map /v dba 4,440
File: /u02/oradata/xhdb/users01.dbf (4)
Block: 440 Dba:0x010001b8
------------------------------------------------------------
KTB Data Block (Table/Cluster)
struct kcbh, 20 bytes @0
ub1 type_kcbh @0
ub1 frmt_kcbh @1
ub1 spare1_kcbh @2
ub1 spare2_kcbh @3
ub4 rdba_kcbh @4
ub4 bas_kcbh @8
ub2 wrp_kcbh @12
ub1 seq_kcbh @14
ub1 flg_kcbh @15
0x01 新数据块
0x02 延迟logging 变更delayed logging change advanced SCN/seq
0x04 check value saved-block XOR's to zero
0x08 临时数据块
ub2 chkval_kcbh @16
ub2 spare3_kcbh @18
struct ktbbh, 72 bytes @20
ub1 ktbbhtyp @20
union ktbbhsid, 4 bytes @24
struct ktbbhcsc, 8 bytes @28
b2 ktbbhict @36
ub1 ktbbhflg @38
ub1 ktbbhfsl @39
ub4 ktbbhfnx @40
struct ktbbhitl[2], 48 bytes @44
struct kdbh, 14 bytes @100
ub1 kdbhflag @100
b1 kdbhntab @101 1 in clusters)
b2 kdbhnrow @102
sb2 kdbhfrre @104
sb2 kdbhfsbo @106
sb2 kdbhfseo @108
b2 kdbhavsp @110
b2 kdbhtosp @112
struct kdbt[1], 4 bytes @114
b2 kdbtoffs @114
b2 kdbtnrow @116
sb2 kdbr[14] @118
ub1 freespace[7475] @146
ub1 rowdata[567] @7621
ub4 tailchk @8188
Header Block 类型:
01:undo 段头
02:undo 数据块
03:保留的undo 头
04:保留的undo 数据块
05:数据段头 (temp,index,data 等等)
06:KTB managed data block (with ITL)
07: 临时表的数据块(没有 ITL)
08: sort key
09: sort run
10: 段自由列表
11: 数据文件头
TAIL CHECKS
oracle 所有的数据块的最后4个字节存放的是 tail check(校验)信息,下面以oracle 9i为例介绍其结构:
数据块尾 是由一连串的两个字节的SCN,块类型和SCN序列值组成,比如 SCN base number 是0x00020117,块类型为:06 ,SCN 序列值为:0x04
tail check 的值就是:0x01170604
SCN base Type SCN seq
0117 06 04
尽管尾部校验值是由三个部分组成,但是oracle将其看为一个存储在4个bytes的无符号整数,在小字节序、低字节序的平台上,值是以低字节排序的。因此如果尾部校验被正规的块编辑器或者
dump 命令检查,字节显示的顺序可能不同。比如0x01170604 存储在小字节排序的平台上会被写为:“04061701”
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22664653/viewspace-704328/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22664653/viewspace-704328/