结论
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博客 ” ,链接:https://blog.itpub.net/9240380/viewspace-1816238/
,如需转载,请注明出处,否则将追究法律责任。