ASM的FAILGROUP
其實這是錯誤的,FAILGROUP是用於將磁碟分組,以保證丟失任何一組FAILGROUP磁碟,資料還是完整的
多用於多陣列,通過ASM來完成冗餘的環境。(EXTERNAL只能有一個FAILGROUP)
假設有4個陣列,每個陣列3塊盤,使用NORMAL REDUNDANCY建立DISKGROUP,4個FAILGROUP
CREATE DISKGROUP dgroup1 NORMAL REDUNDANCY FAILGROUP controller1 DISK 'ORCL:ASM01', 'ORCL:ASM02', 'ORCL:ASM03' FAILGROUP controller2 DISK 'ORCL:ASM04', 'ORCL:ASM05', 'ORCL:ASM06' FAILGROUP controller3 DISK 'ORCL:ASM07', 'ORCL:ASM08', 'ORCL:ASM09' FAILGROUP controller4 DISK 'ORCL:ASM10', 'ORCL:ASM11', 'ORCL:ASM12'; |
然後在上面建立一個1G的資料檔案
CREATE TABLESPACE asmtest DATAFILE '+DGROUP1' SIZE 1024M |
然後看看資料的冗餘程度
SQL> SELECT COUNT(DISTINCT PXN_KFFXP),COUNT(DISTINCT XNUM_KFFXP) 2 FROM X$KFFXP 3 WHERE GROUP_KFFXP = 3 4 AND NUMBER_KFFXP =256 5 AND xnum_kffxp <> 2147483648;
COUNT(DISTINCTPXN_KFFXP) COUNT(DISTINCTXNUM_KFFXP) ------------------------ ------------------------- 2050 1025 --資料檔案為1024M,加上一個BLOCK0,一共1025M,2個冗餘
SQL> SELECT COUNT(DISTINCT PXN_KFFXP),COUNT(DISTINCT XNUM_KFFXP) 2 FROM X$KFFXP 3 WHERE GROUP_KFFXP = 3 4 AND NUMBER_KFFXP =256 5 AND xnum_kffxp = 2147483648;
COUNT(DISTINCTPXN_KFFXP) COUNT(DISTINCTXNUM_KFFXP) ------------------------ ------------------------- 3 1 --記錄塊分配的後設資料冗餘3份,其他後設資料也是冗餘3份 |
假設出現某個failgroup損壞
SQL> SELECT COUNT (DISTINCT xnum_kffxp) 2 FROM X$KFFXP a,v$asm_disk b 3 WHERE GROUP_KFFXP = 3 4 AND b.group_number=3 5 AND NUMBER_KFFXP =256 6 AND a.disk_kffxp = disk_number 7 AND b.failgroup <> 'CONTROLLER&i' 8 ; Enter value for i: 1 old 7: AND b.failgroup <> 'CONTROLLER&i' new 7: AND b.failgroup <> 'CONTROLLER1'
COUNT(DISTINCTXNUM_KFFXP) ------------------------- 1026
SQL> / Enter value for i: 2 old 7: AND b.failgroup <> 'CONTROLLER&i' new 7: AND b.failgroup <> 'CONTROLLER2'
COUNT(DISTINCTXNUM_KFFXP) ------------------------- 1026
SQL> / Enter value for i: 3 old 7: AND b.failgroup <> 'CONTROLLER&i' new 7: AND b.failgroup <> 'CONTROLLER3'
COUNT(DISTINCTXNUM_KFFXP) ------------------------- 1026
SQL> / Enter value for i: 4 old 7: AND b.failgroup <> 'CONTROLLER&i' new 7: AND b.failgroup <> 'CONTROLLER4'
COUNT(DISTINCTXNUM_KFFXP) ------------------------- 1026 |
其相關的1026個AU都是可訪問的
在看看後設資料,後設資料每個冗餘3份,任何一個FAILGROUP損壞,都能保證資料是完整的
SQL> SELECT NUMBER_KFFXP, XNUM_KFFXP, COUNT(*) 2 FROM X$KFFXP 3 WHERE GROUP_KFFXP = 3 4 AND NUMBER_KFFXP < 100 5 GROUP BY NUMBER_KFFXP, XNUM_KFFXP 6 ORDER BY 1, 2;
NUMBER_KFFXP XNUM_KFFXP COUNT(*) ------------ ---------- ---------- 1 0 3 1 1 3 2 0 3 3 0 3 3 1 3 3 2 3 3 3 3 3 4 3 3 5 3 3 6 3 3 7 3 3 8 3 3 9 3 3 10 3 3 11 3 3 12 3 3 13 3 3 14 3 3 15 3 3 16 3 3 17 3 3 18 3 3 19 3 3 20 3 3 21 3 3 22 3 3 23 3 3 24 3 3 25 3 3 26 3 3 27 3 3 28 3 3 29 3 3 30 3 3 31 3 3 32 3 3 33 3 3 34 3 3 35 3 3 36 3 3 37 3 3 38 3 3 39 3 3 40 3 3 41 3 3 2147483648 3 4 0 3 4 1 3 5 0 3 6 0 3
50 rows selected.
SQL> SELECT COUNT(*) 2 FROM (SELECT DISTINCT NUMBER_KFFXP, XNUM_KFFXP 3 FROM X$KFFXP A, V$ASM_DISK B 4 WHERE GROUP_KFFXP = 3 5 AND B.GROUP_NUMBER = 3 6 AND NUMBER_KFFXP < 100 7 AND A.DISK_KFFXP = DISK_NUMBER 8 AND B.FAILGROUP <> 'CONTROLLER&i') ; Enter value for i: 1 old 8: AND B.FAILGROUP <> 'CONTROLLER&i') new 8: AND B.FAILGROUP <> 'CONTROLLER1')
COUNT(*) ---------- 50
SQL> / Enter value for i: 2 old 8: AND B.FAILGROUP <> 'CONTROLLER&i') new 8: AND B.FAILGROUP <> 'CONTROLLER2')
COUNT(*) ---------- 50
SQL> / Enter value for i: 3 old 8: AND B.FAILGROUP <> 'CONTROLLER&i') new 8: AND B.FAILGROUP <> 'CONTROLLER3')
COUNT(*) ---------- 50
SQL> / Enter value for i: 4 old 8: AND B.FAILGROUP <> 'CONTROLLER&i') new 8: AND B.FAILGROUP <> 'CONTROLLER4')
COUNT(*) ---------- 50 |
注意,預設建立的DISKGROUP,每個磁碟就是一個單獨的FAILGROUP
如上面的例子,4個陣列,在沒有指定failgroup的情況下,只要一組陣列出現了當機,資料就可能無法訪問,如果指定了failgroup,一組陣列損壞後,資料仍然能保證完整
在來看看冗餘報告:
SQL> SELECT NAME, 2 TYPE, 3 TOTAL_MB, 4 FREE_MB, 5 REQUIRED_MIRROR_FREE_MB, 6 USABLE_FILE_MB 7 FROM V$ASM_DISKGROUP 8 WHERE GROUP_NUMBER = 3;
NAME TYPE TOTAL_MB FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB ---------- ------------ ---------- ---------- ----------------------- -------------- DGROUP1 NORMAL 12228 12054 3057 4498 |
如果failgroup失敗,那麼需要3057M的空間來恢復,大概3塊盤
如果是不指定failgroup建立DISKGROUP了?
CREATE DISKGROUP dgroup1 NORMAL REDUNDANCY DISK 'ORCL:ASM01', 'ORCL:ASM02', 'ORCL:ASM03', 'ORCL:ASM04', 'ORCL:ASM05', 'ORCL:ASM06', 'ORCL:ASM07', 'ORCL:ASM08', 'ORCL:ASM09', 'ORCL:ASM10', 'ORCL:ASM11', 'ORCL:ASM12'; |
SQL> /
NAME TYPE TOTAL_MB FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB ---------- ------------ ---------- ---------- ----------------------- -------------- DGROUP1 NORMAL 12228 12057 1111 5473 |
如果不指定,只允許一個盤損壞,需要1111M來恢復,大概1塊盤
USABLE_FILE_MB 不代表能使用的磁碟限制,但當該列小於0時,不能正常DROP DISK,無法完成rebalance
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8242091/viewspace-671590/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle ASM 的redundancy與failgroupOracleASMAI
- 如何理解ASM裡FAILGROUP的概念ASMAI
- 關於ASM的failgroup概念的探索方法ASMAI
- ASM可以更改冗餘度&增加failgroup嗎?ASMAI
- solaris 10_oracle asm_diskgroup_failgroup_相關OracleASMAI
- Quorum FailGroupAI
- FAILGROUP和REDUNDANCY之間的關係關係!AI
- 不能為 EXTERNAL REDUNDANCY的磁碟組新增failgroup diskAI
- asm files,asm directories,asm templatesASM
- asm 的管理ASM
- 【ASM】ASMCMD chtmpl 更改ASM 模版的屬性ASM
- 理解ASM的ExtentASM
- ASM lsdsk的使用ASM
- ASM的體會ASM
- 修改+asm的名字!ASM
- 【ASM】如何建立ASM磁碟ASM
- ASM之建立ASM磁碟ASM
- 【ASM學習】ASM 管理ASM
- 【ASM學習】ASM文件ASM
- ASM之建立ASM例項時的常見故障ASM
- 【ASM學習】從ASM拷貝檔案的方法ASM
- 【ASM學習】關於 ASM 的隱含引數ASM
- ASM之建立ASM例項及ASM資料庫ASM資料庫
- 【ASM】ASM基礎知識ASM
- ASM之建立ASM例項ASM
- ASM之ASM相關概念ASM
- ASMASM
- ASM條帶揭密----_asm_stripesize、_asm_stripewidth引數的設定和影響ASM
- Linux的multipath for ASMLinuxASM
- ASM的安裝配置ASM
- oracle中的asm文化OracleASM
- Asm diskgroup 的修復ASM
- ASM的配置與管理ASM
- 【ORACLE ASM】ASM 支援工具簡介OracleASM
- asm-windows下安裝asmASMWindows
- rman copy asm datafile(rename asm datafile)ASM
- ASM 翻譯系列第八彈:ASM Internal ASM file extent mapASM
- ASM 翻譯系列第十彈:ASM Internal ASM DISK headerASMHeader