Oracle ASM Continuing Operations Directory
Continuing Operations Directory(COD)
COD用來跟蹤ASM中長時間執行的操作,例如rebalance, drop disk, create/delete/resize file,這些資訊ACD的簡要結構不足以描述其變化,這些操作需要透過ASM的COD目錄去追蹤,COD是ASM的4號檔案,A每一個磁碟組都會有一個COD。如果程式在執行長時間操作未正常完成前異常終止,將會有恢復程式檢視COD區域的記錄嘗試完成或回退這個操作,有兩種型別的持續性操作:後臺操作和回滾操作。
後臺操作
後臺操作是由ASM例項的後臺程式去執行的,它作為磁碟組的維護任務的一部分,而非特殊要求,直到完成或者ASM例項掛掉,如果ASM例項掛掉,執行恢復的例項需要重新執行後臺操作,磁碟組的rebalance就是一個很好的後臺操作的例子。我們查詢內部檢視X$KFFXP找到磁碟組3的COD的AU分佈,COD是ASM的檔案4,因此在查詢中設定了number_kffxp=4。
SQL> select group_number,name,type from v$asm_diskgroup; GROUP_NUMBER NAME TYPE ------------ ------------------------------ ------------ 1 ARCHDG NORMAL 2 CRSDG EXTERN 3 DATADG NORMAL 4 TESTDG NORMAL SQL> select group_number, disk_number, state, name,failgroup,mount_status from v$asm_disk where group_number=3; GROUP_NUMBER DISK_NUMBER STATE NAME FAILGROUP MOUNT_STATUS ------------ ----------- ------------------------------ ------------------------------ ------------------------------------------------------------ -------------- 3 0 NORMAL DATADG_0001 DATADG_0001 CACHED 3 3 NORMAL DATADG_0000 DATADG_0000 CACHED 3 1 NORMAL DATADG_0003 DATADG_0003 CACHED 3 2 NORMAL DATADG_0002 DATADG_0002 CACHED SQL> select group_number,disk_number,name,path,state from v$asm_disk where group_number=3; GROUP_NUMBER DISK_NUMBER NAME PATH STATE ------------ ----------- ------------------------------ ------------------------------ ------------------------------ 3 0 DATADG_0001 /dev/raw/raw11 NORMAL 3 3 DATADG_0000 /dev/raw/raw10 NORMAL 3 1 DATADG_0003 /dev/raw/raw4 NORMAL 3 2 DATADG_0002 /dev/raw/raw3 NORMAL SQL> select number_kffxp file#, disk_kffxp disk#, count(disk_kffxp) extents 2 from x$kffxp 3 where group_kffxp=3 4 and disk_kffxp <> 65534 5 and number_kffxp=4 6 group by number_kffxp, disk_kffxp 7 order by 1; FILE# DISK# EXTENTS ---------- ---------- ---------- 4 0 6 4 1 5 4 2 6 4 3 7
可以看到,上面顯示file #的資訊有4條,每個COD大小分別是6個AU,5個AU,6個AU,7個AU。因磁碟組DATADG有4個磁碟所以有4行記錄。
查詢COD在磁碟組DATADG中的AU分佈情況
SQL> select x.xnum_kffxp "virtual extent",pxn_kffxp "physical extent",x.au_kffxp "au",x.disk_kffxp "disk #",d.name "disk name" 2 from x$kffxp x, v$asm_disk_stat d 3 where x.group_kffxp=d.group_number 4 and x.disk_kffxp=d.disk_number 5 and x.group_kffxp=3 6 and x.number_kffxp=4 7 order by 1, 2,3; virtual extent physical extent au disk # disk name -------------- --------------- ---------- ---------- ------------------------------------------------------------ 0 0 36 2 DATADG_0002 0 1 35 3 DATADG_0000 0 2 35 1 DATADG_0003 1 3 36 3 DATADG_0000 1 4 37 0 DATADG_0001 1 5 37 2 DATADG_0002 2 6 72 1 DATADG_0003 2 7 71 0 DATADG_0001 2 8 71 3 DATADG_0000 3 9 72 0 DATADG_0001 3 10 72 3 DATADG_0000 3 11 73 1 DATADG_0003 4 12 73 2 DATADG_0002 4 13 73 0 DATADG_0001 4 14 73 3 DATADG_0000 5 15 74 3 DATADG_0000 5 16 74 1 DATADG_0003 5 17 74 2 DATADG_0002 6 18 75 1 DATADG_0003 6 19 75 2 DATADG_0002 6 20 74 0 DATADG_0001 7 21 75 0 DATADG_0001 7 22 76 2 DATADG_0002 7 23 75 3 DATADG_0000 24 rows selected.
因磁碟組DATADG為normal冗餘,並且有4個故障磁碟組所以COD資訊將會有三份副本。也就是說virtual extent對應的3個physical extent所對應的3個AU所儲存的內容是一樣的。
透過kfed工具來檢視COD的AU分佈情況
由於1號檔案總是開始在0號磁碟2號AU,記住這個位置:0號盤2號AU。這是ASM中定位檔案的起點,它的作用,有點相當於磁碟上的引導區,在電腦開機後負責將OS啟動起來。1號檔案在最少情況下,至少有兩個AU。在1號檔案中,每個檔案佔用一個後設資料塊,存放自身的空間分佈資訊。每個後設資料塊大小是4K,一個AU是1M,哪麼,每個AU中,可以儲存256個檔案的空間分佈資訊。這其中,0號盤2號AU中,全是元檔案的資訊。再具體一點,0號盤2號AU,第一個後設資料塊被系統佔用,從第二個塊開始,到255為止,共255個後設資料塊,對應索引號1至255的檔案。其實,也就是全部的元檔案了。也就是說0號盤2號AU,儲存了全部元檔案的空間分佈資訊。1號檔案的第二個AU,從第一個塊開始,儲存256號檔案。第二個塊對應257號檔案,等等。每次從ASM中讀資料時,Oracle都要先讀到1號檔案,從中找出要讀的目標檔案在磁碟上的分佈位置,然後再去讀取相應的檔案的資料。由於COD是4號檔案,所以要讀取0號磁碟(/dev/raw/raw11)的2號AU的4號塊
[grid@jyrac1 ~]$ kfed read /dev/raw/raw11 aun=2 blkn=4 | more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 4 ; 0x002: KFBTYP_FILEDIR kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 4 ; 0x004: blk=4 kfbh.block.obj: 1 ; 0x008: file=1 kfbh.check: 3953869782 ; 0x00c: 0xebab43d6 kfbh.fcn.base: 307 ; 0x010: 0x00000133 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfffdb.node.incarn: 1 ; 0x000: A=1 NUMM=0x0 kfffdb.node.frlist.number: 4294967295 ; 0x004: 0xffffffff kfffdb.node.frlist.incarn: 0 ; 0x008: A=0 NUMM=0x0 kfffdb.hibytes: 0 ; 0x00c: 0x00000000 kfffdb.lobytes: 8331264 ; 0x010: 0x007f2000 kfffdb.xtntcnt: 24 ; 0x014: 0x00000018 kfffdb.xtnteof: 24 ; 0x018: 0x00000018 kfffdb.blkSize: 4096 ; 0x01c: 0x00001000 kfffdb.flags: 1 ; 0x020: O=1 S=0 S=0 D=0 C=0 I=0 R=0 A=0 kfffdb.fileType: 15 ; 0x021: 0x0f kfffdb.dXrs: 19 ; 0x022: SCHE=0x1 NUMB=0x3 kfffdb.iXrs: 19 ; 0x023: SCHE=0x1 NUMB=0x3 kfffdb.dXsiz[0]: 4294967295 ; 0x024: 0xffffffff kfffdb.dXsiz[1]: 0 ; 0x028: 0x00000000 kfffdb.dXsiz[2]: 0 ; 0x02c: 0x00000000 kfffdb.iXsiz[0]: 4294967295 ; 0x030: 0xffffffff kfffdb.iXsiz[1]: 0 ; 0x034: 0x00000000 kfffdb.iXsiz[2]: 0 ; 0x038: 0x00000000 kfffdb.xtntblk: 24 ; 0x03c: 0x0018 kfffdb.break: 60 ; 0x03e: 0x003c kfffdb.priZn: 0 ; 0x040: KFDZN_COLD kfffdb.secZn: 0 ; 0x041: KFDZN_COLD kfffdb.ub2spare: 0 ; 0x042: 0x0000 kfffdb.alias[0]: 4294967295 ; 0x044: 0xffffffff kfffdb.alias[1]: 4294967295 ; 0x048: 0xffffffff kfffdb.strpwdth: 0 ; 0x04c: 0x00 kfffdb.strpsz: 0 ; 0x04d: 0x00 kfffdb.usmsz: 0 ; 0x04e: 0x0000 kfffdb.crets.hi: 33042831 ; 0x050: HOUR=0xf DAYS=0xc MNTH=0xc YEAR=0x7e0 kfffdb.crets.lo: 2457465856 ; 0x054: USEC=0x0 MSEC=0x27d SECS=0x27 MINS=0x24 kfffdb.modts.hi: 33042831 ; 0x058: HOUR=0xf DAYS=0xc MNTH=0xc YEAR=0x7e0 kfffdb.modts.lo: 2457465856 ; 0x05c: USEC=0x0 MSEC=0x27d SECS=0x27 MINS=0x24 kfffdb.dasz[0]: 0 ; 0x060: 0x00 kfffdb.dasz[1]: 0 ; 0x061: 0x00 kfffdb.dasz[2]: 0 ; 0x062: 0x00 kfffdb.dasz[3]: 0 ; 0x063: 0x00 kfffdb.permissn: 0 ; 0x064: 0x00 kfffdb.ub1spar1: 0 ; 0x065: 0x00 kfffdb.ub2spar2: 0 ; 0x066: 0x0000 kfffdb.user.entnum: 0 ; 0x068: 0x0000 kfffdb.user.entinc: 0 ; 0x06a: 0x0000 kfffdb.group.entnum: 0 ; 0x06c: 0x0000 kfffdb.group.entinc: 0 ; 0x06e: 0x0000 kfffdb.spare[0]: 0 ; 0x070: 0x00000000 kfffdb.spare[1]: 0 ; 0x074: 0x00000000 kfffdb.spare[2]: 0 ; 0x078: 0x00000000 kfffdb.spare[3]: 0 ; 0x07c: 0x00000000 kfffdb.spare[4]: 0 ; 0x080: 0x00000000 kfffdb.spare[5]: 0 ; 0x084: 0x00000000 kfffdb.spare[6]: 0 ; 0x088: 0x00000000 kfffdb.spare[7]: 0 ; 0x08c: 0x00000000 kfffdb.spare[8]: 0 ; 0x090: 0x00000000 kfffdb.spare[9]: 0 ; 0x094: 0x00000000 kfffdb.spare[10]: 0 ; 0x098: 0x00000000 kfffdb.spare[11]: 0 ; 0x09c: 0x00000000 kfffdb.usm: ; 0x0a0: length=0 kfffde[0].xptr.au: 36 ; 0x4a0: 0x00000024 kfffde[0].xptr.disk: 2 ; 0x4a4: 0x0002 kfffde[0].xptr.flags: 0 ; 0x4a6: L=0 E=0 D=0 S=0 kfffde[0].xptr.chk: 12 ; 0x4a7: 0x0c kfffde[1].xptr.au: 35 ; 0x4a8: 0x00000023 kfffde[1].xptr.disk: 3 ; 0x4ac: 0x0003 kfffde[1].xptr.flags: 0 ; 0x4ae: L=0 E=0 D=0 S=0 kfffde[1].xptr.chk: 10 ; 0x4af: 0x0a kfffde[2].xptr.au: 35 ; 0x4b0: 0x00000023 kfffde[2].xptr.disk: 1 ; 0x4b4: 0x0001 kfffde[2].xptr.flags: 0 ; 0x4b6: L=0 E=0 D=0 S=0 kfffde[2].xptr.chk: 8 ; 0x4b7: 0x08 kfffde[3].xptr.au: 36 ; 0x4b8: 0x00000024 kfffde[3].xptr.disk: 3 ; 0x4bc: 0x0003 kfffde[3].xptr.flags: 0 ; 0x4be: L=0 E=0 D=0 S=0 kfffde[3].xptr.chk: 13 ; 0x4bf: 0x0d kfffde[4].xptr.au: 37 ; 0x4c0: 0x00000025 kfffde[4].xptr.disk: 0 ; 0x4c4: 0x0000 kfffde[4].xptr.flags: 0 ; 0x4c6: L=0 E=0 D=0 S=0 kfffde[4].xptr.chk: 15 ; 0x4c7: 0x0f kfffde[5].xptr.au: 37 ; 0x4c8: 0x00000025 kfffde[5].xptr.disk: 2 ; 0x4cc: 0x0002 kfffde[5].xptr.flags: 0 ; 0x4ce: L=0 E=0 D=0 S=0 kfffde[5].xptr.chk: 13 ; 0x4cf: 0x0d kfffde[6].xptr.au: 72 ; 0x4d0: 0x00000048 kfffde[6].xptr.disk: 1 ; 0x4d4: 0x0001 kfffde[6].xptr.flags: 0 ; 0x4d6: L=0 E=0 D=0 S=0 kfffde[6].xptr.chk: 99 ; 0x4d7: 0x63 kfffde[7].xptr.au: 71 ; 0x4d8: 0x00000047 kfffde[7].xptr.disk: 0 ; 0x4dc: 0x0000 kfffde[7].xptr.flags: 0 ; 0x4de: L=0 E=0 D=0 S=0 kfffde[7].xptr.chk: 109 ; 0x4df: 0x6d kfffde[8].xptr.au: 71 ; 0x4e0: 0x00000047 kfffde[8].xptr.disk: 3 ; 0x4e4: 0x0003 kfffde[8].xptr.flags: 0 ; 0x4e6: L=0 E=0 D=0 S=0 kfffde[8].xptr.chk: 110 ; 0x4e7: 0x6e kfffde[9].xptr.au: 72 ; 0x4e8: 0x00000048 kfffde[9].xptr.disk: 0 ; 0x4ec: 0x0000 kfffde[9].xptr.flags: 0 ; 0x4ee: L=0 E=0 D=0 S=0 kfffde[9].xptr.chk: 98 ; 0x4ef: 0x62 kfffde[10].xptr.au: 72 ; 0x4f0: 0x00000048 kfffde[10].xptr.disk: 3 ; 0x4f4: 0x0003 kfffde[10].xptr.flags: 0 ; 0x4f6: L=0 E=0 D=0 S=0 kfffde[10].xptr.chk: 97 ; 0x4f7: 0x61 kfffde[11].xptr.au: 73 ; 0x4f8: 0x00000049 kfffde[11].xptr.disk: 1 ; 0x4fc: 0x0001 kfffde[11].xptr.flags: 0 ; 0x4fe: L=0 E=0 D=0 S=0 kfffde[11].xptr.chk: 98 ; 0x4ff: 0x62 kfffde[12].xptr.au: 73 ; 0x500: 0x00000049 kfffde[12].xptr.disk: 2 ; 0x504: 0x0002 kfffde[12].xptr.flags: 0 ; 0x506: L=0 E=0 D=0 S=0 kfffde[12].xptr.chk: 97 ; 0x507: 0x61 kfffde[13].xptr.au: 73 ; 0x508: 0x00000049 kfffde[13].xptr.disk: 0 ; 0x50c: 0x0000 kfffde[13].xptr.flags: 0 ; 0x50e: L=0 E=0 D=0 S=0 kfffde[13].xptr.chk: 99 ; 0x50f: 0x63 kfffde[14].xptr.au: 73 ; 0x510: 0x00000049 kfffde[14].xptr.disk: 3 ; 0x514: 0x0003 kfffde[14].xptr.flags: 0 ; 0x516: L=0 E=0 D=0 S=0 kfffde[14].xptr.chk: 96 ; 0x517: 0x60 kfffde[15].xptr.au: 74 ; 0x518: 0x0000004a kfffde[15].xptr.disk: 3 ; 0x51c: 0x0003 kfffde[15].xptr.flags: 0 ; 0x51e: L=0 E=0 D=0 S=0 kfffde[15].xptr.chk: 99 ; 0x51f: 0x63 kfffde[16].xptr.au: 74 ; 0x520: 0x0000004a kfffde[16].xptr.disk: 1 ; 0x524: 0x0001 kfffde[16].xptr.flags: 0 ; 0x526: L=0 E=0 D=0 S=0 kfffde[16].xptr.chk: 97 ; 0x527: 0x61 kfffde[17].xptr.au: 74 ; 0x528: 0x0000004a kfffde[17].xptr.disk: 2 ; 0x52c: 0x0002 kfffde[17].xptr.flags: 0 ; 0x52e: L=0 E=0 D=0 S=0 kfffde[17].xptr.chk: 98 ; 0x52f: 0x62 kfffde[18].xptr.au: 75 ; 0x530: 0x0000004b kfffde[18].xptr.disk: 1 ; 0x534: 0x0001 kfffde[18].xptr.flags: 0 ; 0x536: L=0 E=0 D=0 S=0 kfffde[18].xptr.chk: 96 ; 0x537: 0x60 kfffde[19].xptr.au: 75 ; 0x538: 0x0000004b kfffde[19].xptr.disk: 2 ; 0x53c: 0x0002 kfffde[19].xptr.flags: 0 ; 0x53e: L=0 E=0 D=0 S=0 kfffde[19].xptr.chk: 99 ; 0x53f: 0x63 kfffde[20].xptr.au: 74 ; 0x540: 0x0000004a kfffde[20].xptr.disk: 0 ; 0x544: 0x0000 kfffde[20].xptr.flags: 0 ; 0x546: L=0 E=0 D=0 S=0 kfffde[20].xptr.chk: 96 ; 0x547: 0x60 kfffde[21].xptr.au: 75 ; 0x548: 0x0000004b kfffde[21].xptr.disk: 0 ; 0x54c: 0x0000 kfffde[21].xptr.flags: 0 ; 0x54e: L=0 E=0 D=0 S=0 kfffde[21].xptr.chk: 97 ; 0x54f: 0x61 kfffde[22].xptr.au: 76 ; 0x550: 0x0000004c kfffde[22].xptr.disk: 2 ; 0x554: 0x0002 kfffde[22].xptr.flags: 0 ; 0x556: L=0 E=0 D=0 S=0 kfffde[22].xptr.chk: 100 ; 0x557: 0x64 kfffde[23].xptr.au: 75 ; 0x558: 0x0000004b kfffde[23].xptr.disk: 3 ; 0x55c: 0x0003 kfffde[23].xptr.flags: 0 ; 0x55e: L=0 E=0 D=0 S=0 kfffde[23].xptr.chk: 98 ; 0x55f: 0x62 kfffde[24].xptr.au: 4294967295 ; 0x560: 0xffffffff kfffde[24].xptr.disk: 65535 ; 0x564: 0xffff kfffde[24].xptr.flags: 0 ; 0x566: L=0 E=0 D=0 S=0 kfffde[24].xptr.chk: 42 ; 0x567: 0x2a
從kfffde[0].xptr.au=36,kfffde[0].xptr.disk=2可知COD儲存在2號磁碟的36號AU,依此類推,這與上面的查詢結果是一致的。
下面透過kfed工具來驗證0號virtual extent的3個phyiscal extent所對的3個AU所儲存的內容
[grid@jyrac1 ~]$ kfed read /dev/raw/raw3 aun=36 blkn=0 | more 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: 17403005 ; 0x00c: 0x01098c7d kfbh.fcn.base: 3704 ; 0x010: 0x00000e78 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 [grid@jyrac1 ~]$ kfed read /dev/raw/raw10 aun=35 blkn=0 | more 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: 17403005 ; 0x00c: 0x01098c7d kfbh.fcn.base: 3704 ; 0x010: 0x00000e78 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 [grid@jyrac1 ~]$ kfed read /dev/raw/raw4 aun=35 blkn=0 | more 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: 17403005 ; 0x00c: 0x01098c7d kfbh.fcn.base: 3704 ; 0x010: 0x00000e78 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 -- 表示後臺程式操作,有2種屬性值,0 表示當前沒有後臺程式操作,1表示當前後臺程式正在進行reblance operation. kfrcbg.inum: 0 ; 0x004: 0x00000000 --表示後臺程式所運作的asm instance number kfrcbg.iser: 0 ; 0x008: 0x00000000
從上面的輸出可以看到,0號virtual extent的3個phyiscal extent所對應的3個AU(2號磁碟[/dev/raw/raw3]的36號AU,3號磁碟[/dev/raw/raw10]的35號AU,1號磁碟[/dev/raw/raw4]的35號AU)所儲存的內容是一樣的。上面顯示了一個COD的塊,kfbh.type=KFBTYP_COD_BGO顯示為background型別的操作,不過此刻並沒有後臺操作發生,因為所有的kfrcbg區域都是0,這代表了當前沒有活躍的後臺操作,如果操作程式碼kfrcbg.op為1,那麼將表示有活躍的磁碟的rebalance操作在進行。
回滾操作
Rollback操作型別類似於資料庫的事務。ASM的前臺程式發起請求,為了能夠記錄這個rollback操作,必須在ASM的COD目錄中申請一個槽位,COD目錄的block 1展示了所有的槽位和使用狀態,如果所有的槽位當時都是忙的,那麼這個操作會休息一段時間,直到發現其中一個可以使用。rollback型別操作過程中,磁碟組是一個不一致的狀態,這個操作需要完成或者回退所有它對磁碟組的更改。資料庫例項大多時候會去執行這個操作(例如新增資料檔案)。如果資料庫例項掛掉或者ASM前臺程式掛掉,一個不可恢復的錯誤會發生,然後這個操作會被終止。建立檔案是一個rollback操作非常好的例子,如果在檔案空間分配過程中發生錯誤,那麼已經分配過的空間需要被刪除,如果資料庫例項沒有提交檔案的建立操作,這個檔案必須被自動刪除,如果ASM例項掛掉,這個刪除操作會由恢復例項來執行。
使用kfed來檢視COD的1號塊:
先執行資料檔案的建立操作
SQL> create tablespace jycs datafile '+DATADG/jyrac/datafile/jycs01.dbf' size 1G ;
再檢視cod的1號塊
[grid@jyrac1 ~]$ kfed read /dev/raw/raw3 aun=36 blkn=1 | more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 15 ; 0x002: KFBTYP_COD_RBO --表示操作型別,15即為 KFBTYP_COD_RBO,RBO 即為rollback operation的簡寫 kfbh.datfmt: 2 ; 0x003: 0x02 kfbh.block.blk: 1 ; 0x004: blk=1 --表示當前後設資料所在的block號 kfbh.block.obj: 4 ; 0x008: file=4 kfbh.check: 34575077 ; 0x00c: 0x020f92e5 kfbh.fcn.base: 4320 ; 0x010: 0x000010e0 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 --kfrcrb rb即為rollback kfrcrb[0].opcode: 1 ; 0x000: 0x0001 --表示具體的操作型別,該opcode有很多種屬性值 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[i] 區域跟蹤了所有活躍的rollback型別操作,上面的資訊可以看到有一個操作正在進行中,kfrcrb[0]的值為1,從操作程式碼我們可以知道這是一個檔案的建立操作,rollback操作型別的程式碼參照表如下:
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
上面的操作是11G,如果是10G,kfrcrb[i]則是不一樣的多了kfrcrb[i].inum,kfrcrb[i].iser,kfrcrb[i].pnum例如:
[oracle@jyrac3 ~]$ kfed read /dev/raw/raw5 aun=7 blkn=1 aus=16777216 | more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 15 ; 0x002: KFBTYP_COD_RBO kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 1 ; 0x004: T=0 NUMB=0x1 kfbh.block.obj: 4 ; 0x008: TYPE=0x0 NUMB=0x4 kfbh.check: 17797779 ; 0x00c: 0x010f9293 kfbh.fcn.base: 4247 ; 0x010: 0x00001097 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfrcrb[0].opcode: 0 ; 0x000: 0x0000 --表示具體的操作型別,該opcode有很多種屬性值 kfrcrb[0].inum: 0 ; 0x002: 0x0000 --表示asm instance number kfrcrb[0].iser: 0 ; 0x004: 0x00000000 kfrcrb[0].pnum: 0 ; 0x008: 0x00000000 kfrcrb[1].opcode: 0 ; 0x00c: 0x0000 kfrcrb[1].inum: 0 ; 0x00e: 0x0000 kfrcrb[1].iser: 0 ; 0x010: 0x00000000 kfrcrb[1].pnum: 0 ; 0x014: 0x00000000 kfrcrb[2].opcode: 0 ; 0x018: 0x0000 kfrcrb[2].inum: 0 ; 0x01a: 0x0000 kfrcrb[2].iser: 0 ; 0x01c: 0x00000000 kfrcrb[2].pnum: 0 ; 0x020: 0x00000000 kfrcrb[3].opcode: 0 ; 0x024: 0x0000 kfrcrb[3].inum: 0 ; 0x026: 0x0000 kfrcrb[3].iser: 0 ; 0x028: 0x00000000 kfrcrb[3].pnum: 0 ; 0x02c: 0x00000000 kfrcrb[4].opcode: 0 ; 0x030: 0x0000 kfrcrb[4].inum: 0 ; 0x032: 0x0000 kfrcrb[4].iser: 0 ; 0x034: 0x00000000 kfrcrb[4].pnum: 0 ; 0x038: 0x00000000 kfrcrb[5].opcode: 0 ; 0x03c: 0x0000 kfrcrb[5].inum: 0 ; 0x03e: 0x0000 kfrcrb[5].iser: 0 ; 0x040: 0x00000000 kfrcrb[5].pnum: 0 ; 0x044: 0x00000000 kfrcrb[6].opcode: 0 ; 0x048: 0x0000 kfrcrb[6].inum: 0 ; 0x04a: 0x0000 kfrcrb[6].iser: 0 ; 0x04c: 0x00000000 kfrcrb[6].pnum: 0 ; 0x050: 0x00000000 kfrcrb[7].opcode: 0 ; 0x054: 0x0000 kfrcrb[7].inum: 0 ; 0x056: 0x0000 kfrcrb[7].iser: 0 ; 0x058: 0x00000000 kfrcrb[7].pnum: 0 ; 0x05c: 0x00000000 kfrcrb[8].opcode: 0 ; 0x060: 0x0000
接下來才是COD DATA
[grid@jyrac1 ~]$ kfed read /dev/raw/raw3 aun=36 blkn=2 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: 916174568 ; 0x00c: 0x369bb6e8 kfbh.fcn.base: 4320 ; 0x010: 0x000010e0 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000
這部分是COD DATA內容,從上面可以看到,基本上就是隻要頭部資訊,唯一更新的也就是check值和bash。
小結:
ASM的COD目錄跟蹤所有長時間執行的ASM操作,對於由於任何原因導致的問題,COD目錄中相關記錄可以用來把這些操作完成或回退。這些操作可能由另一個例項來完成或者由故障例項重啟後來完成。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2131594/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle ASM User Directory and Group DirectoryOracleASM
- Oracle ASM Disk DirectoryOracleASM
- Oracle ASM File DirectoryOracleASM
- Oracle ASM Alias DirectoryOracleASM
- Oracle ASM Template DirectoryOracleASM
- Oracle ASM Attributes DirectoryOracleASM
- Oracle ASM Volume DirectoryOracleASM
- Oracle ASM Active Change DirectoryOracleASM
- Oracle ASM Disk Used Space DirectoryOracleASM
- Oracle ASM Staleness Directory and Staleness RegistryOracleASM
- Long running Operations in OracleOracle
- create directory in OracleOracle
- move oracle 10 directoryOracle
- ORACLE directory 目錄Oracle
- oracle 之recovery directory databaseOracleDatabase
- Cyclic Operations
- Oracle Directory(目錄)介紹Oracle
- oracle asmOracleASM
- Oracle Directory目錄的知識Oracle
- oracle10g_audit_solaris_利用audit_sys_operationsOracle
- 【ORACLE ASM】ASM 支援工具簡介OracleASM
- oracle asm命令OracleASM
- Oracle ASM 管理OracleASM
- Oracle ASM 限制OracleASM
- oracle asm asmcmdOracleASM
- ORACLE directory 目錄讀寫檔案Oracle
- Using Create directory & UTL_FILE in OracleOracle
- aix6.1安裝oracle10.2.0.5報錯BEFORE CONTINUING:JAVA KSHAIOracleUIJava
- Oracle ASM Allocation TableOracleASM
- Oracle ASM Disk PartnerOracleASM
- Oracle Find block in ASMOracleBloCASM
- Oracle ASM 詳解OracleASM
- Operations that Require Temporary Segments (26)UI
- oracle中create directory建在/home/oracle下可能存在的風險Oracle
- oracle ASM中ASM_POWER_LIMIT引數OracleASMMIT
- Oracle ASM神書《撥雲見日 解密Oracle ASM核心》出版了OracleASM解密
- 【ASM】Oracle asm刪除磁碟組注意事項ASMOracle
- 【DIRECTORY】普通使用者建立Oracle DIRECTORY資料庫物件的許可權需求及探索Oracle資料庫物件