首页 > 其他分享 >[20231026]bbed查看索引kd_off结构的问题.txt

[20231026]bbed查看索引kd_off结构的问题.txt

时间:2023-10-30 22:11:38浏览次数:50  
标签:20231026 11 off kd dba 156 offset txt

[20231026]bbed查看索引kd_off结构的问题.txt

--//使用bbed查看索引kd_off结构时存在问题,前面两项指向的偏移不对,从kd_off[2]算起,而且记录的是相对偏移=绝对偏移-kdxle偏移.
--//遗漏的两项可以通过最大的kd_off项记录的地址+2 ,+4 获得.
--//dump offset kd_off[max]+2 count 2
--//dump offset kd_off[max]+4 count 2

--//每次看最后两项比较麻烦,先给dump offset kd_off[max]+2 count 2,然后大小头颠倒, 计算出数字,在此基础上加上kdxle偏移,
--//获得正确的偏移NNNN,然后再使用如下命令查询。
x /rxxx offset  NNNN

--//自己尝试编写脚本实现正确的输出,并附带输出正确的x执行命令格式。主要自己很久不写bash shell脚本,拿来练习。
$ cat kd_off.sh
#! /bin/bash
# display bbed of kd_off structure and x command.
# argument1=dba  argument2=bbed x format

ff="/r"${2}
a=$1

# get kd_off[max-2] and kdxle of address.
kd_off_max=$(echo p dba $a kd_off | rlbbed | grep kd_off | sed -n '$p' |awk '{print substr($3,2)}')
kdxle_offset=$(echo map dba $a | rlbbed | grep kdxle | awk '{print substr($5,2)}')
kd_off_size=$(echo map dba $a| rlbbed | grep 'b2 kd_off' | sed -e 's/^.*\[//;s/].*$//' )
#echo kd_off_max=$kd_off_max kdxle_offset=$kdxle_offset  kd_off_size=$kd_off_size

# get kd_off[max-1] and kd_off[max] of offset
kd_off_offset=$(echo dump dba $a offset $((kd_off_max+2)) count 4 | rlbbed  | grep -A1 --  '----' | sed -n '$p' | tr -d ' \r')
kd_off_offset=$(echo $kd_off_offset)
kd_off_offset1=$(echo $kd_off_offset|awk '{print substr($a,3,2) substr($1,1,2)}')
kd_off_offset2=$(echo $kd_off_offset|awk '{print substr($a,7,2) substr($1,5,2)}')

#echo kd_off_offset=$kd_off_offset kd_off_offset1=$kd_off_offset1 kd_off_offset2=$kd_off_offset2

# display x command
# echo p dba $a kd_off | rlbbed | grep kd_off | sed -n '3,$p' | awk '{print  $2}'| xargs -IQ echo x $ff dba $a '*'Q
seq 2 $((kd_off_size-1)) | xargs -IQ echo x $ff dba $a '*'kd_off[Q]
echo x $ff dba $a offset  $((0x${kd_off_offset1}+kdxle_offset))
echo x $ff dba $a offset  $((0x${kd_off_offset2}+kdxle_offset))
echo " "

# display kd_off structure
echo p dba $a kd_off | rlbbed | grep kd_off | sed -n '3,$p' | awk  -F'[][]' '{printf "%s[%d]%40s\n",$1,$2-2,$3}'
printf "%s %s %34s %9s\n" b2 kd_off[$((kd_off_size-2))]  @$((kd_off_max+2))  $((0x$kd_off_offset1))
printf "%s %s %34s %9s\n" b2 kd_off[$((kd_off_size-1))]  @$((kd_off_max+4))  $((0x$kd_off_offset2))

--//验证测试看看:
1.环境:
SCOTT@test01p> @ver1
PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.2.0.1.0     Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production              0

