[20140624]bbed修改数据记录(不等长).txt

[20140624]bbed修改数据记录(不等长).txt

http://www.itpub.net/thread-1872851-1-1.html

--给出的问题修改记录时,长度没有变化,如果存在变化,修改与原来的不同,要修改kdbr[0]的值.
--还有一些细节的步骤.

SCOTT@test> @ver

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

create table itpub_t1 (id int,name varchar2(100));
insert into itpub_t1 values(1,'AAAAA');
insert into itpub_t1 values(2,'BBBBB');
commit;
alter system checkpoint;

SCOTT@test> SCOTT@test> select rowid,itpub_t1.* from itpub_t1;
ROWID                      ID NAME
------------------ ---------- --------------------
AABF2LAAEAAAAJEAAA          1 AAAAA
AABF2LAAEAAAAJEAAB          2 BBBBB

SCOTT@test> @lookup_rowid  AABF2LAAEAAAAJEAAA
    OBJECT       FILE      BLOCK        ROW DBA                  TEXT
---------- ---------- ---------- ---------- -------------------- ----------------------------------------
    286091          4        580          0 4,580                alter system dump datafile 4 block 580 ;

--bbed观察:
BBED> set dba 4,580
        DBA             0x01000244 (16777796 4,580)

BBED> p *kdbr[0]
rowdata[12]
-----------
ub1 rowdata[12]                             @8176     0x2c

BBED> x /rnc
rowdata[12]                                 @8176
-----------
flag@8176: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8177: 0x01
cols@8178:    2

col    0[2] @8179: 1
col    1[5] @8182: AAAAA
-- 行记录偏移在8176.

update itpub_t1 set name='1234' where name='AAAAA';
commit;

SCOTT@test> select rowid,itpub_t1.* from itpub_t1;
ROWID                      ID NAME
------------------ ---------- --------------------
AABF2LAAEAAAAJEAAA          1 1234
AABF2LAAEAAAAJEAAB          2 BBBBB

alter system checkpoint;

--bbed观察:
BBED> set dba 4,580
        DBA             0x01000244 (16777796 4,580)

BBED> p *kdbr[0]
rowdata[0]
----------
ub1 rowdata[0]                              @8153     0x2c

BBED> x /rnc
rowdata[0]                                  @8153
----------
flag@8153: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8154: 0x02
cols@8155:    2

col    0[2] @8156: 1
col    1[4] @8159: 1234

BBED> set offset 8176
        OFFSET          8176

BBED> x /rnc
rowdata[23]                                 @8176
-----------
flag@8176: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8177: 0x00
cols@8178:    2

col    0[2] @8179: 1
col    1[5] @8182: AAAAA

--要恢复回来,仅仅需要修改kdbr[0] 的值=8076(少100,后面有说明).就ok了.
--关闭数据库来操作看看.

BBED> p kdbr
sb2 kdbr[0]                                 @118      8053
sb2 kdbr[1]                                 @120      8064

--修改kdbr[0]=8076,而不是8176[注意要减少100.]
--这个很容易观察,看现在的kdbr[0]=8053,对比前面的p *kdbr[0]看到的偏移量为8153,说明记录的是相对偏移量.

BBED> p kdbr[0]
sb2 kdbr[0]                                 @118      8053

BBED> dump /v count 2
File: /u01/app/oracle11g/oradata/test/users01.dbf (4)
Block: 580   Offsets:  118 to  119                                      Dba:0x01000244
-----------------------------------------------------------------------------------------
751f                                  l u.

SYS@testdg> @10to16 8053
10 to 16 HEX   REVERSE16
-------------- ------------------
0000000001f75 0x751f0000
--正好对上的.注意修改时要小头在前(我的cpu是intel系列的).

SYS@testdg> @10to16 8076
10 to 16 HEX   REVERSE16
-------------- ------------------
0000000001f8c 0x8c1f0000

