對於晶晶小妹發表的構造ORACLE的CR block的疑問

wei-xh發表於2010-05-08
我們都知道,ORACLE在三種條件下需要構造CR塊
1)查詢時刻的SCN大於資料塊的COMMIT SCN,即SQL 遊標被開啟時的SCN大於資料庫上記錄的SCN。
2)資料塊上存在LOCK
3)閃回查詢。

晶晶小妹在實驗中很聰明的論證了ORACLE是怎麼樣一步步的構造CR BLOCK的。可是稍微一想發現她的實驗涉及的資料塊始終是一個即131046
這樣的話會導致這個131046被覆蓋的ITL事務資訊始終是記錄在回滾連結串列的頭部即事務開始的第一條DML語句處,因為這個事務自始至終都是這一個塊,覆蓋的ITL資訊肯定也就是這個資料塊上的。


我的疑問是,如果一個事務涉及了N個BLOCK,如1000,1001,1002,事務開始修改的BLOCK是1000,那麼在他對應的回滾(鏈頭)資料塊中會記錄一個覆蓋1000資料塊上的ITL資訊,接著事務又修改了BLOCK 1001,同樣是需要覆蓋1001的ITL資訊的,那麼ORACLE是不是也得記錄他覆蓋1001的ITL資訊,可是這個資訊明顯不是放在鏈頭上的。因為一個事務的鏈頭只有一個(這話說的很沒底氣)


因此我覺得是不能說,只有回滾塊鏈頭上才記錄著塊對應的被覆蓋的ITL資訊。


可能我理解的不對,還希望有高人指正。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-662242/,如需轉載,請註明出處,否則將追究法律責任。

相關文章