您现在的位置是:首页 > 数据处理

bbed安装学习

2022-02-20数据处理

简介mv sbbdpt.o $ORACLE_HOME/rdbms/lib/
mv ssbbded.o $ORACLE_HOME/rdbms/lib/
mv bbedus.msb $ORACLE_HOME/rdbms/mesg/

cd $ORACLE_HOME/rdbms/lib

make -f $ORACLE_HOME

mv sbbdpt.o $ORACLE_HOME/rdbms/lib/
mv ssbbded.o $ORACLE_HOME/rdbms/lib/
mv bbedus.msb $ORACLE_HOME/rdbms/mesg/

cd $ORACLE_HOME/rdbms/lib

make -f $ORACLE_HOME/rdbms/lib/ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed

附一个报错:--如未安装 mv bbedus.msb $ORACLE_HOME/rdbms/mesg/ 报错如下:
[oracle@bys3 lib]$ bbed   
Message 112 not found; No message file for product=RDBMS, facility=BBED
BBED-00113: file not found

vim bbed.par
blocksize=8192
listfile=bbedfile.txt
mode=edit

进入sqlplus执行select file#||' '||name||' '||bytes from v$datafile ;
把上一步获取信息写入bbedfile.txt

[oracle@bys3 ~]$ bbed PASSWORD=blockedit  mode=edit blocksize=8192 listfile=bbed.par
Password:            默认密码是:blockedit

show all        ---这命令显示了当前的文件号、BLOCK号,偏移号、COUNT数等信息。需要提前SET FILE SET BLOCKSIZE SET BLOCK等

数据文件头内容对比
命令说明:
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      <-- Block Header Structure
    ub1 type_kcbh                           @0      <-- block的类型,详见下面列表                                             
    ub1 frmt_kcbh                           @1      <-- block format 1=oracle 7,2=ORACLE 8+
    ub1 spare1_kcbh                         @2      <-- 未使用
    ub1 spare2_kcbh                         @3      <-- 未使用
    ub4 rdba_kcbh                           @4      <-- RDBA-relative data block address
    ub4 bas_kcbh                            @8      <-- SCN base
    ub2 wrp_kcbh                            @12     <-- SCN wrap
    ub1 seq_kcbh                            @14     <-- 队列值,对于同一个SCN,每次对数据块的改变而增加。
    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     <-- 可选的,块的校验和 (如果 DB_BLOCK_CHECKSUM=TRUE)
    ub2 spare3_kcbh                         @18     <-- 未使用
 struct ktbbh, 72 bytes                     @20     <-- Transaction Fixed Header Structure
    ub1 ktbbhtyp                            @20     <-- 数据块类型: 1=DATA 2=INDEX
    union ktbbhsid, 4 bytes                 @24     <-- 段/对象ID
    struct ktbbhcsc, 8 bytes                @28     <-- 块最后清除时的SCN
    b2 ktbbhict                             @36     <-- ITL 槽的个数
    ub1 ktbbhflg                            @38     <-- 0=on the freelist
    ub1 ktbbhfsl                            @39     <-- ITL TX freelist 槽
    ub4 ktbbhfnx                            @40     <-- freelist上下一个块的DBA
    struct ktbbhitl[2], 48 bytes            @44     <-- ITL 列表索引
 struct kdbh, 14 bytes                      @100    <-- Data Header Structure
    ub1 kdbhflag                            @100    <-- N=pctfree hit(clusters);F=do not put on freelist;K=flushable cluster keys
    b1 kdbhntab                             @101        <-- Number of tables (>1 in clusters)
    b2 kdbhnrow                             @102        <-- Number of rows
    sb2 kdbhfrre                            @104     <--  First free row entry index: -1= 你必须添加一个
    sb2 kdbhfsbo                            @106        <-- Freespace begin offset
    sb2 kdbhfseo                            @108        <-- Freespace end offset
    b2 kdbhavsp                             @110        <-- Available space in the block
    b2 kdbhtosp                             @112        <-- Toatal available space when all TXs commit
 struct kdbt[1], 4 bytes                    @114     <-- Table Directory Entry Structure
    b2 kdbtoffs                             @114      <--
    b2 kdbtnrow                             @116      <--
 sb2 kdbr[14]                               @118     <-- Row Directory
 ub1 freespace[7475]                        @146     <-- Free Space
 ub1 rowdata[567]                           @7621    <-- Row Data
 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”

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

随便看看

文章排行

本栏推荐

栏目更新