深入理解redo之1

--改變向量(CHANGE VECTOR,CV),改變向量是組成REDO信息的基礎,
--一個改變向量描述了對一個獨立的數據塊的一個獨立的修改操作。這裏面我們要注意的是,
--對於CV的定義裏包含了兩層含義,一個CV只針對一個數據塊的變更,一個CV只包含一個變化。

--每個CV都包含了對文件的修改,因此在每個CV中都有一個OPCODE,指出修改的類型。不同OPCODE的CV,其組成是不同的,OPCODE的取值範圍包括:

    Layer 1 : Transaction Control - KCOCOTCT     
Opcode 1 : KTZFMT
Opcode 2 : KTZRDH
Opcode 3 : KTZARC
Opcode 4 : KTZREP

    Layer 2 : Transaction Read -  KCOCOTRD     

    Layer 3 : Transaction Update -  KCOCOTUP     

    Layer 4 : Transaction Block -  KCOCOTBK     [ktbcts.h]
         Opcode 1 : Block Cleanout
         Opcode 2 : Physical Cleanout
         Opcode 3 : Single Array Change
         Opcode 4 : Multiple Changes to an Array
         Opcode 5 : Format Block

    Layer 5 : Transaction Undo -  KCOCOTUN     [ktucts.h]
         Opcode 1 : Undo block or undo segment header - KTURDB
         Opcode 2 : Update rollback segment header - KTURDH
         Opcode 3 : Rollout a transaction begin
         Opcode 4 : Commit transaction (transaction table update)
