關於oracle中的row piece
有部分初學者在看oracle docs中關於row format的描述時可能會有個疑問,既然row會移動或連結,那它在不同的block中的部分的地址是不是會變化?
要解答這個問題,還得從rowid的結構說起
顯然rowid是包括了block address的,既然一個記錄行被分佈到了不同的block,那這幾個不同的部分當然具有不同的rowid
下面再引申說明row的格式組成
1,我們知道,row是由一個或多個piece組成的,下面是一些基本的規則
2, 如果columns <256,且能在一個block中儲存,那麼只有一個 piece
3, 如果columns>=256,且能在一個block儲存,那麼每行的第256列以後形成的piece會與1-255列組成的piece 連結在一起,這種情況叫做intra-blockchaining; 即跨內連結
4, 如果不能在一個block中儲存,那麼就會有多個pieces chained在一起.每個piece在一個block中; 或者原來以一個piece儲存在一個block中,後來因update,導致在一個block中儲存不下,必須跨塊儲存; 這種情況是跨塊連結
不管是塊內連結還是塊間連結,piece之間都是透過piece的rowid來連線的,實際上相當於一個單向連結串列
所以不難理解row piece的格式中包括了"Rowid of chained row pieces":
Row Overhead
Number of Columns
Cluster Key ID (if clustered)
ROWID of Chained Row Pieces (if any)
Column Length
Column Value
當我們根據rowid 來fetch有多個piece的行時(select,update,delete)
server process只需要找到第一個piece的rowid即可,因為它的header中包含有下一個piece的rowid,如此類推;process可以根據這個關係拿到所有的piece然後組裝起來,返回給使用者
有關row format及在row在cluster的情況下的表現可以參見<
有空再補充dump塊來驗證上述規則的測試過程
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/94384/viewspace-600312/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Data block Structure and Row Piece Structure_20091209BloCStruct
- 關於oracle中的undoOracle
- 關於hibernate的 No row with the given identifier existsIDE
- Oracle中rownum和row_number()Oracle
- [20151208]關於Oracle Row Lock.txtOracle
- 關於 pipe row的用法(轉,待做實驗)
- 有關mysql中ROW_COUNT()的小例子MySql
- 關於oracle中的反連線Oracle
- 關於oracle中的半連線Oracle
- Oracle中關於函式的使用Oracle函式
- oracle中關於null的定義OracleNull
- ORACLE ROW MOVEMENTOracle
- Oracle 中的 ROW_NUMBER() OVER() 分析函式的用法Oracle函式
- 關於enq: TX - row lock contention行鎖的總結ENQ
- 關於oracle中的sql資料型別OracleSQL資料型別
- 關於oracle中session跟蹤的總結OracleSession
- 關於Oracle 中驅動表的選擇Oracle
- 關於Oracle GoldenGate中Extract的checkpoint的理解OracleGo
- oracle中關於in和exists,not in 和 not existsOracle
- 在Hibernate中關於Oracle sequence的使用KHOracle
- 關於Oracle DB中SQL Script的註釋(REM,--,/* */)OracleSQLREM
- Oracle中關於PCTFREE和PCTUSED的說明Oracle
- pl/sql中的row物件SQL物件
- 關於Oracle和MySQL中的無密碼登入OracleMySql密碼
- 關於oracle中blob欄位的錄入問題Oracle
- oracle效能診斷例項-row migration and row chainOracleAI
- 關於javascript中的thisJavaScript
- 關於oracle的Spool命令Oracle
- 關於oracle的upsertOracle
- oracle資料庫備份與恢復 a piece of cake (4)(轉)Oracle資料庫
- Oracle11gRAC中關於srvctl和crsctl的解釋?Oracle
- 關於Oracle中重啟資料庫的一個bugOracle資料庫
- oracle中於資料庫相關的常用命令????Oracle資料庫
- 【轉】關於oracle中Move機制的一點探討Oracle
- 關於 oracle NULLOracleNull
- 關於oracle with as用法Oracle
- 關於ORACLE AUTOTRACEOracle
- Oracle如何精確計算row的大小Oracle