91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle數據塊格式有哪幾部分

發布時間:2021-11-05 15:38:03 來源:億速云 閱讀:150 作者:iii 欄目:關系型數據庫

本篇內容主要講解“Oracle數據塊格式有哪幾部分”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Oracle數據塊格式有哪幾部分”吧!

數據塊結構
Oracle 數據塊有三部分:
Cache layer
Transaction layer
Data layer

Oracle Data Block的結構簡圖如下,其中從Data header到Row Data部分合稱Data Layer:

---------------------
- Cache Layer -
---------------------
- Transaction Layer -
---------------------
- Data Header -
---------------------
- Table Directory -
---------------------
- Row Directory -
---------------------
- Free Space -
---------------------
- Row Data -
---------------------
- Tailchk -
---------------------
下面將使用bbed工具來顯示相關結構信息

BBED> map
 File: /u01/app/oracle/oradata/shardcat/users01.dbf (7)
 Block: 135                                   Dba:0x01c00087
------------------------------------------------------------
 KTB Data Block (Table/Cluster)
 struct kcbh, 20 bytes                      @0
 struct ktbbh, 72 bytes                     @20
 struct kdbh, 14 bytes                      @100
 struct kdbt[1], 4 bytes                    @114
 sb2 kdbr[8]                                @118
 ub1 freespace[7983]                        @134
 ub1 rowdata[71]                            @8117
 ub4 tailchk                                @8188

數據塊組件
Oracle數據塊三層C結構,它被映射到SGA kcbh(內核緩存數據塊頭)中的數據塊。Cache Layer包含關于塊格式,類型(數據,索引,頭等)信息和序列數據。

BBED> p kcbh
struct kcbh, 20 bytes                       @0
   ub1 type_kcbh                            @0        0x06
   ub1 frmt_kcbh                            @1        0xa2
   ub2 wrp2_kcbh                            @2        0x0000
   ub4 rdba_kcbh                            @4        0x01c00087
   ub4 bas_kcbh                             @8        0x01286184
   ub2 wrp_kcbh                             @12       0x0000
   ub1 seq_kcbh                             @14       0x01
   ub1 flg_kcbh                             @15       0x06 (KCBHFDLC, KCBHFCKV)
   ub2 chkval_kcbh                          @16       0x0137
   ub2 spare3_kcbh                          @18       0x0000

Cache Layer:Block的第一部分,長度為20字節,內部數據結構名為kcbh,包括
type_kcbh:塊類型(table/index,rollback segment,temporary segment等)
frmt_kcbh:塊格式(v6,v7,v8)
rdba_kcbh:塊地址DBA
bas_kcbh/wrp_kcbh:SCN
seq_kcbh:塊的序列號
flg_kcbh:塊的標志

事務層存儲了關于數據塊的事務信息
Transaction Layer:內部結構名ktbbh。分成兩部分,第一部分為固定長度,長度為24字節,包含事務相關的一些基本信息。第二部分為可變長度,包含itl,長度根據itl條目的個數變化,每個itl長度為24字節,內部結構名ktbbhitl

BBED> p ktbbh
struct ktbbh, 72 bytes                      @20
   ub1 ktbbhtyp                             @20       0x01 (KDDBTDATA)
   union ktbbhsid, 4 bytes                  @24
      ub4 ktbbhsg1                          @24       0x0001af27
      ub4 ktbbhod1                          @24       0x0001af27
   struct ktbbhcsc, 8 bytes                 @28
      ub4 kscnbas                           @28       0x01286182
      ub2 kscnwrp                           @32       0x8000
      ub2 kscnwrp2                          @34       0x0000
   sb2 ktbbhict                             @36       7938
   ub1 ktbbhflg                             @38       0x32 (NONE)
   ub1 ktbbhfsl                             @39       0x00
   ub4 ktbbhfnx                             @40       0x01c00080
   struct ktbbhitl[0], 24 bytes             @44
      struct ktbitxid, 8 bytes              @44
         ub2 kxidusn                        @44       0x0006
         ub2 kxidslt                        @46       0x0012
         ub4 kxidsqn                        @48       0x000038f6
      struct ktbituba, 8 bytes              @52
         ub4 kubadba                        @52       0x010002d9
         ub2 kubaseq                        @56       0x10c9
         ub1 kubarec                        @58       0x09
      ub2 ktbitflg                          @60       0x8000 (KTBFCOM)
      union _ktbitun, 2 bytes               @62
         sb2 _ktbitfsc                      @62      -32768
         ub2 _ktbitwrp                      @62       0x8000
      ub4 ktbitbas                          @64       0x01228dbb
   struct ktbbhitl[1], 24 bytes             @68
      struct ktbitxid, 8 bytes              @68
         ub2 kxidusn                        @68       0x0008
         ub2 kxidslt                        @70       0x001b
         ub4 kxidsqn                        @72       0x00003a9a
      struct ktbituba, 8 bytes              @76
         ub4 kubadba                        @76       0x010002b5
         ub2 kubaseq                        @80       0x114f
         ub1 kubarec                        @82       0x20
      ub2 ktbitflg                          @84       0x2001 (KTBFUPB)
      union _ktbitun, 2 bytes               @86
         sb2 _ktbitfsc                      @86       10
         ub2 _ktbitwrp                      @86       0x000a
      ub4 ktbitbas                          @88       0x01286184

