ÔÚ8iÒÔÇ°rowidÓÉfile#+block#+row#×é³É£¬Õ¼ÓÃ6¸öbytesµÄ¿Õ¼ä£¬10 bit µÄ file# £¬22 bit µÄ block# £¬16 bit µÄ row#¡£
ÆäÖÐoracle µÄdba(data block address)ÊÇ32 bitsµÄ,°üÀ¨10 bit µÄ file# ºÍ 22 bit µÄblock#¡£
ÓÉÓÚ²»´æÔÚ0±àºÅÎļþ£¬oracleÖеÄÎļþ×î´óÊýÁ¿2^10-1=1023
¶ødatafileÄÜ´ïµ½µÄ×î´ósize¾ÍÊÇ2^22*db_block_size
Èç¹ûdb_block_sizeΪ4kµÄdatafile max size¾ÍÊÇ16G
Èç¹ûdb_block_sizeΪ8kµÄdatafile max size¾ÍÊÇ32G
´Óoracle 8¿ªÊ¼rowid±ä³ÉÁËextend rowid£¬ÓÉdata_object_id#+rfile#+block#+row#×é³É£¬Õ¼ÓÃ10¸öbytesµÄ¿Õ¼ä£¬
32bitµÄ data_object_id#,10 bit µÄ rfile#,22bit µÄ block#,16 bit µÄ row#.ÓÉÓÚrowidµÄ×é³É´Ófile#±ä³ÉÁËrfile#£¬
ËùÒÔÊý¾ÝÎļþÊýµÄÏÞÖÆÒ²´ÓÕû¸ö¿â²»Äܳ¬¹ý1023¸ö±ä³ÉÁËÿ¸ödata_object_id²»Äܳ¬¹ý1023¸öÊý¾ÝÎļþ¡£µ±È»£¬Äã»òÐíÒªÎÊ£¬
Ϊʲôoracle²»µ÷ÕûrowidÖбíʾ file# µÄ bitÊýÁ¿£¬Õâ¸öÓ¦¸ÃÊÇÓÉÓÚ¼æÈÝÐÔµÄÒýÆðµÄ£¬ÔÚ oracle7 µÄË÷ÒýÖд洢µÄrowid
¾ÍÊÇ file# + block# + row# £¬ÒòΪÕâÑù´¦Àíºó¹ØÓÚË÷ÒýµÄ´æ´¢£¬oracle8ºÍoracle7ûÓз¢Éú±ä»¯¡£
ËäÈ»oracleʹÓÃÁËextend rowid£¬µ«ÊÇÔÚÆÕͨË÷ÒýÀïÃæÒÀÈ»´æ´¢ÁË6bytesµÄrowid£¬Ö»ÓÐÔÚglobal indexÖд洢µÄÊÇ10bytes
µÄextend rowid£¬¶øextend rowidÒ²ÊÇglobal index³öÏÖµÄÒ»¸ö±ØÒªÌõ¼þ¡£
ÎÒÃÇ¿ÉÒÔÓÃÈçÏ·½·¨Ñо¿rowidµÄÏêϸÄÚÈÝ¡£
SQL> select dbms_rowid.ROWID_OBJECT(rowid) data_object_id#,
2 dbms_rowid.ROWID_RELATIVE_FNO(rowid) rfile#,
3 dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block#,
4 dbms_rowid.ROWID_ROW_NUMBER(rowid) row#
5 from test where rownum<10;
DATA_OBJECT_ID# RFILE# BLOCK# ROW#
--------------- ---------- ---------- ----------
24382 8 90 0
24382 8 90 1
24382 8 90 2
24382 8 90 3
24382 8 90 4
24382 8 90 5
24382 8 90 6
24382 8 90 7
24382 8 90 8
9 rows selected
SQL> select dump(rowid,16) rid from test where rownum<10;
RID
--------------------------------------------------------------------------------
Typ=69 Len=10: 0,0,5f,3e,2,0,0,5a,0,0
Typ=69 Len=10: 0,0,5f,3e,2,0,0,5a,0,1
Typ=69 Len=10: 0,0,5f,3e,2,0,0,5a,0,2
Typ=69 Len=10: 0,0,5f,3e,2,0,0,5a,0,3
Typ=69 Len=10: 0,0,5f,3e,2,0,0,5a,0,4
Typ=69 Len=10: 0,0,5f,3e,2,0,0,5a,0,5
Typ=69 Len=10: 0,0,5f,3e,2,0,0,5a,0,6
Typ=69 Len=10: 0,0,5f,3e,2,0,0,5a,0,7
Typ=69 Len=10: 0,0,5f,3e,2,0,0,5a,0,8
9 rows selected
SQL> select dump(rowid) rid from test where rownum<10;
RID
--------------------------------------------------------------------------------
Typ=69 Len=10: 0,0,95,62,2,0,0,90,0,0
Typ=69 Len=10: 0,0,95,62,2,0,0,90,0,1
Typ=69 Len=10: 0,0,95,62,2,0,0,90,0,2
Typ=69 Len=10: 0,0,95,62,2,0,0,90,0,3
Typ=69 Len=10: 0,0,95,62,2,0,0,90,0,4
Typ=69 Len=10: 0,0,95,62,2,0,0,90,0,5
Typ=69 Len=10: 0,0,95,62,2,0,0,90,0,6
Typ=69 Len=10: 0,0,95,62,2,0,0,90,0,7
Typ=69 Len=10: 0,0,95,62,2,0,0,90,0,8
9 rows selected
ROWIDµÄÏÔʾ¹æÔò£º
µÚ1~6λ±íʾdata_object_id#µÚ7¡«9λÊDZíʾµÄÊÇÊý¾ÝÎļþ£¬¶ø10¡«15λ±íʾµÄÊÇÔÚÕâ¸öÊý¾ÝÎļþÖеĵڼ¸¸öBLOCK¡£rowid±àÂëÏ൱ÓÚ64½øÖÆ¡£
ÓÃA~Z a~z 0~9 + /¹²64¸ö×Ö·û±íʾ¡£A±íʾ0£¬B±íʾ1£¬¡¡£¬a±íʾ26£¬¡¡£¬0±íʾ52£¬¡¡£¬+±íʾ62£¬/±íʾ63¡£
SQL> select dbms_rowid.ROWID_OBJECT(rowid) data_object_id#,
2 dbms_rowid.ROWID_RELATIVE_FNO(rowid) rfile#,
3 dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block#,
4 dbms_rowid.ROWID_ROW_NUMBER(rowid) row#,
5 rowid
6 from test where rownum<10;
DATA_OBJECT_ID# RFILE# BLOCK# ROW# ROWID
--------------- ---------- ---------- ---------- ------------------
24382 8 90 0 AAAF8+AAIAAAABaAAA
24382 8 90 1 AAAF8+AAIAAAABaAAB
24382 8 90 2 AAAF8+AAIAAAABaAAC
24382 8 90 3 AAAF8+AAIAAAABaAAD
24382 8 90 4 AAAF8+AAIAAAABaAAE
24382 8 90 5 AAAF8+AAIAAAABaAAF
24382 8 90 6 AAAF8+AAIAAAABaAAG
24382 8 90 7 AAAF8+AAIAAAABaAAH
24382 8 90 8 AAAF8+AAIAAAABaAAI
9 rows selected
¿´µÚÒ»ÌõÊý¾Ý£º
24382 = AAAF8+ = 5 * 64^2 + 60 * 64 + 62
8 = AAI
90 = AAAABa = 1 * 64 + 26
Oracle 10g µÄ´æ´¢ÄÜÁ¦ÓÐÁËÏÔÖøµÄÔöÇ¿¡£Õâ±íÏÖÔںܶ෽Ã棬ÏÂÃæ½éÉÜ 10g ÐÂÔöµÄ±í¿Õ¼äÀàÐÍ£º´óÎļþ (Bigfile) ±í¿Õ¼ä¡£
´óÎļþ±í¿Õ¼ä´ÓijÖֽǶÈÀ´ËµÌá¸ßÁË Oracle ÔÚ VLDB ÉϵĹÜÀíÄÜÁ¦¡£ Ö»ÓÐ×Ô¶¯¶Î¿Õ¼ä¹ÜÀíµÄ LMT (Locally Managed Tablespaces ) Ö§³Ö BIGFILE ±í¿Õ¼ä¡£ ´óÎļþ±í¿Õ¼äÖ»ÄÜ°üº¬Ò»¸öÎļþ£¬µ«ÊÇÎļþ¿ÉÒÔ´ïµ½ 4G ¸öÊý¾Ý¿é´óС¡£(ÒÔÏÂÓà BFT Ö¸´ú BIGFILE Tablespace¡£)
BFT ¿ÉÒÔºÍÒÔÏ´洢¼¼Êõ½áºÏʹÓãº
×Ô¶¯´æ´¢¹ÜÀí(ASM)
LVM
OMF
ÀíÂÛÉ쵀 BFT ¿ÉÒÔ´ïµ½ÏÂÃæËùÁеÄÖµ£º
Êý¾Ý¿é´óС(µ¥Î»£ºK) BFT ×î´óÖµ(µ¥Î»£ºT)
2k 8T
4k 16T
8k 32T
16k 64T
32k 128T
ÔÚʵ¼Ê»·¾³ÖУ¬Õ⻹Êܵ½²Ù×÷ϵͳµÄÎļþϵͳµÄÏÞÖÆ¡£