ASM Virtually addressed metadata- Continuing Operations Directory

Continuing Operations Directory简称COD,是ASM的4号文件,该文件的作用是记录一些持续性的操作,当操作意外终止时,可以利用COD来实现继续完成或者回滚,如果说ACD是ASM实例的redo的话,那么COD就是ASM实例的undo。
COD的持续性操作类型分为Background operation和Rollback operation。

所谓Background operation就是由ASM实例后台进程发起的操作,由COD的0号block记录,所以0号block也称为COD BackGround Operations block,最经典的例子就是rebalance操作,当ASM实例在rebalance操作未完成时crash,或者磁盘组意外dismount,那么当磁盘组重新mount之后,COD BackGround Operations block会告诉ASM实例继续完成rebalance操作,直至完成;

  • KFBTYP_COD_BGO:COD BackGround Operations block
  • kfrcbg.op:BackGround Operation的opcode,由KFRCBG_OPDEF定义,1为rebalance
  • kfrcbg.inum:执行Background operation的ASM实例号
  • 手动去触发rebalance会发现有kfrcbg.bgdata为1,说明rebalance正在进行,当reblance完成时kfrcbg.bgdata将变回0

而Rollback operation是由ASM实例的前台进程发起,比如添加文件、删除文件等等,由COD的1号block记录,所以1号block也成为COD RollBack Operations block,该block非常类似undo表空间的undo segment header,当有Rollback operation操作类型的操作发起,首先会在COD RollBack Operations block的kfrcrb slot上去绑定opcode,这与oracle实例的事务绑定undo segment header的事务表slot非常类似,当该操作完成或者操作失败回滚之后,对应的kfrcrb slot将被释放变成0。

  • KFBTYP_COD_RBO:COD RollBack Operations block:

RollBack Operations的相关操作记录是从COD的2号块开始存放,也称之为COD rollback Data block,与undo block非常类似,当操作失败可以利用COD rollback Data block进行回滚。

注意,ACD也记录了该操作使用的所有COD变更记录,这与redo也记录了undo的改动是同样的原理,例如下面添加数据文件的例子,ACD记录了该操作绑定了kfrcrb slot 0,操作类型(opname)为1(create file),COD DATA记录在COD的2号块等等信息。

当磁盘组由于cod recover报错导致磁盘组无法mount时,通常可以通过event 15195 level 604去跳过cod recover,从而mount磁盘组。

此条目发表在Oracle, Oracle Recover分类目录,贴了, , , , 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注