BBED> modify  /x  8c1f offset 118
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
File: /u01/app/oracle11g/oradata/test/users01.dbf (4)
Block: 580  Offsets:  118 to  119                           Dba:0x01000244
----------------------------------------------------------------------------
8c1f

BBED> p kdbr[0]
sb2 kdbr[0]                                 @118      8076

BBED> p *kdbr[0]
rowdata[23]
-----------
ub1 rowdata[23]                             @8176     0x2c

BBED> x /rnc
rowdata[23]                                 @8176
-----------
flag@8176: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8177: 0x00
cols@8178:    2

col    0[2] @8179: 1
col    1[5] @8182: AAAAA

--已经指向了修改的位置,并且修改正确.

BBED> sum apply
Check value for File 4, Block 580:
current = 0x8473, required = 0x8473

BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app/oracle11g/oradata/test/users01.dbf
BLOCK = 580

Block Checking: DBA = 16777796, Block Type = KTB-managed data block
data header at 0x2a98318264
kdbchk: xaction header lock count mismatch
        trans=2 ilk=1 nlo=0
Block 580 failed with check code 6108

DBVERIFY - Verification complete

Total Blocks Examined         : 1
Total Blocks Processed (Data) : 1
Total Blocks Failing   (Data) : 1
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

--依旧存在问题,没有修改正确.
--仔细观察lock@8154: 0x02 ,lock@8177: 0x00 不同,难道11g提交并没有清楚这个标志吗?

BBED> modify  /x  02 offset 8177
BBED> modify  /x  00 offset 8154

BBED> sum apply
Check value for File 4, Block 580:
current = 0x8671, required = 0x8671

BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app/oracle11g/oradata/test/users01.dbf
BLOCK = 580

Block Checking: DBA = 16777796, Block Type = KTB-managed data block
data header at 0x2a98318264
kdbchk: the amount of space used is not equal to block size
        used=46 fsc=1 avsp=8042 dtl=8088
Block 580 failed with check code 6110

DBVERIFY - Verification complete

Total Blocks Examined         : 1
Total Blocks Processed (Data) : 1
Total Blocks Failing   (Data) : 1
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

--还有有问题.好像记录长度变化,导致一些记录信息不对.

BBED> p kdbh
struct kdbh, 14 bytes                       @100
   ub1 kdbhflag                             @100      0x00 (NONE)
   sb1 kdbhntab                             @101      1
   sb2 kdbhnrow                             @102      2
   sb2 kdbhfrre                             @104     -1
   sb2 kdbhfsbo                             @106      22
   sb2 kdbhfseo                             @108      8053
   sb2 kdbhavsp                             @110      8042
   sb2 kdbhtosp                             @112      8043

BBED> dump /v offset 110 count 4
File: /u01/app/oracle11g/oradata/test/users01.dbf (4)
Block: 580                                                         Offsets:  110 to  113                                                      Dba:0x01000244
---------------------------------------------------------------------------------------------------------------------------------------------------------------
6a1f6b1f                                                                                                    l j.k.

BBED> modify /x 6b1f offset 110
File: /u01/app/oracle11g/oradata/test/users01.dbf (4)
Block: 580                                                                    Offsets:  110 to  113                                                                 Dba:0x01000244
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6b1f6b1f

BBED> sum apply

BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app/oracle11g/oradata/test/users01.dbf
BLOCK = 580

Block Checking: DBA = 16777796, Block Type = KTB-managed data block
data header at 0x2a98318264
kdbchk: the amount of space used is not equal to block size
        used=46 fsc=1 avsp=8043 dtl=8088
Block 580 failed with check code 6110

DBVERIFY - Verification complete

