ITPub博客

首页 > 数据库 > Oracle > bbed修改表记录内容系列一

bbed修改表记录内容系列一

原创 Oracle 作者:wisdomone1 时间:2015-10-25 23:03:06 0 删除 编辑

结论

1,用bbed修改表记录的方法为:
   先获取记录的文件号,块号及记录号
   然后进入bbed
   set dba 文件号,块号 offset 记录号           ----指定要修改的数据块位置
   find /c 要修改记录的列内容                  -----查找要修改的内容所在位置
   dump /v dba 文件号,块号 offset 偏移量       -----查找定位成功后的要修改的源内容,
   modify /c '变更后的新内容' dba 文件号,块号 offset 偏移量  ---具体修改命令
   dump /v dba 文件号,块号 offset 偏移量,查看修改后的内容   ---查看修改行的内容
   sum dba 4,99004 --确认修改数据块内容
   sum dba 4,99004 apply --真正修改数据块内容,相比较于上条命令


 2,用bbed修改表记录,必须要刷新缓冲池,否则不会看成修改后的新内容,即使切换日志及发生检查点皆不可
 3,数据库版本为11.2.0.1
 4,测试表的列数据类型为字符,且修改前后的表列的长度一致  


测试

SQL> select * from v$version where rownum=1;


BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production




SQL> create table t_bbed_modify_row(a varchar2(10));


Table created.


SQL> insert into t_bbed_modify_row values('test');


1 row created.


SQL> commit;


Commit complete.


SQL> alter system checkpoint;


System altered.


SQL> select DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID),DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID),dbms_rowid.rowid_row_number(rowid) from t_bbed_modify_row;


DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) DBMS_ROWID.ROWID_ROW_NUMBER(ROWID)
------------------------------------ ------------------------------------ ----------------------------------
                                   4                                99004                                  0


BBED> set dba 4,99004 offset 0
        DBA             0x010182bc (16876220 4,99004)
        OFFSET          0


BBED> find /c test
 File: /oracle/oradata/guowang/users01.dbf (4)
 Block: 99004            Offsets: 8184 to 8191           Dba:0x010182bc
------------------------------------------------------------------------
 74657374 01061010 


 <32 bytes per line>




BBED> dump /v dba 4,99004 offset 8184
 File: /oracle/oradata/guowang/users01.dbf (4)
 Block: 99004   Offsets: 8184 to 8191  Dba:0x010182bc
-------------------------------------------------------
 74657374 01061010                   l test....


 <16 bytes per line>




 BBED> dump /v dba 4,99004 offset 8184 count 4
 File: /oracle/oradata/guowang/users01.dbf (4)
 Block: 99004   Offsets: 8184 to 8187  Dba:0x010182bc
-------------------------------------------------------
 74657374                            l test


 <16 bytes per line>




修改列内容从test变成only
BBED> modify /c 'only' dba 4,99004 offset 8184
 File: /oracle/oradata/guowang/users01.dbf (4)
 Block: 99004            Offsets: 8184 to 8187           Dba:0x010182bc
------------------------------------------------------------------------
 6f6e6c79 


 <32 bytes per line>




查看修改列后的内容
BBED> dump /v dba 4,99004 offset 8184 count 4
 File: /oracle/oradata/guowang/users01.dbf (4)
 Block: 99004   Offsets: 8184 to 8187  Dba:0x010182bc
-------------------------------------------------------
 6f6e6c79                            l only


 <16 bytes per line>


保存修改的列内容到数据块
 BBED> sum dba 4,99004
Check value for File 4, Block 99004:
current = 0x997c, required = 0x9f78


BBED> sum dba 4,99004 apply
Check value for File 4, Block 99004:
current = 0x9f78, required = 0x9f78


发现修改后表数据没有变化
SQL> select * from t_bbed_modify_row;


A
--------------------
test




尝试重启数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.


Total System Global Area 2137886720 bytes
Fixed Size                  2215064 bytes
Variable Size            1392509800 bytes
Database Buffers          738197504 bytes
Redo Buffers                4964352 bytes
Database mounted.
Database opened.




再次查看表记录是否修改成功
哈哈,修改成功了
SQL> select * from t_bbed_modify_row;


A
--------------------
only




现在出现一个问题,如何不重启库,让BBED修改表记录成功
BBED> set dba 4,99004 offset 0
        DBA             0x010182bc (16876220 4,99004)
        OFFSET          0


