[20231026]bbed查看索引kd_off結構的問題.txt

来源:https://www.cnblogs.com/lfree/archive/2023/10/30/17798994.html
-Advertisement-
Play Games

抄襲轉載的太多,請認準原文鏈接:xtrabackup 的介紹與使用 前言 在網上找到教程都是複製粘貼抄襲的,而且還是陳舊資料,不得不說,當前中文互聯網環境真是每況愈下。 如果你在網上找 xtrabackup 的教程,大概率會為你介紹 innobackupex。但在最新的 2.4 版本中,innoba ...


[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
--//完全能對上.
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. equels和==的區別 equals方法用於比較對象的內容是否相等,可以根據自定義的邏輯來定義相等的條件,而==操作符用於比較對象的引用是否相等,即它們是否指向同一塊記憶體地址。equals方法是一個 實例方法,可以被所有的Java對象調用,而==操作符可以用於比較對象的引用或基本數據類型的值 ...
  • 什麼是模塊? 將模塊視為代碼庫。模塊是一個包含一組函數的文件,您想要在應用程式中包含這些函數。 創建一個模塊 要創建一個模塊,只需將要包含在其中的代碼保存在擴展名為 .py 的文件中: 示例:將以下代碼保存在名為 mymodule.py 的文件中: def greeting(name): print ...
  • docker部署是主流的部署方式,極大的方便了開發部署環境,保持了環境的統一,也是實現自動化部署的前提。 1 項目的目錄結構 package: 點擊打包,生成 xxx-SNAPSHOT.jar target目錄: 打包生成目錄,生成的jar存放位置 Dockerfile: 跟項目根目錄同級 2 創建 ...
  • RSA演算法是一種非對稱加密演算法,由三位數學家`Rivest`、`Shamir`和`Adleman`共同發明,以他們三人的名字首字母命名。RSA演算法的安全性基於大數分解問題,即對於一個非常大的合數,將其分解為兩個質數的乘積是非常困難的。RSA演算法是一種常用的非對稱加密演算法,與對稱加密演算法不同,RSA算... ...
  • 可能有幾種原因導致這種情況。以下是一些常見的問題和可能的解決方法: 證書驗證問題: 當你使用mitmproxy抓包時,它通常會生成自簽名的SSL證書,以便進行中間人攻擊檢查。但在Python中使用requests庫時,預設情況下,它會驗證SSL證書的有效性。你需要禁用SSL驗證,以便使用mitmpr ...
  • 背景 由於我個人電腦是2020款m1,16G,256G。一方面,平時除了運行多個瀏覽器,還有coding 編輯器等等,記憶體確實很緊張。其次呢,m1 是ARM的架構,所以構建的鏡像是無法在X86的機器上運行的。所以我嘗試將docker引擎和client分開。 第一步:下載二進位docker 客戶端文件 ...
  • Tabby是一個開源免費軟體,支持Windows、macOS和Linux系統。它提供了一個高度可定製的終端界面,可以通過多種方式添加、切換和關閉終端標簽頁。能與 Linux 伺服器輕鬆傳輸文件,支持多種主題,界面炫酷,插件豐富。它還支持通過插件擴展其功能,例如增強的滾動條、批量複製和粘貼等功能。 ...
  • 1. Groovy 1.1. Java編程語言的一個超集 1.2. Gremlin Console的一個特性是能和Groovy配合使用 1.2.1. Gremlin Console會自動地迭代結果 1.3. 從技術上說,Gremlin Console就是Groovy互動式解釋器(read-eval- ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...