- no undo record
         Opcode 5 : Create rollback segment (format) - no undo record
         Opcode 6 : Rollback record index in an undo block - KTUIRB
         Opcode 7 : Begin transaction (transaction table update)
         Opcode 8 : Mark transaction as dead
         Opcode 9 : Undo routine to rollback the extend of a rollback segment
         Opcode 10 :Redo to perform the rollback of extend of rollback segment
                    to the segment header.
         Opcode 11 :Rollback DBA in transaction table entry - KTUBRB
         Opcode 12 :Change transaction state (in transaction table entry)
         Opcode 13 :Convert rollback segment format (V6 -> V7)
         Opcode 14 :Change extent allocation parameters in a rollback segment
         Opcode 15 :
         Opcode 16 :
         Opcode 17 :
         Opcode 18 :
         Opcode 19 : Transaction start audit log record
         Opcode 20 : Transaction continue audit log record     
         Opcode 24 : Kernel Transaction Undo Relog CHanGe - KTURLGU
    Layer 6 : Control File -  KCOCODCF     [tbs.h]

    Layer 10 : INDEX -  KCOCODIX     [kdi.h]
         Opcode 1 : load index block (Loader with direct mode)
         Opcode 2 : Insert leaf row
         Opcode 3 : Purge leaf row
         Opcode 4 : Mark leaf row deleted
         Opcode 5 : Restore leaf row (clear leaf delete flags)
         Opcode 6 : Lock index block
         Opcode 7 : Unlock index block
         Opcode 8 : Initialize new leaf block
         Opcode 9 : Apply Itl Redo
         Opcode 10 :Set leaf block next link
         Opcode 11 :Set leaf block previous link
         Opcode 12 :Init root block after split
         Opcode 13 :Make leaf block empty
         Opcode 14 :Restore block before image
         Opcode 15 :Branch block row insert
         Opcode 16 :Branch block row purge
         Opcode 17 :Initialize new branch block
         Opcode 18 :Update keydata in row
         Opcode 19 :Clear row's split flag
         Opcode 20 :Set row's split flag
         Opcode 21 :General undo above the cache (undo)
         Opcode 22 :Undo operation on leaf key above the cache (undo)
         Opcode 23 :Restore block to b-tree
         Opcode 24 :Shrink ITL (transaction entries)
         Opcode 25 :Format root block redo
         Opcode 26 :Undo of format root block (undo)
         Opcode 27 :Redo for undo of format root block
         Opcode 28 :Undo for migrating block
         Opcode 29 :Redo for migrating block
         Opcode 30 :IOT leaf block nonkey update
         Opcode 31 :Cirect load root redo
         Opcode 32 :Combine operation for insert and restore rows

    Layer 11 : Row Access -  KCOCODRW     [kdocts.h]
         Opcode 1 : Interpret Undo Record (Undo)
         Opcode 2 : Insert Row Piece
         Opcode 3 : Drop Row Piece
         Opcode 4 : Lock Row Piece
         Opcode 5 : Update Row Piece
         Opcode 6 : Overwrite Row Piece
         Opcode 7 : Manipulate First Column (add or delete the 1rst column)
         Opcode 8 : Change Forwarding address
         Opcode 9 : Change the Cluster Key Index
         Opcode 10 :Set Key Links (change the forward & backward key links
                    on a cluster key)
         Opcode 11 :Quick Multi-Insert (ex: insert as select ...)
         Opcode 12 :Quick Multi-Delete
         Opcode 13 :Toggle Block Header flags

    Layer 12 : Cluster -  KCOCODCL     [?]

    Layer 13 : Transaction Segment -  KCOCOTSG     [ktscts.h]
         Opcode 1 : Data segment format
         Opcode 2 : Merge
         Opcode 3 : Set link in block
         Opcode 4 : Not used
         Opcode 5 : New block (affects segment header)
         Opcode 6 : Format block (affects data block)
         Opcode 7 : Record link
         Opcode 8 : Undo free list (undo)
         Opcode 9 : Redo free list head (called as part of undo)
         Opcode 9 : Format free list block (freelist group)
         Opcode 11 :Format new blocks in free list
         Opcode 12 :free list clear
         Opcode 13 :free list restore (back) (undo of opcode 12)

    Layer 14 : Transaction Extent -  KCOCOTEX     [kte.h]
         Opcode 1 : Add extent to segment
         Opcode 2 : Unlock Segment Header
         Opcode 3 : Extent DEaLlocation (DEL)
         Opcode 4 : Undo to Add extent operation (see opcode 1)
         Opcode 5 : Extent Incarnation number increment
         Opcode 6 : Lock segment Header
         Opcode 7 : Undo to rollback extent deallocation (see opcode 3)
         Opcode 8 : Apply Position Update (truncate)
         Opcode 9 : Link blocks to Freelist
         Opcode 10 :Unlink blocks from Freelist
         Opcode 11 :Undo to Apply Position Update (see opcode 8)
         Opcode 12 :Convert segment header to 6.2.x type

    Layer 15 : Table Space -  KCOCOTTS     [ktt.h]
        Opcode 1 : Format deferred rollback segment header
        Opcode 2 : Add deferred rollback record
        Opcode 3 : Move to next block
        Opcode 4 : Point to next deferred rollback record

    Layer 16 : Row Cache -  KCOCOQRC     

    Layer 17 : Recovery (REDO) -  KCOCORCV     [kcv.h]
         Opcode 1 : End Hot Backup : This operation clears the hot backup
                    in-progress flags in the indicated list of files
         Opcode 2 : Enable Thread : This operation creates a redo record
                    signalling that a thread has been enabled
         Opcode 3 : Crash Recovery Marker
         Opcode 4 : Resizeable datafiles
         Opcode 5 : Tablespace ONline
         Opcode 6 : Tablespace OFFline
         Opcode 7 : Tablespace ReaD Write
         Opcode 8 : Tablespace ReaD Only
         Opcode 9 : ADDing datafiles to database
         Opcode 10 : Tablespace DRoP
         Opcode 11 : Tablespace PitR     
    Layer 18 : Hot Backup Log Blocks -  KCOCOHLB     [kcb.h]
         Opcode 1 : Log block image
         Opcode 2 : Recovery testing

    Layer 19 : Direct Loader Log Blocks - KCOCODLB     [kcbl.h]
         Opcode 1 : Direct block logging
         Opcode 2 : Invalidate range
         Opcode 3 : Direct block relogging
         Opcode 4 : Invalidate range relogging     
    Layer 20 : Compatibility Segment operations - KCOCOKCK  [kck.h]
         Opcode 1 : Format compatibility segment -  KCKFCS
         Opcode 2 : Update compatibility segment - KCKUCS
    Layer 21 : LOB segment operations - KCOCOLFS     [kdl2.h]
         Opcode 1 : Write data into ILOB data block - KDLOPWRI
    Layer 22 : Tablespace bitmapped file operations -  KCOCOTBF [ktfb.h]
Opcode 1 : format space header - KTFBHFO
Opcode 2 : space header generic redo - KTFBHREDO
Opcode 3 : space header undo - KTFBHUNDO
Opcode 4 : space bitmap block format - KTFBBFO
Opcode 5 : bitmap block generic redo - KTFBBREDO
    Layer 23 : write behind logging of blocks - KCOCOLWR [kcbb.h]
Opcode 1 : Dummy block written callback - KCBBLWR
    Layer 24 : Logminer related (DDL or OBJV# redo) - KCOCOKRV [krv.h]
Opcode : common portion of the ddl - KRVDDL
Opcode : direct load redo - KRVDLR
Opcode : lob related info - KRVLOB
Opcode : misc info - KRVMISC
Opcode : user info - KRVUSER
--CV是組成REDO RECORD的基礎,REDO RECORD是由一組CV組成的,這組CV完成對數據庫的一個原子修改操作。
--舉個例子,一個REDO RECORD裏可能包含3個CV,第一個是對UNDO SEGMENT HEADER的修改,
--第二個是對UNDO SEGMENT的修改,第三個是對DATA BLOCK的修改。而一個事務可能包含N個REDO RECORD。
--當前臺進程要對某個數據塊進行修改的時候,
--首先要形成相關的CHANGE VECTOR,然後把多個CV組成REDO RECORD,把REDO RECORD寫入LOG BUFFER後,前臺進程可以將CV提交到相關的數據塊上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章