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

这篇具有很好参考价值的文章主要介绍了[20231026]bbed查看索引kd_off结构的问题.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
--//完全能对上.

文章来源地址https://www.toymoban.com/news/detail-719192.html

到了这里,关于[20231026]bbed查看索引kd_off结构的问题.txt的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ES-Elasticsearch查看所有索引及查看某索引下的信息

    1.查看所有索引,地址栏直接访问下面的连接 http://localhost:9200/_cat/indices?vpretty 2.查看某索引下存的信息,查询的信息为索引结构信息(indexName为索引名称) GET方法:http://127.0.0.1:9200/indexName?pretty 3.查看某个索引下的所有文档数据 GET方法:http://localhost:9200/indexName/_search(需带下

    2024年02月11日
    浏览(35)
  • ES(Kibana)索引拷贝/查看配置信息/查看字段信息/添加新字段/创建索引视图

    kibana - Management - Index Patterns - Create index pattern - 输入索引名称(注意这里的*号为匹配符,若确定某个具体的索引请删除) - Next step - Time Filter field name(选择是否使用时间选择器) - Create index Pattern -完成(在Discover中可查看此视图)

    2024年02月16日
    浏览(47)
  • 索引的创建、查看、删除

    从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 ,索引可以分为 2 种:聚簇索引和非聚簇索引。 按照 作用字段个数 进行划分,分成单列索引和联合索引。 普通索引 在创建普通索引时,不附加任何限制条件,只是

    2024年02月07日
    浏览(28)
  • ES 查看、删除索引命令

    1 、获取 cat命令 列表: 2 、带用户名密码查看索引信息 3、 查看索引信息及空间占用: 4、清理指定索引空间 5、 删除索引 6、删除30天前的索引记录 7、crontab 定时清理30天前数据 8、修改带密码的索引副本数量  

    2024年02月09日
    浏览(40)
  • es 索引操作(创建、查看、删除)

    Elasticsearch采用Rest风格API,因此其API就是一次http请求,只要能发起http请求。 settings:表示索引库设置,其中可以定义索引库的各种属性 比如分片数 副本数等,暂时不设置,都走默认。 GET /索引名称 GET /索引名称1,索引名称2,索引名称3,… 信息就比较多了 #! Deprecation: Elasticse

    2023年04月08日
    浏览(28)
  • 【SQL应知应会】索引(三)• MySQL版:聚簇索引与非聚簇索引;查看索引与删除索引;索引方法

    欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏, 本专栏 主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle ✅今天继续 SQL的索引 的第 3 篇文章,主要讲到了聚簇索引与非聚簇索引、查

    2024年02月11日
    浏览(32)
  • 索引:索引知识重复习,什么是索引、索引的类型、建立索引及【最左匹配原则】、Explain查看sql的执行计划

    开干 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的

    2023年04月09日
    浏览(28)
  • 常规操作elasticSearch查看和索引(存储)数据

    常规操作elasticSearch: 对于elasticSearch的操作 通常用rest API完成 查看所有节点: 示例返回: 查看健康状态: 示例返回: 查看主节点: 示例返回: 查看所有索引(类比mysql查看所数据库): 示例返回: 保存一条数据 put 保存: 注意: put保存必须有id(唯一识别) 示例返回:

    2023年04月08日
    浏览(36)
  • C语言 读取TXT文件并存入结构体数组

    要读取的文件:(数据之间以制表符分割)  定义结构体 文件读取并存入结构体数组:  完整代码:

    2024年02月12日
    浏览(34)
  • SQL server查看各表的索引

    1、要查看 SQL Server 数据库中的索引,可以使用如下 SQL 语句: 这条 SQL 语句查询了系统元数据表,包含了以下信息: - 表名 - 索引名 - 索引类型(聚集索引或非聚集索引) - 是否是唯一索引 - 是否是主键索引 - 索引包含的列名 执行上述 SQL 语句,将返回数据库中所有表的所有

    2024年02月05日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包