BBED> find /c only  
 File: /oracle/oradata/guowang/users01.dbf (4)
 Block: 99004            Offsets: 8184 to 8191           Dba:0x010182bc
------------------------------------------------------------------------
 6f6e6c79 01061010 


 <32 bytes per line>


BBED> dump /v dba 4,99004 offset 8184
 File: /oracle/oradata/guowang/users01.dbf (4)
 Block: 99004   Offsets: 8184 to 8191  Dba:0x010182bc
-------------------------------------------------------
 6f6e6c79 01061010                   l only....


 <16 bytes per line>




BBED> modify /c 'ours' dba 4,99004 offset 8184  
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
 File: /oracle/oradata/guowang/users01.dbf (4)
 Block: 99004            Offsets: 8184 to 8187           Dba:0x010182bc
------------------------------------------------------------------------
 6f757273 


 <32 bytes per line>


BBED> dump /v dba 4,99004 offset 8184
 File: /oracle/oradata/guowang/users01.dbf (4)
 Block: 99004   Offsets: 8184 to 8187  Dba:0x010182bc
-------------------------------------------------------
 6f757273                            l ours


 <16 bytes per line>






 BBED> sum dba 4,99004 apply
Check value for File 4, Block 99004:
current = 0x8e66, required = 0x8e66


可见没有变化过来
SQL> SQL> select * from t_bbed_modify_row;


A
--------------------
only


可见发生检查点及日志切换仍不会导致数据变化过来
SQL> alter system checkpoint;


System altered.


SQL> select * from t_bbed_modify_row;


A
--------------------
only


SQL> alter system switch logfile;


System altered.


SQL> select * from t_bbed_modify_row;


A
--------------------
only


可见只要刷新缓冲池才会导至数据变化成功
SQL> alter system flush buffer_cache;


System altered.


SQL> select * from t_bbed_modify_row;


A
--------------------
ours




再确认下是不是只要刷新缓冲池才会导至数据变化成功,事实确实如此


BBED> modify /c 'mama' dba 4,99004 offset 8184  
 File: /oracle/oradata/guowang/users01.dbf (4)
 Block: 99004            Offsets: 8184 to 8187           Dba:0x010182bc
------------------------------------------------------------------------
 6d616d61 


 <32 bytes per line>


BBED> dump /v dba 4,99004 offset 8184
 File: /oracle/oradata/guowang/users01.dbf (4)
 Block: 99004   Offsets: 8184 to 8187  Dba:0x010182bc
-------------------------------------------------------
 6d616d61                            l mama


 <16 bytes per line>


BBED> sum dba 4,99004 apply
Check value for File 4, Block 99004:
current = 0x887b, required = 0x887b




SQL> select * from t_bbed_modify_row;


A
--------------------
ours




SQL> alter system flush buffer_cache;


System altered.


SQL> select * from t_bbed_modify_row;


A
--------------------
mama

个人简介:


8年oracle从业经验,具备丰富的oracle技能,目前在国内北京某专业oracle服务公司从事高级技术顾问。
   
   服务过的客户:
          中国电信
          中国移动
          中国联通
          中国电通
          国家电网
          四川达州商业银行
          湖南老百姓大药房
          山西省公安厅
          中国邮政
          北京302医院     
          河北廊坊新奥集团公司
  
 项目经验:
           中国电信3G项目AAA系统数据库部署及优化
           中国联通CRM数据库性能优化
           中国移动10086电商平台数据库部署及优化
           湖南老百姓大药房ERR数据库sql优化项目
           四川达州商业银行TCBS核心业务系统数据库模型设计和RAC部署及优化
           四川达州商业银行TCBS核心业务系统后端批处理存储过程功能模块编写及优化
           北京高铁信号监控系统RAC数据库部署及优化
           河南宇通客车数据库性能优化
           中国电信电商平台核心采购模块表模型设计及优化
           中国邮政储蓄系统数据库性能优化及sql优化
           北京302医院数据库迁移实施
           河北廊坊新奥data guard部署及优化
           山西公安厅身份证审计数据库系统故障评估
         
 联系方式:
          手机:18201115468
          qq   :   305076427
          qq微博: wisdomone1
          新浪微博:wisdomone9
          qq群:275813900    
          itpub博客名称:wisdomone1    http://blog.itpub.net/9240380/


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-1816238/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb qq: 305076427 微博: wisdomone9

注册时间:2008-04-04

  • 博文量
    2149
  • 访问量
    11893103