【oracle数据库】通过bbed修改表的数据内容

教程发布:风哥 教程分类:ITPUX技术网 更新日期:2022-02-12 浏览学习:668

虽然bbed 可以在db open 状态来进行修改,但是建议在做任何修改操作之前先关闭数据库。 这样避免checkpoint 进程重写bbed 对block 的修改。 也避免oracle在bbed 修改完成之前读block或者申明block 为corrupt。

1、进入bbed

[oracle@test2:/soft]$bbed parfile=bbed.par
Password: blockedit
BBED: Release 2.0.0.0.0 - Limited Production on Sat Aug 11 08:54:49 2012
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************

BBED> info
File# Name Size(blks)
----- ---- ----------
6 /oracle/app/oracle/oradata/test2db/test201.256.790241825 6400

2、查看要修改的内容

SQL> select * from test01;

ID NAME
---------- ------------------------------------------------------------
1 test
2 test2
3 testlinling

注意:bbed 的修改仅仅是对原有位置内容的一个替换。

对应block 的信息如下:

SQL> select
2 rowid,
3 dbms_rowid.rowid_relative_fno(rowid)rel_fno,
4 dbms_rowid.rowid_block_number(rowid)blockno,
5 dbms_rowid.rowid_row_number(rowid) rowno
6 from test01;

ROWID REL_FNO BLOCKNO ROWNO
------------------ ---------- ---------- ----------
AAATwpAAGAAAACDAAA 6 131 0
AAATwpAAGAAAACDAAB 6 131 1
AAATwpAAGAAAACDAAC 6 131 2

3、查找关键字testlinling,确定其在block中的偏移量offset。

BBED> set dba 6,131 offset 0
DBA 0x01800083 (25165955 6,131)
OFFSET 0

BBED> find /c testlinling
File: /oracle/app/oracle/oradata/test2db/test201.256.790241825 (6)
Block: 131 Offsets: 8156 to 8191 Dba:0x01800083
------------------------------------------------------------------------
7a686f75 6c696e6c 696e672c 000202c1 03037a6c 6c2c0002 02c10204 7a686f75
0206ad64

<32 bytes per line>

dump 查看具体内容

BBED> dump /v
File: /oracle/app/oracle/oradata/test2db/test201.256.790241825 (6)
Block: 131 Offsets: 8156 to 8191 Dba:0x01800083
-------------------------------------------------------
7a686f75 6c696e6c 696e672c 000202c1 l testlinling,....
03037a6c 6c2c0002 02c10204 7a686f75 l ..test2,......test
0206ad64 l ...d

<16 bytes per line>

注意这里面的Offsets:8156 to 8191, 它指的是这一行的一个地址。其中:
z 的offset 是8156
h 的offset 是8157
o 的offset 是8158
u 的offset 是8159
l 的offset 是8160
i 的offset 是8161
n 的offset 是8162
l 的offset 是8163
i 的offset 是8164
n 的offset 是8165
g 的offset 是8166

//空格也算offset。

4、修改block,将testlinling换成testuser

BBED> modify /c 'testuser ' dba 6,131 offset 8156
File: /oracle/app/oracle/oradata/test2db/test201.256.790241825 (6)
Block: 131 Offsets: 8156 to 8191 Dba:0x01800083
------------------------------------------------------------------------
7a686f75 6c696e67 2020202c 000202c1 03037a6c 6c2c0002 02c10204 7a686f75
0206ad64

<32 bytes per line>

BBED> dump /v
File: /oracle/app/oracle/oradata/test2db/test201.256.790241825 (6)
Block: 131 Offsets: 8156 to 8191 Dba:0x01800083
-------------------------------------------------------
7a686f75 6c696e67 2020202c 000202c1 l testuser ,....
03037a6c 6c2c0002 02c10204 7a686f75 l ..test2,......test
0206ad64 l ...d

<16 bytes per line>

//注意这里testuser我用单引号括起来,并且最后还有3个空格,这样就是7个bytes,不用单引号括起来,无法表示空格,验证一下

5、应用变更生效

BBED> sum dba 6,131
Check value for File 6, Block 131:
current = 0xf909, required = 0xbc07

此时 current checksum 是0xf909,requiredchecksum 是0xbc07

BBED> sum dba 6,131 apply
Check value for File 6, Block 131:
current = 0xbc07, required = 0xbc07

加上apply参数,使checksum一致。即之前的修改生效。

BBED> verify
DBVERIFY - Verification starting
FILE = /oracle/app/oracle/oradata/test2db/test201.256.790241825
BLOCK = 131

DBVERIFY - Verification complete

Total Blocks Examined : 1
Total Blocks Processed (Data) : 1
Total Blocks Failing (Data) : 0
Total Blocks Processed (Index): 0
Total Blocks Failing (Index): 0
Total Blocks Empty : 0
Total Blocks Marked Corrupt : 0
Total Blocks Influx : 0
Message 531 not found; product=RDBMS; facility=BBED

我们来检查数据内容的变化:

SQL> alter system flush buffer_cache;

System altered.

SQL> select * from test01;

ID NAME
---------- ------------------------------------------------------------
1 test
2 test2
3 testuser

OK,已经修改成功

本文标签:
网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】
【下一篇】