无码视频在线观看,99人妻,国产午夜视频,久久久久国产一级毛片高清版新婚

  • 始創(chuàng)于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業(yè)
    • 60秒人工響應(yīng)
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補(bǔ)償
    全部產(chǎn)品
    您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

    Oracle的rowid和rdba庖丁解牛

    發(fā)布時(shí)間:  2012/8/15 17:47:32

    Oracle 8以下ROWID組成(也叫受限Rowid)為:FFFF.BBBBBBBB.RRRR,占用6個(gè)字節(jié)(10bit file#+22bit+16bit),但是,為了擴(kuò)充的需要,如數(shù)據(jù)文件的擴(kuò)充,現(xiàn)在的Rowid改為:OOOOOOFFFBBBBBBRRR,占用10個(gè)字節(jié)(32bit+10bit rfile#+22bit+16bit)。其中,O是對象ID,F(xiàn)是文件ID,B是塊ID,R是行ID。由于rowid的組成從file#變成了rfile#,所以數(shù)據(jù)文件數(shù)的限制也從整個(gè)庫不能超過1023個(gè)變成了每個(gè)表空間不能超過1023個(gè)數(shù)據(jù)文件。
    -
     

    注意:這里的O,代表的是data_object_id,是與段物理存儲(chǔ)位置相關(guān)的一個(gè)信息,因?yàn)橐粋(gè)段對象只可能在一個(gè)表空間上,data_object_id能唯一確認(rèn)ts#,而data_object_id + rfile#就能最終定位到該rowid在那個(gè)確定的物理數(shù)據(jù)文件。

    如果我們查詢一個(gè)表的ROWID,就可以獲得object的信息,文件信息,塊信息與行信息等等,如根據(jù)其中塊的信息,可以知道該表確切占用了多少個(gè)塊,每行在哪個(gè)塊上,哪個(gè)數(shù)據(jù)文件上。

    我們在select數(shù)據(jù)時(shí)候,在不指定排序字段時(shí), Oracle是按rowid升序取數(shù)據(jù)的。如

    SQL> select t.id,rowid from skate.tab2 t;

            ID ROWID

    ---------- ------------------

       1067511 AAAO1lAAEAAAHKkAAA

       1067513 AAAO1lAAEAAAHKkAAB

       1067515 AAAO1lAAEAAAHKkAAC

       1067517 AAAO1lAAEAAAHKkAAD

       1067519 AAAO1lAAEAAAHKkAAE

       1067523 AAAO1lAAEAAAHKkAAG

       1067525 AAAO1lAAEAAAHKkAAH

       1067527 AAAO1lAAEAAAHKkAAI

    8 rows selected

    SQL>

    可以從上面的顯示數(shù)據(jù)看到,是按rowid降序排列。我們拿rowid “AAAO1lAAEAAAHKkAAA”來說明

    Data Object number =AAAO1l

    File id                  =AAE    

    Block id              =AAAHKk

    Row        =AAA

    Rowid是64進(jìn)制的,可以通過進(jìn)制轉(zhuǎn)化工具來查看(http://www.2u3.cn/Conversion/jinzhi/

     

     A-Z <==> 0 - 25 (26)
    a-z <==> 26 - 51 (26)
    0-9 <==> 52 - 61 (10)
    +/ <==> 62 - 63 (2)

     

     拿其中的Data Object number= AAAO1l為例子,

     

    l是64進(jìn)制中的37,位置為0

    37 * (64 ^ 0) = 37

    1是64進(jìn)制中的53,位置為1

    53 * (64 ^ 1) = 3392

    O是64進(jìn)制中的 14,位置為2

    14*(64^2)=57344

    A是64進(jìn)制中的 0

    所以

    A * (64 ^ 3) = 0

    A * (64 ^ 4) = 0

    A * (64 ^ 5) = 0

    則有AAAO1l= 0 + 0 + 0 + 57344+ 3392 + 37 = 60773,表示該行存在的對象,對應(yīng)的對象號(hào)為60773。

     

    手工算還是比較麻煩的,Oracle為此提供相應(yīng)的函數(shù)dbms_rowid來實(shí)現(xiàn)

    SQL> select dbms_rowid.rowid_object('AAAO1lAAEAAAHKkAAA') data_object_id#,

      2         dbms_rowid.rowid_relative_fno('AAAO1lAAEAAAHKkAAA') rfile#,

      3         dbms_rowid.rowid_block_number('AAAO1lAAEAAAHKkAAA') block#,

      4         dbms_rowid.rowid_row_number('AAAO1lAAEAAAHKkAAA') row# from dual;

    DATA_OBJECT_ID#     RFILE#     BLOCK#       ROW#

    --------------- ---------- ---------- ----------

              60773          4      29348          0

     

    可以通過包的說明或者Oracle官方手冊了解更多,例如:

    SQL> desc dbms_rowid

    Element                Type     

    ---------------------- ---------

    ROWID_TYPE_RESTRICTED  CONSTANT 

    ROWID_TYPE_EXTENDED    CONSTANT 

    ROWID_IS_VALID         CONSTANT 

    ROWID_IS_INVALID       CONSTANT 

    ROWID_OBJECT_UNDEFINED CONSTANT 

    ROWID_CONVERT_INTERNAL CONSTANT 

    ROWID_CONVERT_EXTERNAL CONSTANT 

    ROWID_INVALID          EXCEPTION

    ROWID_BAD_BLOCK        EXCEPTION

    ROWID_CREATE           FUNCTION 

    ROWID_INFO             PROCEDURE

    ROWID_TYPE             FUNCTION 

    ROWID_OBJECT           FUNCTION 

    ROWID_RELATIVE_FNO     FUNCTION 

    ROWID_BLOCK_NUMBER     FUNCTION 

    ROWID_ROW_NUMBER       FUNCTION 

    ROWID_TO_ABSOLUTE_FNO  FUNCTION 

    ROWID_TO_EXTENDED      FUNCTION 

    ROWID_TO_RESTRICTED    FUNCTION 

    ROWID_VERIFY           FUNCTION 

     

    SQL> desc dbms_rowid.rowid_info

    Parameter     Type     Mode Default?

    ------------- -------- ---- --------

    ROWID_IN      ROWID    IN           

    ROWID_TYPE    NUMBER   OUT          

    OBJECT_NUMBER NUMBER   OUT          

    RELATIVE_FNO  NUMBER   OUT          

    BLOCK_NUMBER  NUMBER   OUT          

    ROW_NUMBER    NUMBER   OUT          

    TS_TYPE_IN    VARCHAR2 IN   Y  

    如果明白了以上ROWID的含義,那么就很容易理解塊的地址rdba了,也就是ROWID中的FFFBBBBBB部分,10bit rfile#+22bit,如我們分析一個(gè)塊地址:

     rdba: 0x010072a4

    把0x010072a4轉(zhuǎn)化為10進(jìn)制16806564

    SQL>   select dbms_utility.data_block_address_file(16806564) "file",

      2           dbms_utility.data_block_address_block(16806564) "block"

      3    from dual;

     

          file      block

    ---------- ----------

             4      29348

     

    SQL>

    現(xiàn)在通過塊的dba知道了file和block,那怎樣確認(rèn)我們推到的正確呢? 這個(gè)塊地址是dump文件的內(nèi)容,我們可以去dump文件核對下

    Start dump data blocks tsn: 4 file#: 4 minblk 29348 maxblk 29348

    buffer tsn: 4 rdba: 0x010072a4 (4/29348)

    scn: 0x0000.00e66a1e seq: 0x02 flg: 0x06 tail: 0x6a1e0602

    frmt: 0x02 chkval: 0x4590 type: 0x06=trans data

    Hex dump of block: st=0, typ_found=1

    結(jié)果我們推導(dǎo)的和dump的內(nèi)容是一樣的,不過這里得到的4是rfile#,相對文件號(hào),而相對文件號(hào)是不能超過1023,所以,如果你想根據(jù)這個(gè)地址來dump數(shù)據(jù)文件塊的話,最好還是核對一下v$datafile:

    select file# from v$datafile where rfile# = 4 and ts# = <:dbfile_in_ts>

    表空間的ts#可以通過如下sql得到:

      select ta.tablespace_name, da.TS#
        from dba_tablespaces ta, dba_data_files df, v$datafile da
       where ta.tablespace_name = df.tablespace_name
         and da.NAME = df.file_name

     例如:

    SQL> select file# from v$datafile where rfile# = 4 and ts# = 4;

        FILE#

    ----------

             4

    SQL>

     

    如果數(shù)據(jù)文件數(shù)大于1023個(gè),這里file# 就不是4了,應(yīng)該是個(gè)絕對文件號(hào)了,這就是file#和rfile#的區(qū)別。如果dump數(shù)據(jù)塊,要用絕對文件號(hào)的,例如:

    Alter system dump  datafile 4 block 29348;

    也可以通過dba_segments,如

    SQL>  select header_file,header_block from dba_segments where owner='SKATE' and segment_name='TAB2';

    HEADER_FILE HEADER_BLOCK

    ----------- ------------

              4        29347

    這里段頭占有一個(gè)block,后面存儲(chǔ)的就是數(shù)據(jù),所以存儲(chǔ)數(shù)據(jù)的塊,應(yīng)該是29348

    -----end-----


    本文出自:億恩科技【mszdt.com】

    服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時(shí)售后服務(wù)電話:0371-60135900
  • 虛擬主機(jī)/智能建站 24小時(shí)售后服務(wù)電話:0371-60135900
  • 專注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號(hào)
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號(hào)總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號(hào)
      1
     
     
     
     

    0371-60135900
    7*24小時(shí)客服服務(wù)熱線