《【Oracle ASM】ASM FILE NUMBER 3 Active Change Directory》 中我们介绍而来ACD,但是对于长时间运行的操作则简单的ACD不足以描述其变化。 在一些特殊情况下,Continuing Operations Directory (COD)会分配记录来跟踪大的操作并保证其完成。 如果由于进程失败而导致操作没有彻底完成,则恢复进程将查询该COD记录,并要么完成 要么回滚该操作。
一般有2种持续性的操作,分别为 回滚和后台操作。 后台操作一般由ASM实例的后台进程来实施。 其作为diskgroup维护的一部分来完成,而非特殊要求。一个后台操作持续工作,直到其完成或者实例CRASH。
如果实例CRASH,则恢复实例时将需要重启该后台操作。 rebalance diskgroup即是后台操作的一种。
回滚操作类似于数据库事务。 其由ASM前台进程申请启动。 在此操作过程中diskgroup处于非一致的状态。该操作要么全部完成 ,要么全部回滚。长见由数据库实例来引发这些前台操作。如果数据库实例CRASH,ASM前台进程失败,或者出现一些不可恢复的错误,则该操作将被终止。 创建一个文件将会是一个比较好的例子。如果当创建一个文件时若发生错误,则正为该文件分配的空间需要被释放,部分创建的文件也要被删除。 若数据库实例并未提交该创建,则文件必须被删除。如果ASM实例CRASh了,则该工作需要recover实例时完成。
Continuing Operation Directory (COD) 该metadata file 4 中记录的是在单个metadata block中无法完成的操作记录到COD中,这样当ASM instance crash时可以恢复这些操作。例如创建 删除和resize文件,这其中file number 4 blkn=1为KFBTYP_COD_RB 即回滚rollback数据,后面的数据为KFBTYP_COD_DATA。
可回滚的操作opcodes包括:
1 - Create a file 2 - Delete a file 3 - Resize a file 4 - Drop alias entry 5 - Rename alias entry 6 - Rebalance space COD 7 - Drop disks force 8 - Attribute drop 9 - Disk Resync 10 - Disk Repair Time 11 - Volume create 12 - Volume delete 13 - Attribute directory creation 14 - Set zone attributes 15 - User drop
每次ASM diskgroup 尝试mount时都会读取FILE number 4 COD中的数据来保证操作要么完成、要么回滚。
SQL> SELECT xnum_kffxp "Extent", au_kffxp "AU", disk_kffxp "Disk" from x$kffxp 2 WHERE group_kffxp=1 and number_kffxp=4 3 and xnum_kffxp <> 2147483648; Extent AU Disk ---------- ---------- ---------- 0 7 0 0 3 3 0 6 4 1 3 10 1 2 11 1 3 6 SQL> select path,disk_number from v$asm_disk where disk_number=0; PATH -------------------------------------------------------------------------------- DISK_NUMBER ----------- /oracleasm/asm-disk01 0 [oracle@mlab2 ~]$ kfed read /oracleasm/asm-disk01 aus=4194304 aun=7 blkn=0|less kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 9 ; 0x002: KFBTYP_COD_BGO kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 4 ; 0x008: file=4 kfbh.check: 17378383 ; 0x00c: 0x01092c4f kfbh.fcn.base: 44618 ; 0x010: 0x0000ae4a kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfrcbg.size: 0 ; 0x000: 0x0000 kfrcbg.op: 0 ; 0x002: 0x0000 kfrcbg.inum: 0 ; 0x004: 0x00000000 kfrcbg.iser: 0 ; 0x008: 0x00000000 kfrcbg.iser: 0 ; 0x008: 0x00000000 [oracle@mlab2 ~]$ kfed read /oracleasm/asm-disk01 aus=4194304 aun=7 blkn=1|less kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 15 ; 0x002: KFBTYP_COD_RBO kfbh.datfmt: 2 ; 0x003: 0x02 kfbh.block.blk: 1 ; 0x004: blk=1 kfbh.block.obj: 4 ; 0x008: file=4 kfbh.check: 34548815 ; 0x00c: 0x020f2c4f kfbh.fcn.base: 44619 ; 0x010: 0x0000ae4b kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfrcrb[0].opcode: 0 ; 0x000: 0x0000 kfrcrb[1].opcode: 0 ; 0x002: 0x0000 kfrcrb[2].opcode: 0 ; 0x004: 0x0000 kfrcrb[3].opcode: 0 ; 0x006: 0x0000 kfrcrb[4].opcode: 0 ; 0x008: 0x0000 kfrcrb[5].opcode: 0 ; 0x00a: 0x0000 kfrcrb[6].opcode: 0 ; 0x00c: 0x0000 kfrcrb[7].opcode: 0 ; 0x00e: 0x0000 kfrcrb[8].opcode: 0 ; 0x010: 0x0000 kfrcrb[9].opcode: 0 ; 0x012: 0x0000 kfrcrb[10].opcode: 0 ; 0x014: 0x0000 kfrcrb[11].opcode: 0 ; 0x016: 0x0000 kfrcrb[12].opcode: 0 ; 0x018: 0x0000 kfrcrb[13].opcode: 0 ; 0x01a: 0x0000 kfrcrb[14].opcode: 0 ; 0x01c: 0x0000 kfrcrb[15].opcode: 0 ; 0x01e: 0x0000 kfrcrb[16].opcode: 0 ; 0x020: 0x0000 kfrcrb[17].opcode: 0 ; 0x022: 0x0000 kfrcrb[18].opcode: 0 ; 0x024: 0x0000 kfrcrb[19].opcode: 0 ; 0x026: 0x0000 kfrcrb[20].opcode: 0 ; 0x028: 0x0000 kfrcrb[21].opcode: 0 ; 0x02a: 0x0000 kfrcrb[22].opcode: 0 ; 0x02c: 0x0000 kfrcrb[23].opcode: 0 ; 0x02e: 0x0000 kfrcrb[24].opcode: 0 ; 0x030: 0x0000 kfrcrb[25].opcode: 0 ; 0x032: 0x0000 kfrcrb[26].opcode: 0 ; 0x034: 0x0000 kfrcrb[27].opcode: 0 ; 0x036: 0x0000 kfrcrb[28].opcode: 0 ; 0x038: 0x0000 kfrcrb[29].opcode: 0 ; 0x03a: 0x0000 kfrcrb[30].opcode: 0 ; 0x03c: 0x0000 kfrcrb[31].opcode: 0 ; 0x03e: 0x0000 kfrcrb[32].opcode: 0 ; 0x040: 0x0000 kfrcrb[33].opcode: 0 ; 0x042: 0x0000 kfrcrb[34].opcode: 0 ; 0x044: 0x0000 kfrcrb[35].opcode: 0 ; 0x046: 0x0000 kfrcrb[36].opcode: 0 ; 0x048: 0x0000 kfrcrb[37].opcode: 0 ; 0x04a: 0x0000 kfrcrb[38].opcode: 0 ; 0x04c: 0x0000 kfrcrb[39].opcode: 0 ; 0x04e: 0x0000 kfrcrb[40].opcode: 0 ; 0x050: 0x0000 kfrcrb[41].opcode: 0 ; 0x052: 0x0000 kfrcrb[42].opcode: 0 ; 0x054: 0x0000 : [oracle@mlab2 ~]$ kfed read /oracleasm/asm-disk01 aus=4194304 aun=7 blkn=2|less kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 16 ; 0x002: KFBTYP_COD_DATA kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 2 ; 0x004: blk=2 kfbh.block.obj: 4 ; 0x008: file=4 kfbh.check: 856815006 ; 0x00c: 0x3311f59e kfbh.fcn.base: 22895 ; 0x010: 0x0000596f kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000
kfbh.type KFBTYP_COD_BGO
KFBTYP_COD_BGO COD BackGround Operations block
KFBTYP_COD_RBO COD RollBack Operations block
KFBTYP_COD_DATA COD rollback Data block
kfrcbg.op opcode defined by KFRCBG_OPDEF
kfrcbg.inum owning instance number
kfrcbg.iser instance serial number
[…] 【Oracle ASM】Continuing Operations Directory (file #4) […]