Oracle ROWID-2
轉載自:http://www.itpub.net/viewthread.php?tid=1095691&highlight=rowid
[一週一帖之五]Rowid簡單總結
Rowid簡單總結
本文是看到了精華帖中的warehouse的“rowed的一點總結”後寫的一點總結,主要是自己歸納的一個過程。原來一直弄不明白顯示rowid的18位64進位制和10byte之間的關係,看了此文後總算有點理解了。感謝warehouse!
Rowid分類:物理rowid,邏輯rowid
物理rowid:extended rowid,restricted rowid
restricted rowid是oracle7 採用的,從oracle8開始都是使用extended rowid,主要是因為資料量的膨脹原來的rowid不夠用了。
邏輯rowid出現有兩個原因:iot表的記錄物理上可能會發生變化,如果用物理rowid就不適用了;其次是oracle資料庫可能會引用一些其他資料庫(db2等)的資料,對於這部分資料也只能用邏輯rowid。邏輯rowid是基於primary key的所以iot表必須有pk。
顯示:18位64進位制字元
OOOOOO FFF BBBBBB RRR 對應 data_object_id, rfile#, block#, Rows
顯示出來的是64進位制數,oracle在設計rowid時用A~Z表示0-25,用a~z表示26-51,用0~9表示52-61,用+表示62,用/表示63
例如:AAACdcAABAAAHCKAAA
AAACdc = 2*power(64,2)+29*64+28 OOOOOO
AAB = 2 FFF
AAAHCK = 7*power(64,2)+2*64+10 BBBBBB
AAA =0 RRR
內部處理:
Rowid是偽列,在資料庫中是不進行儲存的(某些特殊情況除外例如索引中)而是在獲取時根據儲存位置構造出來的。
sql>SELECT VSIZE(ROWID) FROM SCOTT.EMP;
10
Rowid在顯示上採用的是64位編碼,但是內部處理上是透過10個位元組即80位來進行的。
其中data_object_id佔用32 位
(顯示時用6位64進位制的字元 power(64,6)=power(2,36)>power(2,32))
rfile#佔用10 位,
(顯示時用3位64進位制的字元 power(64,3)=power(2,18)>power(2,10))
block_number佔22位,
(顯示時用6位64進位制的字元 power(64,6)=power(2,36)>power(2,22))
row#佔用16位
(顯示時用3位64進位制的字元 power(64,3)=power(2,18)>power(2,16))
由此:
32bit的objects number,每個資料庫最多有4G個物件
10bit的rfile#,由於rfile#佔用了10位,因此每個表空間最多有1022個檔案(2個預留)
22bit的block number,每個檔案最多有4M個BLOCK
16bit的row number,每個BLOCK最多有64K個ROWS。
rowid在索引中是真實儲存的,但在索引(gloab index?有待確定)中rowid沒有必要儲存data_object_id,所以索引中rowid為80-32=48位,採用12位16進位制的字元來表示。
btw:在索引中鍵值和rowid是成對出現的,也就是說一個鍵值有多少重複的記錄,它就將在索引葉節點中出現多少次每次都對應一個rowid,只不過鍵值相同的記錄是順序出現的。
以下節選自對索引的dump檔案(alter system dump datafile xxx block xxx;)
row#0[8019] flag: ------, lock: 0, len=17
col 0; len 7; (7): 41 4e 41 4c 59 53 54 ---鍵值
col 1; len 6; (6): 01 00 00 20 00 07 ---無data_object_id ,16進位制12位佔6個位元組
row#1[8002] flag: ------, lock: 0, len=17
col 0; len 7; (7): 41 4e 41 4c 59 53 54
col 1; len 6; (6): 01 00 00 20 00 0c
row#2[7987] flag: ------, lock: 0, len=15
col 0; len 5; (5): 43 4c 45 52 4b
col 1; len 6; (6): 01 00 00 20 00 00
row#3[7972] flag: ------, lock: 0, len=15
col 0; len 5; (5): 43 4c 45 52 4b
col 1; len 6; (6): 01 00 00 20 00 0a
row#4[7957] flag: ------, lock: 0, len=15
col 0; len 5; (5): 43 4c 45 52 4b
col 1; len 6; (6): 01 00 00 20 00 0b
row#5[7942] flag: ------, lock: 0, len=15
col 0; len 5; (5): 43 4c 45 52 4b
col 1; len 6; (6): 01 00 00 20 00 0d
rowid操作package:dbms_rowid ,相關過程、函式使用方法可以透過幫助獲得。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23135684/viewspace-668277/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle DBLink oracleOracle
- Oracle 中$ORACLE_HOME/bin/oracle檔案Oracle
- oracle 修改ORACLE例項Oracle
- oracle安裝工具目錄常用解釋oracle wallet manager/Oracle Directory Manager /oracle net manager /Oracle Net ManagOracle
- ORACLE基礎之oracle鎖(oracle lock mode)詳解Oracle
- 【Oracle】oracle tablespace&datafile -- oracle表空間 分享[轉]Oracle
- cx_Oracle 連線 OracleOracle
- [Oracle]Oracle良性SQL建議OracleSQL
- oracle之 Oracle LOB 詳解Oracle
- [oracle]centos 7 安裝oracleOracleCentOS
- Oracle工具(Oracle Tools) – SQLT(SQLTXPLAIN)OracleSQLAI
- oracle clone oracle_home 方法Oracle
- oracle 817 archive err,oracle hangOracleHive
- 【Oracle】修改oracle監聽埠Oracle
- 【Oracle】Oracle常用EVENT之三Oracle
- 【Oracle】Oracle常用EVENT之二Oracle
- 【Oracle】Oracle常用EVENT之一Oracle
- Oracle Clusterware and Oracle Grid InfrastructureOracleASTStruct
- 【Oracle】--"任性"Oracle安裝之旅Oracle
- OracleOracle
- Oracle vs PostgreSQL DBA(21)- Oracle VPDOracleSQL
- 【Oracle】Oracle logminer功能介紹Oracle
- Oracle案例12——NBU Oracle恢復Oracle
- [Oracle] -- 配置Oracle環境變數Oracle變數
- 「Oracle」Oracle 資料庫安裝Oracle資料庫
- oracle 12c Deprecation of Oracle StreamsOracle
- Oracle HowTo:How to get Oracle SCN?Oracle
- Oracle Temporary Tables(Oracle 臨時表)Oracle
- ORACLE_BASE 與 ORACLE_HOMEOracle
- Oracle OAF(Oracle Application Framework) SampleOracleAPPFramework
- 20 Differences Between Oracle on NT and Oracle on UnixOracle
- Oracle技術專題 - Oracle瑣Oracle
- ORACLE-BASE - Oracle DBA and development articlesOracledev
- oracle 學習筆記 (ORACLE NET )Oracle筆記
- For oracle databases, if the top showing the oracle database, then oracle process is using the top cOracleDatabase
- Oracle 之 Cloning $oracle_home (克隆安裝oracle軟體)Oracle
- Oracle例項和Oracle資料庫(Oracle體系結構)Oracle資料庫
- oracle維護服務 oracle解決方案 oracle售後服務Oracle