【BBED】bbed的使用(二)

前面一章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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值