這種結構出現在數據庫每個數據塊的開頭部分。它甚至出現在不由redo改變的排序塊中。它也會出現在數據文件頭塊和控制文件頭塊的開頭部分。緩存層提供了對壞數據的規模。它也用來確保正確的數據塊被讀取并且數據塊沒有破裂或損壞。所謂破裂的數據塊就是只有一部分被寫入磁盤,數據塊的一部分保留了之前的版本。

Data Layer:包括Data Header,Table Directory,Row Directory,Free Space和Row Data。

Data Header:長度14字節,內部數據結構名kdbh

BBED> p kdbh
struct kdbh, 14 bytes                       @100
   ub1 kdbhflag                             @100      0x00 (NONE)
   sb1 kdbhntab                             @101      1
   sb2 kdbhnrow                             @102      8
   sb2 kdbhfrre                             @104     -1
   sb2 kdbhfsbo                             @106      34
   sb2 kdbhfseo                             @108      8017
   sb2 kdbhavsp                             @110      7977
   sb2 kdbhtosp                             @112      7989

其中kdbhnrow是存儲在數據塊中的記錄數為8,而表中確實有8條記錄。(從ROWID可以判斷出來)

SQL> select dbms_rowid.rowid_block_number(rowid),t1.t_id,t1.t_name from jy.t1;
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)       T_ID T_NAME
------------------------------------ ---------- ----------------------------------------
                                 134          9 YYL
                                 135          1 A
                                 135          2 B
                                 135          3 C
                                 135          4 D
                                 135          5 E
                                 135          6 F
                                 135          7 JYHY
                                 135          8 JYYYL
9 rows selected.

Table Directory: 一般table只有一個條目,cluster則有一個或多個條目。每個條目長4字節,內部數據結構名kdbt

BBED> p kdbt
struct kdbt[0], 4 bytes                     @114
   sb2 kdbtoffs                             @114      0
   sb2 kdbtnrow                             @116      8

Row Directory:數目由塊中數據的行數決定,每個條目長2字節,內部數據結構名kdbr

BBED> p kdbr
sb2 kdbr[0]                                 @118      8080
sb2 kdbr[1]                                 @120      8072
sb2 kdbr[2]                                 @122      8064
sb2 kdbr[3]                                 @124      8056
sb2 kdbr[4]                                 @126      8048
sb2 kdbr[5]                                 @128      8040
sb2 kdbr[6]                                 @130      8029
sb2 kdbr[7]                                 @132      8017

查看表中的記錄數據,一個重復計數也可以被指定用來重復執行examine命令來檢查后續的行記錄。下面的例子顯示了先使用print命令來設置最后一行記錄的偏移量,然后檢查后面的8行記錄的操作.

