ASM的數據冗余機制是通過將extent的鏡像副本復制到同一磁盤組不同failgroup的磁盤上來實現的,這個磁盤被稱為partner磁盤。在11GR2版本,一個冗余(Normal,High)的磁盤組,每一個ASM磁盤多可以擁有8個partner磁盤,而在11GR2版本之前每一個磁盤多擁有10個partner。在external冗余方式的磁盤組內既沒有failgroup,磁盤之間也沒有partner關系。
譯者注:1)其實外部冗余的磁盤組每一個磁盤也會分配一個獨立failgroup的名字,可以通過查詢視圖v$asm_disk查看到,但是它并不具有真實的意義。2)可以通過隱含參數_asm_partner_target_disk_part來調整partner的數量,但是譯者還實在沒想到理由去這么做。
如果一個normal冗余的磁盤組擁有兩個磁盤,它們之間就是partner關系。所有在磁盤0上的extent都在磁盤1上有鏡像副本,反之亦然,這種情況下,每個磁盤有一個partner(互為partner)。
如果一個normal冗余的磁盤組擁有三個磁盤,同時沒有手工指定failgroup的情況下,每個磁盤將擁有兩個partner。磁盤0與磁盤1、2有partner關系,磁盤1與磁盤0、2有partner關系,磁盤2與磁盤0、1有partner關系。當有一個extent分配到磁盤0時,它的鏡像副本將被分配到磁盤1或者2,但是不是兩者都有,注意,一個normal冗余的磁盤組內每個extent只有兩份鏡像副本,而不是三個。同理,磁盤1上的一個extent,它的鏡像副本會在磁盤0或磁盤2上,磁盤2上的一個extent會有一個鏡像副本在磁盤0或磁盤1,整個分配方式還是比較簡單清晰的。
譯者注:如果是元數據的extent,會在Normal冗余的磁盤組上有三份副本,當然假如failgroup的數量大于等于三。
由3個磁盤組成high冗余磁盤組的情況與此類似。磁盤間的parnter關系與上一段所述的3個磁盤組成normal冗余磁盤組完全一致。不同點在于鏡像級別,磁盤0上的每個Extent會在parnter磁盤即磁盤1和磁盤2上都有鏡像副本。磁盤1上的每個Extent也是一樣的,在磁盤0和磁盤2上都有鏡像副本。磁盤2上的extent在磁盤0和磁盤2上都有鏡像副本。
如果一個normal冗余的磁盤組有很多磁盤,那么每個磁盤多會有8個partner。也就是說在任一磁盤上的一個extent會在它的8個partner的磁盤上有一個副本。讓我們牢記這一點,(normal冗余情況下)一個extent永遠只會在某個partner磁盤上有一份鏡像副本。
通過查詢x$kfdpartner視圖可以找出關于磁盤partner關系的更多細節。讓我們來看一個多磁盤的磁盤組的例子:
SQL> SELECT count(disk_number) FROM v$asm_disk WHERE group_number = 1;
COUNT(DISK_NUMBER)
------------------ 168
查詢結果顯示磁盤組內包含的磁盤數量著實不少,接下來看單個磁盤擁有多少個partner:
SQL> SELECT disk "Disk", count(number_kfdpartner) "Number of partners" FROM x$kfdpartner
WHERE grp=1 GROUP BY disk
ORDER BY 1;
Disk Number of partners
---------- ------------------ 0 8 1 8 2 8 ... 165 8 166 8 167 8 168 rows selected.
查詢結果顯示單個磁盤都準確的擁有8個partner磁盤。(可以看出這里的環境是一個11GR2或以上版本的數據庫)
接下來查詢每個磁盤組里每個磁盤的partner關系信息:
SQL> set pages 1000 SQL> break on Group# on Disk# SQL> SELECT d.group_number "Group#", d.disk_number "Disk#", p.number_kfdpartner "Partner disk#" FROM x$kfdpartner p, v$asm_disk d
WHERE p.disk=d.disk_number and p.grp=d.group_number
ORDER BY 1, 2, 3;
Group# Disk# Partner disk# ---------- ---------- ------------- 1 0 12 13 18 20 24 27 31 34 1 13 17 21 22 24 29 34 35 ... 29 4 5 7 8 10 12 16 19 816 rows selected..
partner關系是在創建磁盤組時由ASM自動分配的,在每次添加和刪除磁盤操作時會自動更新。
磁盤之間的partner關系信息是記錄在磁盤的partner關系狀態表即PST表(參考前面的章節)和磁盤目錄中,這兩項都是重要的ASM元數據結構。
SQL> CREATE DISKGROUP wxh normal REDUNDANCY
failgroup ocr1 disk '/dev/qdata/vdc' , '/dev/qdata/vdd' failgroup ocr2 disk '/dev/qdata/vde' , '/dev/qdata/vdg' attribute 'au_size'='1M', 'compatible.asm' = '11.2.0.4', 'compatible.rdbms' = '11.2.0.4';
Diskgroup created.
kfed read /dev/qdata/vdc aun=1 blkn=0| more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 17 ; 0x002: KFBTYP_PST_META kfbh.datfmt: 2 ; 0x003: 0x02 kfbh.block.blk: 256 ; 0x004: blk=256 kfbh.block.obj: 2147483648 ; 0x008: disk=0 kfbh.check: 2503555118 ; 0x00c: 0x9539382e kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdpHdrPairBv1.first.super.time.hi:33036846 ; 0x000: HOUR=0xe DAYS=0x11 MNTH=0x6 YEAR=0x7e0 kfdpHdrPairBv1.first.super.time.lo:485925888 ; 0x004: USEC=0x0 MSEC=0x1a9 SECS=0xf MINS=0x7 kfdpHdrPairBv1.first.super.last: 2 ; 0x008: 0x00000002 kfdpHdrPairBv1.first.super.next: 2 ; 0x00c: 0x00000002 kfdpHdrPairBv1.first.super.copyCnt: 2 ; 0x010: 0x02 kfdpHdrPairBv1.first.super.version: 1 ; 0x011: 0x01 kfdpHdrPairBv1.first.super.ub2spare: 0 ; 0x012: 0x0000 kfdpHdrPairBv1.first.super.incarn: 1 ; 0x014: 0x00000001 kfdpHdrPairBv1.first.super.copy[0]: 0 ; 0x018: 0x0000 kfdpHdrPairBv1.first.super.copy[1]: 2 ; 0x01a: 0x0002 kfdpHdrPairBv1.first.super.copy[2]: 0 ; 0x01c: 0x0000 kfdpHdrPairBv1.first.super.copy[3]: 0 ; 0x01e: 0x0000 kfdpHdrPairBv1.first.super.copy[4]: 0 ; 0x020: 0x0000 kfdpHdrPairBv1.first.super.dtaSz: 4 ; 0x022: 0x0004
以上輸出說明在磁盤0和2上有pst的拷貝(kfdpHdrPairBv1.first.super.copy[0]和kfdpHdrPairBv1.first.super.copy[1]處有值)
kfed read /dev/qdata/vdc aun=1 blkn=3| more kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 18 ; 0x002: KFBTYP_PST_DTA kfbh.datfmt: 2 ; 0x003: 0x02 kfbh.block.blk: 259 ; 0x004: blk=259 kfbh.block.obj: 2147483648 ; 0x008: disk=0 kfbh.check: 2182251266 ; 0x00c: 0x82128302 kfbh.fcn.base: 0 ; 0x010: 0x00000000 kfbh.fcn.wrap: 0 ; 0x014: 0x00000000 kfbh.spare1: 0 ; 0x018: 0x00000000 kfbh.spare2: 0 ; 0x01c: 0x00000000 kfdpDtaEv1[0].status: 127 ; 0x000: I=1 V=1 V=1 P=1 P=1 A=1 D=1 kfdpDtaEv1[0].fgNum: 1 ; 0x002: 0x0001 kfdpDtaEv1[0].addTs: 2174935503 ; 0x004: 0x81a2e1cf kfdpDtaEv1[0].partner[0]: 49155 ; 0x008: P=1 P=1 PART=0x3 kfdpDtaEv1[0].partner[1]: 49154 ; 0x00a: P=1 P=1 PART=0x2 kfdpDtaEv1[0].partner[2]: 10000 ; 0x00c: P=0 P=0 PART=0x2710 kfdpDtaEv1[0].partner[3]: 0 ; 0x00e: P=0 P=0 PART=0x0
以上輸出代表磁盤0(kfdpDtaEv1[0])所在failgroup號為1,它有2個partner磁盤,分為為PART=0x3,PART=0x2
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。