BBED>  p ktbbhitl
struct ktbbhitl[0], 24 bytes                @44
   struct ktbitxid, 8 bytes                 @44
      ub2 kxidusn                           @44       0x0005
      ub2 kxidslt                           @46       0x0008
      ub4 kxidsqn                           @48       0x00005d6c
   struct ktbituba, 8 bytes                 @52
      ub4 kubadba                           @52       0x00c003b3
      ub2 kubaseq                           @56       0x1ff2
      ub1 kubarec                           @58       0x08
   ub2 ktbitflg                             @60       0x8000 (KTBFCOM)
   union _ktbitun, 2 bytes                  @62
      sb2 _ktbitfsc                         @62       0
      ub2 _ktbitwrp                         @62       0x0000
   ub4 ktbitbas                             @64       0xc2e7c553
struct ktbbhitl[1], 24 bytes                @68
   struct ktbitxid, 8 bytes                 @68
      ub2 kxidusn                           @68       0x0005
      ub2 kxidslt                           @70       0x0012
      ub4 kxidsqn                           @72       0x00005d70
   struct ktbituba, 8 bytes                 @76
      ub4 kubadba                           @76       0x00c003b7
      ub2 kubaseq                           @80       0x1ff2
      ub1 kubarec                           @82       0x0a
   ub2 ktbitflg                             @84       0x2001 (KTBFUPB)
   union _ktbitun, 2 bytes                  @86
      sb2 _ktbitfsc                         @86       1
      ub2 _ktbitwrp                         @86       0x0001
   ub4 ktbitbas                             @88       0xc2e7c87f

--修改以下位置为0
      sb2 _ktbitfsc                         @86       1
      ub2 _ktbitwrp                         @86       0x0001

BBED> modify /x 00 offset 86
File: /u01/app/oracle11g/oradata/test/users01.dbf (4)
Block: 580                                                                    Offsets:   86 to   89                                                                 Dba:0x01000244
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
00007fc8

--
BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app/oracle11g/oradata/test/users01.dbf
BLOCK = 580

Block Checking: DBA = 16777796, Block Type = KTB-managed data block
data header at 0x2a9835e264
kdbchk: the amount of space used is not equal to block size
        used=46 fsc=0 avsp=8043 dtl=8088
Block 580 failed with check code 6110

--依旧不行.修好avsp=8042看看.

BBED> modify /x 6a1f offset 110
File: /u01/app/oracle11g/oradata/test/users01.dbf (4)
Block: 580                                                                    Offsets:  110 to  113                                                                 Dba:0x01000244
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6a1f6b1f

BBED> modify /x 6a1f offset 112
File: /u01/app/oracle11g/oradata/test/users01.dbf (4)
Block: 580                                                                    Offsets:  112 to  115                                                                 Dba:0x01000244
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
6a1f0000

BBED> sum apply
Check value for File 4, Block 580:
current = 0x8671, required = 0x8671

BBED> verify
DBVERIFY - Verification starting
FILE = /u01/app/oracle11g/oradata/test/users01.dbf
BLOCK = 580

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

--ok通过.

查看数据库:

SCOTT@test> select rowid,itpub_t1.* from itpub_t1;

ROWID                      ID NAME
------------------ ---------- --------------------
AABF2LAAEAAAAJEAAA          1 AAAAA
AABF2LAAEAAAAJEAAB          2 BBBBB

时间: 2024-09-20 07:58:02

[20140624]bbed修改数据记录(不等长).txt的相关文章

[20160526]bbed修改数据记录(不等长).txt

[20160526]bbed修改数据记录(不等长).txt --以前做的测试,有点乱,当时没有很好的理解快速提交.而且做的很乱,链接如下: http://blog.itpub.net/267265/viewspace-1193074/ --今天重复测试看看: 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ ------

[20170412]bbed隐藏数据记录.txt

[20170412]bbed隐藏数据记录.txt --上午做了bbed恢复修改记录(不等长)的情况,http://blog.itpub.net/267265/viewspace-2137082/ --下午做一个隐藏数据记录的情况,实际上这样做有点多余,就是删除命令,看看bbed是否可以完成. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER --------------------

