《深入了解Oracle ASM(二):ASM File number 1 文件目录》
《【Oracle ASM】ASM FILE NUMBER #2 DISK Directory》
ASM FILE NUMBER 3中存放的是Active Change Directory,其作用在于维护对于一个或者多个metadata block的原子性变化,ASM的redo log record 会写入到Active Change Directory(COD)中。
log record是通过单一IO写出的。每一个ASM实例会为ACD分配42个AU的区域来存放生成的redo。 每一个AU的blkn=0用来存放检查点记录。 检查点记录每3秒被写一次,其描述了当实例crash时应当从哪里开始读取redo。
AU中剩余的部分循环写入redo,这些redo包含了所有metadata block的变化。这一块很像RDBMS的redolog。
ACDC – ACD checkpoint
ABA – ACD block address
LGE – ACD redo log record
BCD – ACD block change descriptor
SQL> SELECT xnum_kffxp "Extent", au_kffxp "AU", disk_kffxp "Disk" from x$kffxp
2 WHERE group_kffxp=1 and number_kffxp=3
3 and xnum_kffxp <> 2147483648;
Extent AU Disk
---------- ---------- ----------
0 3 8
0 2 7
0 2 5
1 3 1
1 2 13
1 4 2
2 2 12
2 3 13
2 3 0
3 3 5
3 4 1
Extent AU Disk
---------- ---------- ----------
3 5 2
4 3 7
4 3 4
4 4 8
5 2 10
5 5 8
5 4 13
6 6 2
6 4 0
6 4 4
7 2 3
Extent AU Disk
---------- ---------- ----------
7 2 6
7 5 1
8 5 4
8 7 2
8 6 1
9 5 13
9 8 2
9 5 0
10 6 0
10 9 2
10 6 13
33 rows selected.
[oracle@mlab2 trace]$ kfed read /oracleasm/asm-disk09 aus=4194304 aun=3 blkn=0|less
kfbh.endian: 1 ; 0x000: 0x01
kfbh.hard: 130 ; 0x001: 0x82
kfbh.type: 7 ; 0x002: KFBTYP_ACDC
kfbh.datfmt: 1 ; 0x003: 0x01
kfbh.block.blk: 0 ; 0x004: blk=0
kfbh.block.obj: 3 ; 0x008: file=3
kfbh.check: 1111708235 ; 0x00c: 0x4243524b
kfbh.fcn.base: 0 ; 0x010: 0x00000000
kfbh.fcn.wrap: 0 ; 0x014: 0x00000000
kfbh.spare1: 0 ; 0x018: 0x00000000
kfbh.spare2: 0 ; 0x01c: 0x00000000
kfracdc.eyec[0]: 65 ; 0x000: 0x41
kfracdc.eyec[1]: 67 ; 0x001: 0x43
kfracdc.eyec[2]: 68 ; 0x002: 0x44
kfracdc.eyec[3]: 67 ; 0x003: 0x43
kfracdc.thread: 1 ; 0x004: 0x00000001
kfracdc.lastAba.seq: 4294967295 ; 0x008: 0xffffffff
kfracdc.lastAba.blk: 4294967295 ; 0x00c: 0xffffffff
kfracdc.blk0: 1 ; 0x010: 0x00000001
kfracdc.blks: 11263 ; 0x014: 0x00002bff
kfracdc.ckpt.seq: 6 ; 0x018: 0x00000006
kfracdc.ckpt.blk: 5310 ; 0x01c: 0x000014be
kfracdc.fcn.base: 44621 ; 0x020: 0x0000ae4d
kfracdc.fcn.wrap: 0 ; 0x024: 0x00000000
kfracdc.bufBlks: 512 ; 0x028: 0x00000200
kfracdc.strt112.seq: 2 ; 0x02c: 0x00000002
kfracdc.strt112.blk: 0 ; 0x030: 0x00000000
ACD的AU的blkn=0记录checkpoint record ,KFBTYP_ACDC即 Checkpoint block
kfracdc
- kfracdc.eyec[0] eye catcher: ACDC
- kfracdc.thread: 线程号
- kfracdc.lastAba.seq/blk last valid block of the aba
- kfracdc.blk0 addr of block 0 of this thd
- kfracdc.ckpt.seq/blk checkpoint ABA. recovery must start here
- kfracdc.fcn.base/wrap checkpoint FCN. If thread is closed, this is last KFCN it wrote to the log
- bufBlks size of buffer in blks when this chunk was last opened
- kfracdc.blks # of blocks in this thread
blkn=0 之后的均是KFBTYP_CHNGDIR 即Active change block
oracle@mlab2 trace]$ kfed read /oracleasm/asm-disk09 aus=4194304 aun=3 blkn=1|less kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 8 ; 0x002: KFBTYP_CHNGDIR kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 1 ; 0x004: blk=1 kfbh.block.obj: 3 ; 0x008: file=3 kfbh.check: 17400326 ; 0x00c: 0x01098206 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfracdb.aba.seq: 2 ; 0x000: 0x00000002 kfracdb.aba.blk: 0 ; 0x004: 0x00000000 kfracdb.ents: 2 ; 0x008: 0x0002 kfracdb.ub2spare: 0 ; 0x00a: 0x0000 kfracdb.lge[0].valid: 1 ; 0x00c: V=1 B=0 M=0 kfracdb.lge[0].chgCount: 1 ; 0x00d: 0x01 kfracdb.lge[0].len: 64 ; 0x00e: 0x0040 kfracdb.lge[0].kfcn.base: 1 ; 0x010: 0x00000001 kfracdb.lge[0].kfcn.wrap: 0 ; 0x014: 0x00000000 kfracdb.lge[0].bcd[0].kfbl.blk: 0 ; 0x018: blk=0 kfracdb.lge[0].bcd[0].kfbl.obj: 4 ; 0x01c: file=4 kfracdb.lge[0].bcd[0].kfcn.base: 0 ; 0x020: 0x00000000 kfracdb.lge[0].bcd[0].kfcn.wrap: 0 ; 0x024: 0x00000000 kfracdb.lge[0].bcd[0].oplen: 4 ; 0x028: 0x0004 kfracdb.lge[0].bcd[0].blkIndex: 0 ; 0x02a: 0x0000 kfracdb.lge[0].bcd[0].flags: 28 ; 0x02c: F=0 N=0 F=1 L=1 V=1 A=0 C=0 kfracdb.lge[0].bcd[0].opcode: 212 ; 0x02e: 0x00d4 kfracdb.lge[0].bcd[0].kfbtyp: 9 ; 0x030: KFBTYP_COD_BGO kfracdb.lge[0].bcd[0].redund: 19 ; 0x031: SCHE=0x1 NUMB=0x3 kfracdb.lge[0].bcd[0].pad: 63903 ; 0x032: 0xf99f kfracdb.lge[0].bcd[0].KFRCOD_CRASH: 1 ; 0x034: 0x00000001 kfracdb.lge[0].bcd[0].au[0]: 7 ; 0x038: 0x00000007 kfracdb.lge[0].bcd[0].au[1]: 3 ; 0x03c: 0x00000003 kfracdb.lge[0].bcd[0].au[2]: 6 ; 0x040: 0x00000006 kfracdb.lge[0].bcd[0].disks[0]: 0 ; 0x044: 0x0000 kfracdb.lge[0].bcd[0].disks[1]: 3 ; 0x046: 0x0003 kfracdb.lge[0].bcd[0].disks[2]: 4 ; 0x048: 0x0004 kfracdb.lge[1].valid: 1 ; 0x04c: V=1 B=0 M=0 kfracdb.lge[1].chgCount: 1 ; 0x04d: 0x01 kfracdb.lge[1].len: 64 ; 0x04e: 0x0040 kfracdb.lge[1].kfcn.base: 2 ; 0x050: 0x00000002 kfracdb.lge[1].kfcn.wrap: 0 ; 0x054: 0x00000000 kfracdb.lge[1].bcd[0].kfbl.blk: 1 ; 0x058: blk=1 kfracdb.lge[1].bcd[0].kfbl.obj: 4 ; 0x05c: file=4 kfracdb.lge[1].bcd[0].kfcn.base: 0 ; 0x060: 0x00000000 kfracdb.lge[1].bcd[0].kfcn.wrap: 0 ; 0x064: 0x00000000 kfracdb.lge[1].bcd[0].oplen: 4 ; 0x068: 0x0004 kfracdb.lge[1].bcd[0].blkIndex: 1 ; 0x06a: 0x0001 kfracdb.lge[1].bcd[0].flags: 28 ; 0x06c: F=0 N=0 F=1 L=1 V=1 A=0 C=0 kfracdb.lge[1].bcd[0].opcode: 212 ; 0x06e: 0x00d4 kfracdb.lge[1].bcd[0].kfbtyp: 15 ; 0x070: KFBTYP_COD_RBO kfracdb.lge[1].bcd[0].redund: 19 ; 0x071: SCHE=0x1 NUMB=0x3 kfracdb.lge[1].bcd[0].pad: 63903 ; 0x072: 0xf99f :
其中
kfracdb.aba.seq/blk the ABA of this block
kfracdb.ents # of kfrlge entries in block
kfracdb.lge[0].valid: 之后的是实际的redo entry
[…] 《【Oracle ASM】ASM FILE NUMBER 3 Active Change Directory》 中我们介绍而来ACD,但是对于长时间运行的操作则简单的ACD不足以描述其变化。 在一些特殊情况下,Continuing Operations Directory (COD)会分配记录来跟踪大的操作并保证其完成。 如果由于进程失败而导致操作没有彻底完成,则恢复进程将查询该COD记录,并要么完成 要么回滚该操作。 […]
[…] 【Oracle ASM】ASM FILE NUMBER 3 Active Change Directory […]