BBED> p *kdbr[7]
rowdata[0]
----------
ub1 rowdata[0]                              @8117     0x2c
BBED> x /8rnc
rowdata[0]                                  @8117
----------
flag@8117: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8118: 0x02
cols@8119:    2
col    0[2] @8120: 8
col    1[5] @8123: JYYYL
rowdata[12]                                 @8129
-----------
flag@8129: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8130: 0x00
cols@8131:    2
col    0[2] @8132: 7
col    1[4] @8135: JYHY
rowdata[23]                                 @8140
-----------
flag@8140: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8141: 0x00
cols@8142:    2
col    0[2] @8143: 6
col    1[1] @8146: F
rowdata[31]                                 @8148
-----------
flag@8148: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8149: 0x00
cols@8150:    2
col    0[2] @8151: 5
col    1[1] @8154: E
rowdata[39]                                 @8156
-----------
flag@8156: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8157: 0x00
cols@8158:    2
col    0[2] @8159: 4
col    1[1] @8162: D
rowdata[47]                                 @8164
-----------
flag@8164: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8165: 0x00
cols@8166:    2
col    0[2] @8167: 3
col    1[1] @8170: C
rowdata[55]                                 @8172
-----------
flag@8172: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8173: 0x00
cols@8174:    2
col    0[2] @8175: 2
col    1[1] @8178: B
rowdata[63]                                 @8180
-----------
flag@8180: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8181: 0x00
cols@8182:    2
col    0[2] @8183: 1
col    1[1] @8186: A

Free Space:表示數據塊中可用空間,內部數據結構名freespace

Row Data:表示實際的數據,內部數據結構名rowdata

BBED> p rowdata[0]
ub1 rowdata[0]                              @8117     0x2c
BBED> d /v offset 8117
 File: /u01/app/oracle/oradata/shardcat/users01.dbf (7)
 Block: 135     Offsets: 8117 to 8191  Dba:0x01c00087
-------------------------------------------------------
 2c020202 c109054a 5959594c 2c000202 l ,......JYYYL,...
 c108044a 5948592c 000202c1 0701462c l ...JYHY,......F,
 000202c1 0601452c 000202c1 0501442c l ......E,......D,
 000202c1 0401432c 000202c1 0301422c l ......C,......B,
 000202c1 02014101 068461            l ......A...a
 <16 bytes per line>

Tailchk:保存在塊結尾用于校驗的數據,長度4個字節,內部結構名tailchk。所有Oracle塊的最后四個字節都是tail check(結尾檢查)。
對于一個Oracle 8以上版本的數據塊的tail它是由SCN base的低位兩字節的內容,數據塊的類型與SCN序列號組成的。例如,如果SCN base為 0x01286184,數據塊類型為0x06,SCN序列號為0x01,那么tail check將是0x61840601

BBED> p tailchk
ub4 tailchk                                 @8188     0x61840601
BBED> p kcbh
struct kcbh, 20 bytes                       @0
   ub1 type_kcbh                            @0        0x06
   ub1 frmt_kcbh                            @1        0xa2
   ub2 wrp2_kcbh                            @2        0x0000
   ub4 rdba_kcbh                            @4        0x01c00087
   ub4 bas_kcbh                             @8        0x01286184
   ub2 wrp_kcbh                             @12       0x0000
   ub1 seq_kcbh                             @14       0x01
   ub1 flg_kcbh                             @15       0x06 (KCBHFDLC, KCBHFCKV)
   ub2 chkval_kcbh                          @16       0x0137
   ub2 spare3_kcbh                          @18       0x0000

雖然tail check的值通常是由這三個組件級成,Oracle會對最終的值作為一個值(4字節)以單無符號整數來存儲。在小字節序編碼(little-endian)的構架機器中,比如Intel,這個值將以低位字節優先的方式來存儲。因此如果使用標準塊編輯器或dump命令來檢查數據塊的tail check時,字節順序可能不一樣。一個tail check為0x61840601,在Intel機器上它將以"01068461"的形式存儲在磁盤。

BBED> dump /v offset 8188
 File: /u01/app/oracle/oradata/shardcat/users01.dbf (7)
 Block: 135     Offsets: 8188 to 8191  Dba:0x01c00087
-------------------------------------------------------
 01068461                            l ...a
 <16 bytes per line>

到此,相信大家對“Oracle數據塊格式有哪幾部分”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁化县| 高唐县| 美姑县| 大石桥市| 巍山| 西安市| 杭锦旗| 大渡口区| 文成县| 镶黄旗| 泉州市| 嘉定区| 峨边| 双牌县| 海伦市| 江达县| 双峰县| 霍林郭勒市| 瑞昌市| 平遥县| 东源县| 青铜峡市| 灵川县| 临夏市| 长葛市| 石屏县| 玉田县| 秦皇岛市| 分宜县| 古丈县| 茂名市| 金堂县| 开封县| 石台县| 金溪县| 阿拉善左旗| 巨野县| 绥中县| 道孚县| 章丘市| 秀山|