[20251117]使用bbed p dba命令遇到的问题.txt
--//前几天使用bbed遇到的问题,就是p命令的dba格式问题,做一个记录,只能讲bbed的一些行为有一些怪异。
--//好长时间不使用有点生疏了。
1.环境:
SCOTT@book01p> @ ver2
==============================
PORT_STRING : x86_64/Linux 2.4.xx
VERSION : 21.0.0.0.0
BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID : 0
PL/SQL procedure successfully completed.
2.使用dept表说明问题。
SCOTT@book01p> select rowid,dept.* from dept;
ROWID DEPTNO DNAME LOC
------------------ ---------- ------------- -------------
AAASmfAAMAAAACDAAA 10 ACCOUNTING NEW YORK
AAASmfAAMAAAACDAAB 20 RESEARCH DALLAS
AAASmfAAMAAAACDAAC 30 SALES CHICAGO
AAASmfAAMAAAACDAAD 40 OPERATIONS BOSTON
SCOTT@book01p> @ rowid AAASmfAAMAAAACDAAA
DATA_OBJECT_ID FILE BLOCK ROW ROWID_DBA DBA TEXT
-------------- ---------- ---------- ---------- -------------------- -------------------- --------------------------------------------------
76191 12 131 0 0x3000083 12,131 alter system dump datafile 12 block 131 ;
3.问题说明:
BBED> set dba 12,131
DBA 0x03000083 (50331779 12,131)
BBED> set dba 0x3000083
DBA 0x03000083 (50331779 12,131)
BBED> set dba 50331779
DBA 0x03000083 (50331779 12,131)
--//可以发现使用以上三种格式没有任何问题,后面指向的数据块都是一样的,但是p命令就非常特别,以前没有注意。
BBED> help p
PRINT[/x|d|u|o|c] [ DBA | FILE | FILENAME | BLOCK | OFFSET | symbol | *symbol ]
BBED> P dba 12,131 kdbr
sb2 kdbr[0] @118 8062
sb2 kdbr[1] @120 8040
sb2 kdbr[2] @122 8020
sb2 kdbr[3] @124 7996
BBED> p dba 12,131 kdbr
sb2 kdbr[0] @118 8062
sb2 kdbr[1] @120 8040
sb2 kdbr[2] @122 8020
sb2 kdbr[3] @124 7996
--//大小写都没有问题。
BBED> p dba 50331779 kdbr
BBED-00207: invalid offset specifier (dba)
BBED> p dba 0x03000083 kdbr
BBED-00207: invalid offset specifier (dba)
--//可以发现p命令带入10进制或者16进制数值都会报错。BBED-00207: invalid offset specifier (dba)
$ oerr BBED 00207
0207, 1, "invalid offset specifier (%s)"
// *Cause: The specified symbol is not in the block or the indirect offset
// value is out of range.
--//测试x命令看看:
BBED> x /rncc dba 12,131 *kdbr[0]
rowdata[66] @8162
-----------
flag@8162: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8163: 0x00
cols@8164: 3
col 0[2] @8165: 10
col 1[10] @8168: ACCOUNTING
col 2[8] @8179: NEW YORK
BBED> x /rncc dba 50331779 *kdbr[0]
rowdata[66] @8162
-----------
flag@8162: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8163: 0x00
cols@8164: 3
col 0[2] @8165: 10
col 1[10] @8168: ACCOUNTING
col 2[8] @8179: NEW YORK
BBED> x /rncc dba 0x03000083 *kdbr[0]
rowdata[66] @8162
-----------
flag@8162: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8163: 0x00
cols@8164: 3
col 0[2] @8165: 10
col 1[10] @8168: ACCOUNTING
col 2[8] @8179: NEW YORK
--//x命令就支持3种格式。x命令没问题。
--//看看assign命令如何:
BBED> x /rncc dba 0x03000083 *kdbr[0]
rowdata[66] @8162
-----------
flag@8162: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8163: 0x00
cols@8164: 3
col 0[2] @8165: 10
col 1[10] @8168: ACCOUNTING
col 2[8] @8179: NEW YORK
BBED> assign dba 0x03000083 offset 8162=0x3c
Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y
ub1 rowdata[0] @8162 0x3c
BBED> x /rncc dba 50331779 *kdbr[0]
rowdata[66] @8162
-----------
flag@8162: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)
lock@8163: 0x00
cols@8164: 0
--//加入删除标识,看不见相关记录信息。
BBED> assign dba 50331779 offset 8162=0x2c
ub1 rowdata[0] @8162 0x2c
BBED> x /rncc dba 50331779 *kdbr[0]
rowdata[66] @8162
-----------
flag@8162: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8163: 0x00
cols@8164: 3
col 0[2] @8165: 10
col 1[10] @8168: ACCOUNTING
col 2[8] @8179: NEW YORK
--//我看了以前的工作日志,发现bbed for windows使用assign dba 0x03000083这样的方式不行。
BBED> assign /x dba 11,332 tailchk = fd040602
ub4 tailchk @8188 0xfd040602
BBED> assign /x dba 0x02c0014c tailchk = fd040602
BBED-00207: invalid offset specifier (dba)
--//还可以发现bbed for windows支持0x8开头的修改,linux的版本不行。
--//继续测试:
BBED> set dba 12,131
DBA 0x03000083 (50331779 12,131)
BBED> p dba 12,131 tailchk
ub4 tailchk @8188 0xf9bb0601
BBED> assign dba 12,131 tailchk = 0xf9bb0601
BBED-00207: invalid offset specifier (f9bb0601)
BBED> assign dba 12,131 tailchk = 0x89bb0601
BBED-00207: invalid offset specifier (89bb0601)
BBED> assign dba 12,131 tailchk = 0x79bb0601
ub4 tailchk @8188 0x79bb0601
--//仅仅支持开头最大0x7.
BBED> modify /x f9 dba 12,131 offset 8191
File: /u01/oradata/BOOK/book01p/users01.dbf (12)
Block: 131 Offsets: 8191 to 8191 Dba:0x03000083
---------------------------------------------------------------
f9
<64 bytes per line>
--//注意大小头问题,实际上修改偏移offset = 8191.
BBED> p dba 12,131 tailchk
ub4 tailchk @8188 0xf9bb0601
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3102516/ ,如需转载,请注明出处,否则将追究法律责任。