Oracle Database 中關於null值的儲存

來源:互聯網
上載者:User

這裡主要驗證了number 和 varchar2 兩種資料類型null值的儲存

先來介紹一下row piece的結構

引用官方文檔的一張結構圖



通常情況下,不包括(cluster table 和 chain row)一個rowpiece 包括row header 和 column data

關於其他情況,會在以後的研究中陸續放出。

BBED> dump /v
File: /u01/apps/Oracle/oradata/david/users01.dbf(4)
Block: 531     Offsets: 8173to 8191  Dba:0x01000213
-------------------------------------------------------
3c020302 c1020353 59530444 55414c01 l<...á..SYS.DUAL.
06fbd4                            l .ûÔ
<16 bytes per line>

例如:一個rowpiece的前3個位元組 3c0203它表示

1個位元組的flag
1個位元組的lb(itl slot)
1個位元組的columncount

如例中
3c=flag=00111100=--HDFL--=header+delete+first+last
02=lb itl slot 0x02
03=column count


列值資訊包括:
列的長度,列的value
例如02c102
表示佔用2個byte
c102 表示的是具體的值

dump 的資訊 可以使用 UTL_RAW.CAST_TO_xxxx 來翻譯(感謝itpub iori809的指導)




下面開始驗證

首先環境為11.1.0.6 linux x64

  1. dex@FAKE> desc ts  
  2.  Name                                                              Null?    Type  
  3.  ----------------------------------------------------------------- -------- --------------------------------------------   
  4.  ID                                                                         NUMBER  
  5.  NAME                                                                       VARCHAR2(20)  
  6.  COUNT                                                                      NUMBER  
  7.   
  8.   
  9. dex@FAKE> select t.*,  
  10.   2         dbms_rowid.rowid_relative_fno(t.rowid) as "FNO#",  
  11.   3         dbms_rowid.rowid_block_number(t.rowid) as "BLK#",  
  12.   4         dbms_rowid.rowid_row_number(t.rowid) as "ROW#"  
  13.   5    from dex.ts t  
  14.   6  ;  
  15.   
  16.   
  17.         ID NAME                      COUNT       FNO#       BLK#       ROW#  
  18. ---------- -------------------- ---------- ---------- ---------- ----------   
  19.          1 dd                                       4         31          0  
  20.          2                               2          4         31          1  
  21.            2                             3          4         31          2  
  22.          4                                          4         31          3  

建表語句:dex@FAKE> create table ts ( id number , name varchar2(20) , count number ) ;
因為表中沒有使用long 類型的column,所以表中列的順序和建表中的列的聲明順序相同。
BBED> set dba 4,31
        DBA             0x0100001f (16777247 4,31)
BBED> map
 File: /u01/apps/oracle/oradata/fake/users01.dbf (4)
 Block: 31                                    Dba:0x0100001f
------------------------------------------------------------
 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[3]                                @118     


 ub1 freespace[8036]                        @124     


 ub1 rowdata[28]                            @8160    


 ub4 tailchk                                @8188    
  • 1
  • 2
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.