国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Oracle 之undo log探究

IT那活兒 / 1309人閱讀
Oracle 之undo log探究
點擊上方“IT那活兒”公眾號,關注后了解更多內容,不管IT什么活兒,干就完了!!!

什么是undo log

Undo log用來記錄數據修改的前映像。Undo log位于undo segments中,每個實例有多個undo segments,第一個undo segment位于system表空間中,其余的undo segment 位于undo表空間中。

Undo log的作用

Undo log有如下三大作用:
  • 用于事務回滾操作

    當事務需要回滾時,需要從undo log中獲取數據修改的前映像,以便于將數據恢復到修改前的狀態。

  • 提供一致性讀

    當一個事務需要讀取的數據正在被另一個事務修改時,為了避免臟讀,需要利用undo log構造出數據塊被修改前的一致性的數據塊。

  • 用于實例恢復

    當實例崩潰重啟后,需要通過undo log將未提交的事務回滾,使實例恢復到崩潰前的一致性狀態。

undo log詳細內容

如下通過實驗詳細分析下DML三種操作insert、update、delete時undo log記錄的內容。
1. update操作
如下圖所示b表中有3條數據:
對b表中的一條數據執行更新操作,不提交事務。
查詢v$transaction視圖,此視圖記錄了事務和undo相關的信息,通過此視圖undo的信息找到記錄上述修改操作的undo塊。
上一步之所以不提交事務是因為事務提交后,事務信息會從此視圖移除,無法定位undo信息。xid列標識事務ID,UBAFIL標識undo所在的文件號,UBABLK標識undo塊號。
dump出對應的undo塊:
打開trace文件,可以看到導出的是6號文件的897號塊。
UNDO BLK表明是undo塊,xid是事務ID,由三部分組成,XIDUSN.XIDSLOT.XIDSQN,與v$transaction視圖中的三個字段對應。cnt對應UBAREC。
找到cnt: 0x18的記錄條目,里面有ITL信息,以及數據修改前的值,col 1表示的是第二列,第一列為col 0,[10]表示此列有10個字節,53 7a 6c 53 64 76 6d 43 78 72是16進制,轉換成ascII字符為SzlSdvmCxr,正好是修改前id=3的列A的值。
經過上述分析,可以得出結論,update操作時,undo中記錄的只是更新的字段的舊值,不更新的字段值不會記錄。
2. delete操作
dump出undo塊,查看trace文件:
undo塊中第7條記錄記錄了此事務的回滾信息:
記錄了兩列信息,轉換成文本后,正好是8 和name8。由此可見當執行delete語句時,undo中記錄的是刪除的行的所有字段的值。
3. insert操作
執行一條insert語句,記住編號100,表示這行數據在數據塊中的位置。
dump出undo塊,查看trace文件:
查看undo塊中第2條記錄信息:
  • KDO Op code: DRP --表示操作類型,DRP=delete row piece。
  • bdba: 0x01800417 --對應的數據文件和塊,轉換成二進制,前10位為數據文件號,后22位為塊號 ,6 號數據文件,1047號塊。
  • slot: 100(0x64) --行在數據塊中的位置,與上面select出來的row number正好對應。
由此可見,當執行insert時,undo中只會記錄回滾時需要的操作DRP,和數據行的位置。
4. 同一個事務中對同一條數據多次修改
如果在同一個事務里,對某一行數據的某一個字段值進行了多次修改,如將name=a修改為name=b,再改為name=c,最后改成name=d,此時undo中會記錄每一次的修改信息呢,還是只記錄最后一次修改的信息呢?
查看undo塊信息。
查看第6條undo記錄。
  • col 1: [ 1] 63 --轉換成字符為c。
  • rci 0x05 -- 指向同一個事務的上一條undo記錄。
依次轉換col 1的值為字符得到 c->b->a->name1,正好與更新的順相反,依次撤銷即可實現回滾。rci 0x00表示本事務的第一條記錄。
因此可以得出如下結論:
在同一事務里,對某一個字段值反復更新,undo會記錄每次操作的前鏡像值,即會記錄中間結果。
總 結

update、insert、delete操作時,undo中記錄的信息不一樣。

  • insert時,只記錄了插入數據在數據塊中的位置。
  • update時,記錄的是修改字段的前鏡像值。
  • delete時,記錄的是整行數據。insert記錄的信息最少,update記錄的信息居中,delete記錄的信息最多。
執行delete操作需要更多的undo空間記錄回滾信息,回滾時需要從undo中拷貝更多的數據到數據塊中。因此,delete操作的代價最昂貴


本文作者:江金林(上海新炬中北團隊)

本文來源:“IT那活兒”公眾號

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/129124.html

相關文章

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<