深入理解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提交到相关的数据块上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值