BBED for PostgreSQL

本文介绍了作者用Python模仿BBED创建的bbedp脚本,适用于PostgreSQL,可以查看和修改数据库表的字节。该脚本在Linux环境下运行,需要Python 2.7,并且目前仅支持单个表格。文章提醒读者谨慎在生产环境中使用,主要用于学习和实验。
摘要由CSDN通过智能技术生成

点击▲关注 “数据和云”   给公众号标星置顶

更多精彩 第一时间直达

640?wx_fmt=jpeg

作者 | 李亮,云和恩墨西区交付工程师,长期服务于运营商、社保、银行、医院、公积金等行业,擅长数据库备份恢复,升级迁移,性能优化,sql优化。


 一、关于bbedp


⽤python模仿bbed写了⼀个bbedp for pg的脚本,简单的查看和修改字节都可以做到。如果你不清楚这个脚本的功能,请不要轻易在⽣产环境使⽤它,这很危险。


使⽤环境:

1、linux

2、python 2.7

3、⽬前仅⽀持单个table

  ⼆、如何开始

找到table对应物理文件

查看data_directory参数找到数据库所在⽬录

postgres=# show data_directory ;

 data_directory 

----------------------

 /oracle/soft/pg_data

(1 row)

postgres=#


表的物理⽂件位置

postgres=# select pg_relation_filepath('t1');

 pg_relation_filepath

----------------------

 base/13323/24706

(1 row)

postgres=#



然后编辑bbedp脚本同级⽬录下的file⽂件就可以开始了,⽬前仅⽀持单个⽂件

vi file

/oracle/soft/pg_data/base/13323/24706

运行bbedp

这⾥你需要给x权限运⾏就可以了(默认没有密码)。

640?wx_fmt=png

如果你了解bbed,那么help看⼀眼帮助就很容易上⼿bbedp了。你不了解bbed也没问题,脚本很简单,主要功能有查看page结构,dump字节,修改字节。


 三、查看page

map查看page结构

BBEDP> map

 File: /oracle/soft/pg_data/base/13323/16428

 Block: 0 offset: 0

 -------------------------------------------------------------------

 struct PageHeaderData , 24 bytes @0

 struct Linps , 44 bytes @24

struct Tuples , 392 bytes @68 

 struct Pd_special , 0 bytes @8191

 There are 11 tuples in the block

BBEDP>

默认从block 0开始,你可以set block到指定的block再开始

p查看数据结构

640?wx_fmt=png

640?wx_fmt=png


直接p查看

640?wx_fmt=png

640?wx_fmt=png


p 指定⾏指针和tuple

640?wx_fmt=png

查看十六进制数据

640?wx_fmt=png

640?wx_fmt=png


  四、修改数据测试

表T5有一条被删除的tuple

postgres=# select * from t5;

 id | name 

-------+------------

640?wx_fmt=png

查看 tuple

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

修改

把tuple3这条记录尝试⽤bbedp修改找回来

640?wx_fmt=png


重启实例查看数据

640?wx_fmt=png

  五、写在后⾯


温馨提示:请不要轻易在⽣产环境使⽤它。

如果有什么不对的地⽅,感谢在留言处指正。

不⼀定有⽤,但是好玩!



资源下载

关注公众号:数据和云(OraNews)回复关键字获取

2018DTCC , 数据库大会PPT

2018DTC,2018 DTC 大会 PPT

DBALIFE ,“DBA 的一天”海报

DBA04 ,DBA 手记4 电子书

122ARCH ,Oracle 12.2体系结构图

2018OOW ,Oracle OpenWorld 资料

产品推荐

云和恩墨zData一体机现已发布超融合版本和精简版,支持各种简化场景部署,零数据丢失备份一体机ZDBM也已发布,欢迎关注。

640?wx_fmt=jpeg

640?wx_fmt=jpeg

提供10g,11g linux及windows BBED工具 及详细编译说明readme文件。 一. 10g linux编译BBED [oracle@node3 ~]$ cd $ORACLE_HOME/rdbms/lib [oracle@node3 lib]$ make -f ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed 直接生成到bin下为可执行文件 编译完成后: 编译成功后登陆BBED,登陆时需要密码(BBED的默认密码是blockedit) [oracle@node3 bin]$ bbed Password: BBED: Release 2.0.0.0.0 - Limited Production on Wed Apr 11 10:01:07 2018 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. ************* !!! For Oracle Internal Use only !!! *************** BBED> 二. 11g linux编译BBED oracle 11gR2环境中编译BBED可执行文件所需要的ssbbded.o和sbbdpt.o对象文件被移除,不过可以从oracle 10g环境中将这两个文件拷贝到oracle11g环境进行编译。 除了将上面的ssbbded.o和sbbdpt.o 文件拷贝到11g环境外,BBED还需要用到 $ORACLE_HOME/rdbms/mesg目录下的bbedus.msb这个信息文件, 这几个文件都需要从oracle10g中拷贝到oracle11g中对于的目录中。 文件夹linux_10g_bbed_64 包括了这3个文件。 下面是将以上3个文件从Oracle 10g中拷贝到11g对于目录后编译的过程。 1)把linux_10g_bbed_64目录下的10g的ssbbded.o和sbbdpt.o 放到 $ORACLE_HOME/rdbms/lib 目录下 2)把linux_10g_bbed_64目录下的10g的 bbedus.msb 文件拷贝到 $ORACLE_HOME/rdbms/mesg目录下 3)编译 [oracle@node1 ~] cd $ORACLE_HOME/rdbms/lib [oracle@node1 ~] make -f ins_rdbms.mk BBED=$ORACLE_HOME/bin/bbed $ORACLE_HOME/bin/bbed [oracle@node3 bin]$ bbed Password: BBED: Release 2.0.0.0.0 - Limited Production on Wed Apr 11 10:01:07 2018 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. ************* !!! For Oracle Internal Use only !!! *************** BBED> 三、windows 11GR2 bbed oracle9i版本以后Oracle不装载BBED了, Windows上也没有makefile来编译bbed。 所以,如果你想在Windows上使用bbed,你需要很多文件(本下载压缩包已经全包含了): 你需要一个bbed.exe. 你只能从Oracle 9i的安装中得到它。 你需要有一堆的DLL。所有这些DLL在Oracle9i安装中可以得到。 使用BBED需要消息文件。这文件是“bbedus.msb”,位于Oracle9i安装的MESG目录下。而你需要将其复制到ORACLE_HOME的RDBMS\MESG目录下。 这些在目录本压缩包的 bbed_win 中已经全部提供了。 把它们放在BBED安装的目录下(比如D:\bbed_win),环境变量ORACLE_HOME设置好。确保消息文件在$ORACLE_HOME\RDBMS\MESG下,最后启动BBED: D:\bbed_win>bbed Password: BBED: Release 2.0.0.0.0 - Limited Production on Wed Apr 11 10:20:43 2018 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. ************* !!! For Oracle Internal Use only !!! *************** BBED>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值