2.测试:
SCOTT@test01p> @ seg2 pk_emp
SCOTT@test01p> @ pr
==============================
SEG_MB                        : 0
SEG_OWNER                     : SCOTT
SEG_SEGMENT_NAME              : PK_EMP
SEG_PARTITION_NAME            :
SEG_SEGMENT_TYPE              : INDEX
SEG_TABLESPACE_NAME           : USERS
BLOCKS                        : 8
HDRFIL                        : 11
HDRBLK                        : 154
PL/SQL procedure successfully completed.
--//索引的root,叶子在dba=11,155. 使用bbed for windows无法识别数据文件os头,块偏移+1,输入11,156.

BBED> p dba 11,156 kd_off
b2 kd_off[0]                                @132      8036  --//8036+100(kdxle的偏移)=8136 表示索引数据的结尾,中间还
                                                            --//保留8188-8136 = 52,不知道什么用处。
b2 kd_off[1]                                @134      0     --//kd_off[0],kd_off[1]执行的偏移不对,我估计oracle改变了
                                                            --//kdxle结构,这4个字节的内容应该属于kdxle。而bbed版本没
                                                            --//有维护跟上这种调整。
b2 kd_off[2]                                @136      8024
b2 kd_off[3]                                @138      8012
b2 kd_off[4]                                @140      8000
b2 kd_off[5]                                @142      7988
b2 kd_off[6]                                @144      7976
b2 kd_off[7]                                @146      7964
b2 kd_off[8]                                @148      7952
b2 kd_off[9]                                @150      7940
b2 kd_off[10]                               @152      7928
b2 kd_off[11]                               @154      7916
b2 kd_off[12]                               @156      7904
b2 kd_off[13]                               @158      7893

$ ./kd_off.sh  11,156 n
x /rn dba 11,156 *kd_off[2]
x /rn dba 11,156 *kd_off[3]
x /rn dba 11,156 *kd_off[4]
x /rn dba 11,156 *kd_off[5]
x /rn dba 11,156 *kd_off[6]
x /rn dba 11,156 *kd_off[7]
x /rn dba 11,156 *kd_off[8]
x /rn dba 11,156 *kd_off[9]
x /rn dba 11,156 *kd_off[10]
x /rn dba 11,156 *kd_off[11]
x /rn dba 11,156 *kd_off[12]
x /rn dba 11,156 *kd_off[13]
x /rn dba 11,156 offset 7981
x /rn dba 11,156 offset 7969

b2 kd_off[0]                                @136      8024
b2 kd_off[1]                                @138      8012
b2 kd_off[2]                                @140      8000
b2 kd_off[3]                                @142      7988
b2 kd_off[4]                                @144      7976
b2 kd_off[5]                                @146      7964
b2 kd_off[6]                                @148      7952
b2 kd_off[7]                                @150      7940
b2 kd_off[8]                               @152      7928
b2 kd_off[9]                               @154      7916
b2 kd_off[10]                               @156      7904
b2 kd_off[11]                               @158      7893
b2 kd_off[12]                               @160      7881
b2 kd_off[13]                               @162      7869

--//注:前面显示的命令是x命令,后面的显示是正确的kd_off结构,意义不大!!

BBED> x /rn dba 11,156 offset 7981
rowdata[16]                                 @7981
-----------
flag@7981:     0x00 (NONE)
lock@7982:     0x02
keydata[6]:    0x02  0xc0  0x00  0x94  0x00  0x0c
data key:
col    0[3] @7990: 7902

BBED> x /rn dba 11,156 offset 7969
rowdata[4]                                  @7969
----------
flag@7969:     0x00 (NONE)
lock@7970:     0x02
keydata[6]:    0x02  0xc0  0x00  0x94  0x00  0x0d
data key:
col    0[3] @7978: 7934

SCOTT@test01p> select * from (select * from emp order by empno desc) where rownum<=2 ;
     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
      7934 MILLER     CLERK           7782 1982-01-23 00:00:00       1300                    10
      7902 FORD       ANALYST         7566 1981-12-03 00:00:00       3000                    20
--//完全能对上.

标签:20231026,11,off,kd,dba,156,offset,txt
From: https://www.cnblogs.com/lfree/p/17798994.html

