【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实例时完成。
asm database file creation
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
--转自
该贴由koei123转至本版2015-2-6 4:47:18