Oracle使用BBED定位底层二进制数据位置
1. 数据内容
我们使用test.dba_test 表中的name列来进行讲解 内容为:dba_fashion
select *
from test.dba_test
WHERE name = 'dba_fashion';
2. 查看内容属于的数据文件和块号
SELECT dbms_rowid.rowid_relative_fno(rowid) REL_FNO,
dbms_rowid.rowid_block_number(rowid) BLOCKNO,
name
from test.dba_test
WHERE name = 'dba_fashion';
从结果我们看出该表属于6号文件的156数据块
3. 使用BBED进入数据块
3.1 使用上节的内容打开bbed
BBED parfile=/home/oracle/bbed.par
3.2 定位到6号文件的6,156数据块
BBED> set dba 6,156
这里我们可以使用另外种方法定位
BBED> set file 6
BBED> set block 156
BBED> show
3.3 设置offset确保处在该块的起始位置
BBED> set offset 0
4. 查找name内容
4.1 搜索name内容
c表示搜索字符串
BBED> find /c dba_fashion
从上图中可以看出
该列内容在6号文件的第156个数据块中,并偏移量为8163字节
注意该命令会dump多行数据,每行为32字节
4.2 dump数据块内容
以上为二进制文件,接下来转化为可读的内容
count 表示读取多少字节的数据
BBED> dump /v dba 6,156 offset 8163 count 32
可以看出已经找到表中2行记录了。原因是dba_fashion 只占11个字节。再搜1次。
BBED> dump /v dba 6,156 offset 8163 count 11
5.验证结果
5.1 设置偏移量
上面我们已经定位到了 6,156数据块位置,offset是0,接下来我们设定offset为8163
BBED> set offset 8163
5.2 dump数据
dump数据
BBED> d /v
5.3 dump更多数据
我们可以使用count参数获取更多数据方法如下
d /v count 64
表数据量更多,可以将count n设置更大。