[20170412]bbed恢复修改记录(不等长).txt

[20170412]bbed恢复修改记录(不等长).txt --//昨天做了删除记录恢复测试,今天测试update记录如何还原通过bbed. --//实际上类似的测试我自己做了好几次,都是按照别人的帖子依葫芦画瓢,没有很好理解一些内在的东西. http://blog.itpub.net/267265/viewspace-2137000/ http://blog.itpub.net/267265/viewspace-2107060/ http://blog.itpub.net/267265/vie

[20150527]bbed与数据块检查和2.txt

[20150527]bbed与数据块检查和2.txt http://blog.itpub.net/267265/viewspace-1666781/ --我现在基本拿bbed学习,基本是拿bbed查看,而使用bvi修改数据.我感觉这种方便1写. --实际上使用bbed的好处就是修改数据块检查和不一致,而使用bbed修改很简单仅仅需要执行sum apply就ok了. --对比dbv与bbed确定检查和位置. --实际上既然检查和在16,17字节,只要清零,加上dbv就很容易确定要修改的内容. 1.

[20160407]bbed修改文件头2(补充).txt

[20160407]bbed修改文件头2(补充).txt --昨天被别人问一个问题,就是我的测试修改数据文件相应的CHECKPOINT_CHANGE#就ok了.偏移量是block=1的offset=484. --链接 http://blog.itpub.net/267265/viewspace-2075424/ --不过别人问的是这个时间是如何存储的.我以前也做过一些.链接: --http://blog.itpub.net/267265/viewspace-746222/ --我的感觉在11.2

ASP编程入门进阶(二十):ADO组件之修改数据记录

ado|编程|数据|ado 再来小总结一下:对数据库的操作无非就是显示记录,插入记录,修改记录,删除记录,查询记录. 并且在有关显示记录的时候还涉及到显示的输出格式.分页程序,那么再结合插入记录,一个简单的新闻系统,文章系统,留言系统,注册登陆系统不成任何问题. 下面就涉及到管理这块,需要对数据库记录进行修改. 首先,要修改哪条 修改,不是笼而统之的,而是要针对某条具体对相应修改.可以形象地说,就是对数据库表中的具体哪一行进行具体的修改.所以,这时候的记录集就有它特定的某个,当然这个主要还是由S

ASP编程入门进阶(二十):ADO组件之修改数据记录_ASP基础

再来小总结一下:对数据库的操作无非就是显示记录,插入记录,修改记录,删除记录,查询记录. 并且在有关显示记录的时候还涉及到显示的输出格式.分页程序,那么再结合插入记录,一个简单的新闻系统,文章系统,留言系统,注册登陆系统不成任何问题. 下面就涉及到管理这块,需要对数据库记录进行修改. 首先,要修改哪条 修改,不是笼而统之的,而是要针对某条具体对相应修改.可以形象地说,就是对数据库表中的具体哪一行进行具体的修改.所以,这时候的记录集就有它特定的某个,当然这个主要还是由SQL语句来决定的. 比如 s

【BBED】使用bbed修改数字类型数据

bbed的使用(一)  介绍了BBED的编译安装. bbed的使用(二)  介绍了bbed的语法规则和常用命令的使用. bbed的使用(三)  介绍了bbed的命令. 如何修改字符类型的数据,使用bbed修改数据表中字符类型的数据 下面介绍使用bbed修改数字类型数据 yangobj表是有scott下的emp经过CTAS创建. 修改前: SQL> select * from yangobj;      EMPNO ENAME                          JOB      

【BBED】使用bbed 修改data block Block Misplaced

使用bbed 修改数据块物理校验出错的问题. SQL> select * from yangtab; select * from yangtab               * ERROR at line 1: ORA-01578: ORACLE data block corrupted (file # 4, block # 388) ORA-01110: data file 4: '/opt/oracle/oradata/orcl/users01.dbf' 使用dbv 进行验证. oracle