• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • oracle8的ROWID結構

    發表于:2007-07-13來源:作者:點擊數: 標簽:
    1、為什么使用ROWID ORACLE把ROWID作為B-樹和其內部算法標示ROW的唯一標示。 在ORACLE8以前的版本中,ROWID標示FILE、BLOCK、ROW NUMBER,只用一個數字代 表FILE號。 在ORACLE8中,一個DATAFILE有兩個數字代表: 一個絕對值,是整個 數據庫 唯一的??梢钥碊B

    1、為什么使用ROWID  

    ORACLE把ROWID作為B-樹和其內部算法標示ROW的唯一標示。  

    在ORACLE8以前的版本中,ROWID標示FILE、BLOCK、ROW NUMBER,只用一個數字代  

    表FILE號。  

    在ORACLE8中,一個DATAFILE有兩個數字代表:  

    一個絕對值,是整個數據庫唯一的??梢钥碊BA_DATA_FILES中的FILE_ID。  

    一個相對值,在TABLESPACE中是唯一的,可以看DBA_DATA_FILES中的RELATIVE_  

    FNO。  

    新的ROWID使用相對值,所以必須存放SEGMENT的標示,否則就會混淆。所以ORAC  

    LE8在ROWID中加入對象的SEGMENT號,用來標示TABLE或者PARTITION。  

    2、ROWID的結構 

    使用base-64代碼,包括a-z,A-Z,0-9,+,-。一共18位。  

    1-6位:代表OBJECT  

    7-9位:文件相對值  

    10-15:文件中的BLOCK  

    16-18:BLOCK中的SLOT值  

    3、TABLESPACE-Relative尋址方式  

    使用的是TABLESPACE-Relative尋址方式,多個文件可以有相同的相對值,因為它  

    們屬于不同的TABLESPACE,所以不能從新的ROWID得到絕對地址,但是這沒有問題  

    ,因為當要處理某個OBJECT時,已經能確定它屬于哪個TABLESAPCE了。在TABLES  

    PACE中,文件相對值是唯一的,所以ROWID還是可以唯一標示一個OBJECT。TABLE  

    SPACE-Relative尋址方式是ORACLE8中支持超大數據庫的關鍵技術。  

    4、DATA OBJECT NUMBER  

    DATA OBJECT NUMBER用于指示SEGMENT,所有SEGMENT都有DATA OBJECT NUMBER,  

    存放在每個DATA BLOCK中,而且不重復。  

    最開始的時候,DBA_OBJECTS.OBJECT_ID=DBA_OBJECTS.DATA-OBJECT_ID,但是在  

    上述情況下DATA-OBJECT_ID會在如下情況下增加  

    TRUNCATE TABLE  

    MOVE PARTITION  

    ORACLE會檢查ROWID中的DATA OBJECT NUMBER和BLOCK中的DATA OBJECT NUMBER,  

    保證他們之間的版本是一致的。  

    ORACLE也使用DATA OBJECT NUMBER以確保ROLLBACK的紀錄和最新的SEGMENT紀錄一  

    致。  

    要注意的是DATA OBJECT NUMBER不是OBJECT 的標志  



    5、RESTRICTED ROWID  

    ORACLE7的ROWID格式是  

    1-8位:BLOCK NUMBER  

    9-12位:ROW NUMBER  

    13-16位:FILE NUMBER  

    ORACLE8支持短的、舊格式的ROWID,作用是  

    對NOPARTITION TABLE的INDEX ENTRY  

    對PARTITION TABLE的LOCAL INDEX ENTRY  

    ROW Piece CHain pointer  

    受限ROWID的內部存放是6BYTE,  

    4BYTE=DATA BLOCK NUMBER  

    2BYTE=ROW NUMBER  

    這就是說,INDEX ENTRY使用6BYTE存放該ROWID,這對大多數INDEX足夠了。但是  

    這種短ROWID不能使用在PATITION TABLE的GLOBAL INDEX上,因為PARTITION可能  

    跨TABLESPACE。顯示這種ROWID依然是18位的  

    6、擴展的ROWID  

    ORACLE在內部存放時候是10 BYTE,包括(DATA OBJECT NUMBER,DATA BLOCK NU  

    MBER,ROW NUMBER)  

    ORACLE8使用擴展的ROWID:  

    PARTITION TABLE 的GLOBAL INDEX  

    SERVER 算法  

    擴展的ROWID在SELECT時,依然是18位的顯示,存放在ROWID字段中。  

    7、在ORACLE8中使用ORACLE7的ROWID  

    從ORACLE8的DB中查詢ORACLE7的ROWID時候,ROWID返回的是ORACLE7的格式,也可  

    以用在WHERE語句中。  

    從ORACLE7的DB中查詢ORACLE8的ROWID時候,ROWID返回的是ORACLE8的格式,也可  

    以用在WHERE語句中,但是不能存放在ROWID字段中。但是你要用DBMS_ROWID 包來  

    解釋之。  

    如果包含擴展的ORACLE8 ROWID,這不能把ORACLE8的數據IMPORT到ORACLE7中。從  

    ORACLE7中可以IMPORT到ORACLE8中。  

    8、APPLICATION的移植問題  

    一般程序的移植應該沒有問題。只有在下面情況下才考慮移植問題:  

    application使用了rowid  

    table包括ROWID類型的字段  

    如果程序有如下情況,必須使用DBMS_ROWID包:  

    自己組合ROWID  

    自己分解ROWID  

    如果僅僅是傳遞ROWID到變量、或者僅僅做為一個整體使用,則可以不受影響。  



    9、數據的移植問題  

    無論使用EXPORT/IMPORT還使用移植工具,ORACLE7中的ROWID字段到了ORACLE8中  

    就自動擴展。  

    如果在某個字段內容中包含ROWID,則必須手工用DBMS_ROWID包來轉換。  

    10、DBMS_ROWID包  

    由$ORACLE_HOME/rdbms/admin/dbmsutil.sql創建,其實在catproc.sql中包含著  

    。提供處理ROWID的一些函數。  

    ROWID_CREATE  

    ROWID_INFO  

    ROWID_TYPE  

    ROWID_OBJECT  

    ROWID_RELATIVE_FNO  

    ROWID_BLOCK_NUMBER  

    ROWID_TO_ABSOLUTE_FNO  

    ROWID_TO_EXTENDED  

    ROWID_TO_RESTRICTED  

    ROWID_VERIFY  

    DBMS_ROWID.ROWID_TO_EXTENDED  

    (old_rowid in ROWID,  

    schema_name in varchar2,  

    object_name in varchar2,  

    conversion_type in number  

    )  

    RETURN ROWID;  

    轉換受限rowid到擴展rowid,用于轉換舊的ROWID到ORACLE8的格式。  



    DBMS_ROWID.ROWID_TO_RESTRICTED  

    轉換擴展的ROWID到受限的ROWID。  

    DBMS_ROWID.ROWID_VERIFY  

    判斷一個受限的ROWID是否可以轉換到擴展的格式  



    DBMS_ROWID.ROW_INFO  

    用于解釋ROWID,可以得到DATA OBJECT NUMBER,RELATIVE FILE NUMBER,BLOCK  

    NUMBER和ROW NUMBER。  

    DBMS_ROWID.CREATE  

    生成ROWID。  



      

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>