相关文章

  • [20231027]Index ITL Limit 2.txt
    [20231027]IndexITLLimit2.txt--//链接https://jonathanlewis.wordpress.com/2022/02/18/index-itl-limit/,重复测试--//如果例子插入语句insertintoitl_limitvalues(200-i_tx_count);--//修改为insertintoitl_limitvalues(i_tx_count);--//采用顺序插入,看看结果如何......
  • [20231023]备库与alter system flush buffer_cache.txt
    [20231023]备库与altersystemflushbuffer_cache.txt--//测试遇到的问题,在备库执行altersystemflushbuffer_cache;刷新数据缓存命令无效.--//通过例子验证:1.环境:[email protected]:1521/orcl>@[email protected]:1521/orcl>@pr==============================P......
  • 恒驰服务 | 华为云数据使能专家服务offering之大数据建设
    恒驰大数据服务主要针对客户在进行智能数据迁移的过程中,存在业务停机、数据丢失、迁移周期紧张、运维成本高等问题,通过为客户提供迁移调研、方案设计、迁移实施、迁移验收等服务内容,支撑客户实现快速稳定上云,有效降低时间成本,保障客户业务不中断,实现业务稳定连续。大数据建设-适用......
  • 恒驰服务 | 华为云数据使能专家服务offering之数仓建设
    恒驰大数据服务主要针对客户在进行智能数据迁移的过程中,存在业务停机、数据丢失、迁移周期紧张、运维成本高等问题,通过为客户提供迁移调研、方案设计、迁移实施、迁移验收等服务内容,支撑客户实现快速稳定上云,有效降低时间成本,保障客户业务不中断,实现业务稳定连续。数仓建设-适用场......
  • ASP.NET Core – DateTime, DateTimeOffset, DateOnly, TimeOnly, TimeSpan, TimeZone
    前言心血来潮,这篇讲点基础的东西。对日期和时区TimeZone不熟悉的读者,请先看这篇 TimeZone,LeapYear,DateFormat,EpochTime时区,闰年,日期格式。 C#中的日期类型DateTime ......
  • Offset多维引用
    问题:为何使用Vlookup套Offset查找三个表中对应结果会出错公式:=VLOOKUP(C12,OFFSET(C4,,{0,3,6},3,2),2,)Offset,以C4为起点,向右分别偏移0、3、6,产生新单元格区域为3行两列,这一结果为多维引用,无法在同一单元格内正常显示Vlookup函数无法提取多维引用的结果多维引用解法1:=SUM......
  • test20231026
    T1这个向下取整是没有用的,所以可以直接暴力dfs。然后要注意一下,如果数组里有\(1\),你需要直接跳过,不然\(1\)可以使用无数次。inlineintksm(inta,intb){ intres=1; while(b){ if(b&1)res=res*a; a=a*a; b>>=1; } returnres;}intn,m;vector<int>a;unord......
  • Microsoft Office 2016 for Mac 中文汉化版下载 Office办公软件
    MicrosoftOffice2016MAC版是一款专业好用的办公软件,MicrosoftOffice2016MAC官方版包括Word、Excel、PowerPoint、OneNote和Outlook等组件,完美支持OSXElCapitan、Yosemite以及Retina高分辨率视网膜屏幕。软件地址:看置顶贴office2016mac功能介绍1、Word创建、完善和......
  • 无涯教程-Clojure - send-off函数
    在某些情况下,为代理分配了实际上是阻止的函数。一个简单的示例是,考虑您正在从本质上是阻塞的文件中读取内容。send-off-语法(sendagentnamefunctionvalue)参数   - "agentname"是将发送函数重定向到的代理,"function"用于确定更改代理价值的方式,"value"是传递......
  • 20231026打卡·
    上午的课程是算法与数据结构中的图。图是一种非常重要的数据结构,用于描述事物之间的关系和连接。在这门课上,我们学习了图的基本概念、表示方法以及常见的图算法。通过理论讲解和实践编程练习,我对图的理解和应用有了更深入的认识。图算法对于解决许多实际问题都非常有用,我会在日常......