Oracle Asm Failgroup測試學習
一、測試目標
疑問? 我們都知道Oracle RAC使用ASM管理儲存;
對於ASM磁碟組而言冗餘模式有三種,EXTERN、NORMALN、HIGH,那麼這三種冗餘方式有什麼作用呢?
假設磁碟損壞,能丟失多少塊磁碟呢???
我們在來推斷一下這個東西有什麼使用場景!ASM磁碟組是否值得多配置儲存,配置冗餘模式。
本篇文件,帶著這些疑問,進行測試,並進行彙總整理思路,實現自問自答。 本次測試不考慮ocr磁碟組,只測試DATA磁碟組進行思考。
二、Oracle ASM磁碟組的冗餘策略
EXTERN 磁碟組無冗餘,丟失1塊磁碟,磁碟組dismount,磁碟組無法對外提供正常的讀寫;
NORMAL磁碟組資料寫2份,一份主資料,一份備份copy資料,丟失1塊磁碟磁碟組正常,最多丟失同一個failgroup組的所有磁碟;
HIGH 磁碟組資料寫3份,一份主資料,另外2份備份copy資料,丟失2塊磁碟磁碟組正常,最多丟失兩組failgroup組的所有磁碟;
Oracle ASM磁碟為什麼需要配置冗餘? 底層作業系統RAID 10,5不香嗎? 是否多此一舉。
正是有著作業系統RAID,因此目前運維駐場的客戶這邊,絕大部分DATA磁碟組均為extern非冗餘! 但是這種場景無法進行機房級別的容災,整個機房掉電、其它異常導致無法訪問! 即使作業系統儲存RAID無效果。
如果使用NORMAL,2份儲存,一份儲存A機房,另外一份儲存B機房,分別屬於2個FAILGROUP組,A機房異常,不影響RAC DB的服務!
三、實驗測試
第一階段:測試實驗DATA1 EXTERN情況下,觀察failgroup情況;
第二階段:測試實驗DATA2 NORMALN情況下,3塊磁碟,觀察failgroup情況;
第三階段:測試實驗DATA2 NORMALN情況下,6塊磁碟,觀察failgroup情況;
第四階段:測試實驗DATA2 HIGH情況下,6塊磁碟,觀察failgroup情況;
第一階段:測試實驗DATA1 EXTERN情況下,觀察failgroup情況;
SQL> select name,type from v$asm_diskgroup; NAME TYPE ------------------------------------------------------------------------------------------ ------------------ DATA1 EXTERN SQL> select group_number,disk_number,state,failgroup,path from v$asm_disk where group_number=2 order by 2; GROUP_NUMBER DISK_NUMBER STATE FAILGROUP PATH ------------ ----------- ----------- ------------------------ -------------------- ---------------------------- 2 0 NORMAL DATA1_0000 /dev/oracleasm/disks/ASMDISK10 2 1 NORMAL DATA1_0001 /dev/oracleasm/disks/ASMDISK11 2 2 NORMAL DATA1_0002 /dev/oracleasm/disks/ASMDISK12 2 3 NORMAL DATA1_0003 /dev/oracleasm/disks/ASMDISK7 2 4 NORMAL DATA1_0004 /dev/oracleasm/disks/ASMDISK8 2 5 NORMAL DATA1_0005 /dev/oracleasm/disks/ASMDISK9 2 6 NORMAL DATA1_0006 /dev/oracleasm/disks/ASMDISK13 7 rows selected. extenal冗餘:
--------ASM是以AU為分配單位,1個AU為1M,這裡建立一個大小為14M的表空間,理論上講應該分配了14個區.
SQL> create tablespace gao1 datafile '+DATA1' size 14m;
SQL> create table gaogaogago(id number(20)) tablespace GAO1;
SQL> select file_number,name from v$asm_alias where name like 'GAO%';
FILE_NUMBER NAME
----------- --------------------------
283 GAO1.283.1057142127
v$asm_alias檢視欄位解釋: Column Name Description NUMBER_KFFXP ASM file number.
Join with v$asm_file and v$asm_alias COMPOUND_KFFXP File identifier.
Join with compound_index in v$asm_file INCARN_KFFXP File incarnation id.
Join with incarnation in v$asm_file XNUM_KFFXP ASM file extent number (mirrored extent pairs have the same extent value) PXN_KFFXP Progressive file extent number GROUP_KFFXP ASM disk group number.
Join with v$asm_disk and v$asm_diskgroup DISK_KFFXP ASM disk number.
Join with v$asm_disk AU_KFFXP Relative position of the allocation unit from the beginning of the disk.
LXN_KFFXP 0->primary extent,1->mirror extent,
2->2nd mirror copy (high redundancy and metadata)
DISK_KFFXP:對應v$asm_disk.DISK_NUMBER
NUMBER_KFFXP:對應v$asm_file.FILE_NUMBER
XNUM_KFFXP:ASM檔案的extent號
select disk_kffxp disk#, XNUM_KFFXP extent#,
case lxn_kffxp
when 0 then 'Primary Copy'
when 1 then 'Mirrored Copy'
when 2 then '2nd Mirrored Copy or metadata' else 'Unknown'
END TYPE
from x$kffxp
where number_kffxp=283 order by 2;
ASM是以AU為分配單位,1個AU為1M,這裡建立一個大小為14M的表空間,分配了14個區.由下面結果可已看到一共14個區,都為primary copy,並沒有mirror copy,也就是說external是隻存一份資料的。
DISK# EXTENT# TYPE
---------- ---------- ------------------
0 0 Primary Copy
2 0 Primary Copy
0 1 Primary Copy
6 1 Primary Copy
0 2 Primary Copy
5 2 Primary Copy
4 3 Primary Copy
0 4 Primary Copy
1 5 Primary Copy
3 6 Primary Copy
2 7 Primary Copy
6 8 Primary Copy
5 9 Primary Copy
4 10 Primary Copy
0 11 Primary Copy
1 12 Primary Copy
3 13 Primary Copy
2 14 Primary Copy
18 rows selected.
第二階段:測試實驗DATA2 NORMALN情況下,3塊磁碟,觀察failgroup情況;
刪除表空間gao1,然後建立表空間gao1,指定ASM磁碟組為+DATA2(NORMAL冗餘磁碟組) SQL> drop tablespace gao1 including contents and datafiles; select group_number,name,TOTAL_MB,free_mb,type from v$asm_diskgroup; GROUP_NUMBER NAME TOTAL_MB FREE_MB TYPE ------------ ------------------------------ ---------- ---------- ------ 2 DATA1 17129 53 EXTERN 3 DATA2 7341 7005 NORMAL SQL> select group_number,name,disk_number,failgroup_type,path,failgroup from v$asm_disk where group_number=3 GROUP_NUMBER NAME DISK_NUMBER FAILGROUP_TYPE PATH FAILGROUP ------------ -------------------- ----------- --------------------- ---------------------------------------- -------------------- 3 DATA2_0002 2 REGULAR /dev/oracleasm/disks/ASMDISK6 DATA2_0002 3 DATA2_0001 1 REGULAR /dev/oracleasm/disks/ASMDISK5 DATA2_0001 3 DATA2_0000 0 REGULAR /dev/oracleasm/disks/ASMDISK4 DATA2_0000 create tablespace GAO1 datafile '+DATA2' size 14m; select file_number,name from v$asm_alias where name like 'GAO%'; FILE_NUMBER NAME ----------- ------------------------------------------------------------- 257 GAO1.257.1057145865 grid$sqlplus / as sysdba select GROUP_KFFXP,disk_kffxp disk#, XNUM_KFFXP extent#, case lxn_kffxp when 0 then 'Primary Copy' when 1 then 'Mirrored Copy' when 2 then '2nd Mirrored Copy or metadata' else 'Unknown' END TYPE from x$kffxp where number_kffxp=257 and GROUP_KFFXP=3 order by 1,2,3; 由下圖可見,所有的資料都是有兩份的:Primary Copy 和Mirrored Copy,然後每個區的資料都是被分散在三個failgroup中的,所以無論哪個failgroup裡面的磁碟壞了,都不會丟資料,但是隻允許同時損壞同一個failgroup裡面的磁碟 GROUP_KFFXP DISK# EXTENT# TYPE ----------- ---------- ---------- ------------------------------ Failgroup1 3 0 1 Primary Copy 3 0 2 Mirrored Copy 3 0 3 Mirrored Copy 3 0 4 Primary Copy 3 0 7 Primary Copy 3 0 8 Mirrored Copy 3 0 9 Mirrored Copy 3 0 10 Primary Copy 3 0 13 Primary Copy 3 0 14 Mirrored Copy Failgroup2 3 1 0 Primary Copy 3 1 3 Primary Copy 3 1 4 Mirrored Copy 3 1 5 Mirrored Copy 3 1 6 Primary Copy 3 1 9 Primary Copy 3 1 10 Mirrored Copy 3 1 11 Mirrored Copy 3 1 12 Primary Copy Failgroup3 3 2 0 Mirrored Copy 3 2 1 Mirrored Copy 3 2 2 Primary Copy 3 2 5 Primary Copy 3 2 6 Mirrored Copy 3 2 7 Mirrored Copy 3 2 8 Primary Copy 3 2 11 Primary Copy 3 2 12 Mirrored Copy 3 2 13 Mirrored Copy 3 2 14 Primary Copy 30 rows selected.
大家細心對比,可以發現,丟失任何FAILGROUP的2塊磁碟都沒了,但是DB無異常,在其它兩個FAILGROUP都存在記錄。
第三階段:測試實驗DATA2 NORMALN情況下,6塊磁碟,觀察failgroup情況;
將DATA1磁碟刪除3塊,新增至DATA2磁碟組! select group_number,disk_number,name,failgroup,total_mb,free_mb,path,mount_status,header_status,mode_status,state from v$asm_disk order by 1,2,3 GROUP_NUMBER DISK_NUMBER NAME FAILGROUP TOTAL_MB FREE_MB PATH MOUNT_STAT HEADER_STA MODE_STATU STATE ------------ ----------- ------------ -------- ---------- ---------- ---------- ----------------------------------- ---------- ---------- ---------- ------------------------ 1 0 ARCH_0000 ARCH_0000 4016 1635 /dev/oracleasm/disks/ASMDISK14 CACHED MEMBER ONLINE NORMAL 2 0 DATA1_0000 DATA1_0000 2447 45 /dev/oracleasm/disks/ASMDISK10 CACHED MEMBER ONLINE NORMAL 2 1 DATA1_0001 DATA1_0001 2447 50 /dev/oracleasm/disks/ASMDISK11 CACHED MEMBER ONLINE NORMAL 2 2 DATA1_0002 DATA1_0002 2447 50 /dev/oracleasm/disks/ASMDISK12 CACHED MEMBER ONLINE NORMAL 2 3 DATA1_0003 DATA1_0003 2447 45 /dev/oracleasm/disks/ASMDISK7 CACHED MEMBER ONLINE NORMAL 2 4 DATA1_0004 DATA1_0004 2447 55 /dev/oracleasm/disks/ASMDISK8 CACHED MEMBER ONLINE NORMAL 2 5 DATA1_0005 DATA1_0005 2447 50 /dev/oracleasm/disks/ASMDISK9 CACHED MEMBER ONLINE NORMAL 2 6 DATA1_0006 DATA1_0006 2447 51 /dev/oracleasm/disks/ASMDISK13 CACHED MEMBER ONLINE NORMAL 3 0 DATA2_0000 DATA2_0000 2447 2335 /dev/oracleasm/disks/ASMDISK4 CACHED MEMBER ONLINE NORMAL 3 1 DATA2_0001 DATA2_0001 2447 2336 /dev/oracleasm/disks/ASMDISK5 CACHED MEMBER ONLINE NORMAL 3 2 DATA2_0002 DATA2_0002 2447 2334 /dev/oracleasm/disks/ASMDISK6 CACHED MEMBER ONLINE NORMAL 5 0 OCR_0000 OCR_0000 2447 2138 /dev/oracleasm/disks/ASMDISK1 CACHED MEMBER ONLINE NORMAL 5 1 OCR_0001 OCR_0001 2447 2139 /dev/oracleasm/disks/ASMDISK2 CACHED MEMBER ONLINE NORMAL 5 2 OCR_0002 OCR_0002 2447 2138 /dev/oracleasm/disks/ASMDISK3 CACHED MEMBER ONLINE NORMAL 14 rows selected.
刪除磁碟失敗,提示剩餘的空間不滿足rebalance,後續手工刪除table資料,有用的表move,索引rebuild;後resize 資料檔案,回收空間。
alter diskgroup DATA1 drop disk 'DATA1_0006','DATA1_0005','DATA1_0004' REBALANCE POWER 0;
ORA-15032: not all alterations performed
ORA-15250: insufficient diskgroup space for rebalance completion
SQL> select sum(bytes)/1024/1024/1024,owner from dba_segments group by owner order by 1;
.280517578 SH
1.43621826 SYS
2.13165283 SCOTT
3.82910156 TEST
drop user test cascade;
SQL> select tablespace_name,file_name,bytes/1024/1024/1024,file_id from dba_data_files order by 1,2,3;
TABLESPACE_NAME FILE_NAME BYTES/1024/1024/1024
------------------------------ -------------------------------------------------- -------------------- ----------
USERS +DATA1/dr2_prod4/datafile/users.258.1057140291 10.7202148 4
SQL> select name,total_mb,free_mb from v$asm_diskgroup where name='DATA1';
NAME TOTAL_MB FREE_MB
------------------------------ ---------- ----------
DATA1 17129 346
alter database datafile '+DATA1/dr2_prod4/datafile/users.258.1057140291' resize 1g;
ORA-03297: file contains used data beyond requested RESIZE value
找到block_id 大的,處於file後半段進行處理
select owner,segment_name,tablespace_name,bytes/1024/1024,EXTENT_ID,FILE_ID,block_id from dba_extents where tablespace_name='USERS' AND FILE_ID=4 order by EXTENT_ID;
OE SYS_C0011258 USERS .0625 0 4 512
SCOTT DEPT_BAK USERS .0625 0 4 508144
SCOTT DEPT1 USERS .0625 0 4 508152
OE SYS_C0011258 USERS .0625 0 4 512
SCOTT DEPT_BAK USERS .0625 0 4 508144
SCOTT DEPT1 USERS .0625 0 4 508152
GAO TEST USERS .0625 0 4 315984
alter table SCOTT.DEPT_BAK move;
alter table SCOTT.DEPT1 move;
alter table GAO.TEST move;
alter index SCOTT.PK_DEPT1 rebuild;
drop table test01.a purge;
alter database datafile 4 resize 1g;
NAME TOTAL_MB FREE_MB
------------------------------ ---------- ----------
DATA1 17129 10299
alter diskgroup DATA1 drop disk 'DATA1_0006','DATA1_0005','DATA1_0004' REBALANCE POWER 0;
col mount_status for a10
col header_status for a10
col mode_status for a10
col state for a10
select group_number,disk_number,name,failgroup,total_mb,free_mb,path,mount_status,header_status,mode_status,state from v$asm_disk order by 1,2,3;
GROUP_NUMBER DISK_NUMBER NAME FAILGROUP TOTAL_MB FREE_MB PATH MOUNT_STAT HEADER_STA MODE_STATU STATE
------------ ----------- ---------- ---------- ---------- ---------- ------------------------------ ---------- ---------- ---------- ----------
1 0 ARCH_0000 ARCH_0000 4016 1635 /dev/oracleasm/disks/ASMDISK14 CACHED MEMBER ONLINE NORMAL
2 0 DATA1_0000 DATA1_0000 2447 1467 /dev/oracleasm/disks/ASMDISK10 CACHED MEMBER ONLINE NORMAL
2 1 DATA1_0001 DATA1_0001 2447 1472 /dev/oracleasm/disks/ASMDISK11 CACHED MEMBER ONLINE NORMAL
2 2 DATA1_0002 DATA1_0002 2447 1472 /dev/oracleasm/disks/ASMDISK12 CACHED MEMBER ONLINE NORMAL
2 3 DATA1_0003 DATA1_0003 2447 1467 /dev/oracleasm/disks/ASMDISK7 CACHED MEMBER ONLINE NORMAL
2 4 DATA1_0004 DATA1_0004 2447 1476 /dev/oracleasm/disks/ASMDISK8 CACHED MEMBER ONLINE DROPPING
2 5 DATA1_0005 DATA1_0005 2447 1472 /dev/oracleasm/disks/ASMDISK9 CACHED MEMBER ONLINE DROPPING
2 6 DATA1_0006 DATA1_0006 2447 1473 /dev/oracleasm/disks/ASMDISK13 CACHED MEMBER ONLINE DROPPING
3 0 DATA2_0000 DATA2_0000 2447 2335 /dev/oracleasm/disks/ASMDISK4 CACHED MEMBER ONLINE NORMAL
3 1 DATA2_0001 DATA2_0001 2447 2336 /dev/oracleasm/disks/ASMDISK5 CACHED MEMBER ONLINE NORMAL
3 2 DATA2_0002 DATA2_0002 2447 2334 /dev/oracleasm/disks/ASMDISK6 CACHED MEMBER ONLINE NORMAL
5 0 OCR_0000 OCR_0000 2447 2138 /dev/oracleasm/disks/ASMDISK1 CACHED MEMBER ONLINE NORMAL
5 1 OCR_0001 OCR_0001 2447 2139 /dev/oracleasm/disks/ASMDISK2 CACHED MEMBER ONLINE NORMAL
5 2 OCR_0002 OCR_0002 2447 2138 /dev/oracleasm/disks/ASMDISK3 CACHED MEMBER ONLINE NORMAL
14 rows selected.
被刪除drop的磁碟STATE =DROPPING
alter diskgroup data1 rebalance power 6;
select * from v$asm_operation;
GROUP_NUMBER OPERATION STATE POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES ERROR_CODE
------------ --------------- ---------- ---------- ---------- ---------- ---------- ---------- ----------- --------------------
2 REBAL RUN 6 6 2465 3384 5602 0
GROUP_NUMBER DISK_NUMBER NAME FAILGROUP TOTAL_MB FREE_MB PATH MOUNT_STAT HEADER_STA MODE_STATU STATE
------------ ----------- ---------- ---------- ---------- ---------- ------------------------------ ---------- ---------- ---------- ----------
0 0 0 0 /dev/oracleasm/disks/ASMDISK13 CLOSED FORMER ONLINE NORMAL
0 1 0 0 /dev/oracleasm/disks/ASMDISK9 CLOSED FORMER ONLINE NORMAL
0 2 0 0 /dev/oracleasm/disks/ASMDISK8 CLOSED FORMER ONLINE NORMAL
1 0 ARCH_0000 ARCH_0000 4016 1635 /dev/oracleasm/disks/ASMDISK14 CACHED MEMBER ONLINE NORMAL
2 0 DATA1_0000 DATA1_0000 2447 741 /dev/oracleasm/disks/ASMDISK10 CACHED MEMBER ONLINE NORMAL
2 1 DATA1_0001 DATA1_0001 2447 740 /dev/oracleasm/disks/ASMDISK11 CACHED MEMBER ONLINE NORMAL
2 2 DATA1_0002 DATA1_0002 2447 743 /dev/oracleasm/disks/ASMDISK12 CACHED MEMBER ONLINE NORMAL
2 3 DATA1_0003 DATA1_0003 2447 740 /dev/oracleasm/disks/ASMDISK7 CACHED MEMBER ONLINE NORMAL
3 0 DATA2_0000 DATA2_0000 2447 2335 /dev/oracleasm/disks/ASMDISK4 CACHED MEMBER ONLINE NORMAL
3 1 DATA2_0001 DATA2_0001 2447 2336 /dev/oracleasm/disks/ASMDISK5 CACHED MEMBER ONLINE NORMAL
3 2 DATA2_0002 DATA2_0002 2447 2334 /dev/oracleasm/disks/ASMDISK6 CACHED MEMBER ONLINE NORMAL
5 0 OCR_0000 OCR_0000 2447 2138 /dev/oracleasm/disks/ASMDISK1 CACHED MEMBER ONLINE NORMAL
5 1 OCR_0001 OCR_0001 2447 2139 /dev/oracleasm/disks/ASMDISK2 CACHED MEMBER ONLINE NORMAL
5 2 OCR_0002 OCR_0002 2447 2138 /dev/oracleasm/disks/ASMDISK3 CACHED MEMBER ONLINE NORMAL
14 rows selected.
新增!
alter diskgroup DATA2 add
FAILGROUP DATA2_0000 DISK '/dev/oracleasm/disks/ASMDISK8'
FAILGROUP DATA2_0001 DISK '/dev/oracleasm/disks/ASMDISK9'
FAILGROUP DATA2_0002 DISK '/dev/oracleasm/disks/ASMDISK13'
rebalance power 0;
SQL> select group_number,disk_number,name,failgroup,total_mb,free_mb,path,mount_status,header_status,mode_status,state from v$asm_disk order by 1,2,3;
GROUP_NUMBER DISK_NUMBER NAME FAILGROUP TOTAL_MB FREE_MB PATH MOUNT_STAT HEADER_STA MODE_STATU STATE
------------ ----------- ---------- ---------- ---------- ---------- ------------------------------ ---------- ---------- ---------- ----------
1 0 ARCH_0000 ARCH_0000 4016 1635 /dev/oracleasm/disks/ASMDISK14 CACHED MEMBER ONLINE NORMAL
2 0 DATA1_0000 DATA1_0000 2447 741 /dev/oracleasm/disks/ASMDISK10 CACHED MEMBER ONLINE NORMAL
2 1 DATA1_0001 DATA1_0001 2447 740 /dev/oracleasm/disks/ASMDISK11 CACHED MEMBER ONLINE NORMAL
2 2 DATA1_0002 DATA1_0002 2447 743 /dev/oracleasm/disks/ASMDISK12 CACHED MEMBER ONLINE NORMAL
2 3 DATA1_0003 DATA1_0003 2447 740 /dev/oracleasm/disks/ASMDISK7 CACHED MEMBER ONLINE NORMAL
3 0 DATA2_0000 DATA2_0000 2447 2388 /dev/oracleasm/disks/ASMDISK4 CACHED MEMBER ONLINE NORMAL
3 1 DATA2_0001 DATA2_0001 2447 2386 /dev/oracleasm/disks/ASMDISK5 CACHED MEMBER ONLINE NORMAL
3 2 DATA2_0002 DATA2_0002 2447 2388 /dev/oracleasm/disks/ASMDISK6 CACHED MEMBER ONLINE NORMAL
3 3 DATA2_0003 DATA2_0000 2447 2393 /dev/oracleasm/disks/ASMDISK8 CACHED MEMBER ONLINE NORMAL
3 4 DATA2_0004 DATA2_0001 2447 2391 /dev/oracleasm/disks/ASMDISK9 CACHED MEMBER ONLINE NORMAL
3 5 DATA2_0005 DATA2_0002 2447 2394 /dev/oracleasm/disks/ASMDISK13 CACHED MEMBER ONLINE NORMAL
5 0 OCR_0000 OCR_0000 2447 2138 /dev/oracleasm/disks/ASMDISK1 CACHED MEMBER ONLINE NORMAL
5 1 OCR_0001 OCR_0001 2447 2139 /dev/oracleasm/disks/ASMDISK2 CACHED MEMBER ONLINE NORMAL
5 2 OCR_0002 OCR_0002 2447 2138 /dev/oracleasm/disks/ASMDISK3 CACHED MEMBER ONLINE NORMAL
14 rows selected.
對比一下normal冗餘模式下三塊盤和六塊盤的異同:
相同點:都是存放兩份資料,打散在不同的failgroup裡面
不同點:三塊盤的normal冗餘模式,指定三個failgroup,只允許損壞一個failgroup,也就是隻允許損壞一個磁碟(因為一個failgroup裡面只含有一個磁碟)
六塊盤的normal冗餘模式,同樣指定三個failgroup,只允許損壞一個failgroup,也就是隻允許損壞(同一個failgroup裡面的)兩塊盤.
SQL> select group_number,disk_number,failgroup from v$asm_disk where group_number=3 order by 1,3;
GROUP_NUMBER DISK_NUMBER FAILGROUP
------------ ----------- ------------------------------
3 3 DATA2_0000
3 0 DATA2_0000
3 1 DATA2_0001
3 4 DATA2_0001
3 2 DATA2_0002
3 5 DATA2_0002
6 rows selected.
GROUP_KFFXP DISK# EXTENT# TYPE
----------- ---------- ---------- ---------------------------
FAILGROUP1
3 0 2 Mirrored Copy
3 0 4 Primary Copy
3 0 9 Mirrored Copy
3 0 10 Primary Copy
3 3 1 Primary Copy
3 3 3 Mirrored Copy
3 3 6 Mirrored Copy
3 3 8 Primary Copy
3 3 14 Primary Copy
FAILGROUP2
3 1 0 Primary Copy
3 1 3 Primary Copy
3 1 4 Mirrored Copy
3 1 5 Mirrored Copy
3 1 9 Primary Copy
3 1 14 Mirrored Copy
3 4 1 Mirrored Copy
3 4 2 Primary Copy
3 4 7 Primary Copy
3 4 10 Mirrored Copy
3 4 11 Mirrored Copy
3 4 12 Mirrored Copy
3 4 13 Primary Copy
FAILGROUP3
3 2 5 Primary Copy
3 2 7 Mirrored Copy
3 2 11 Primary Copy
3 2 13 Mirrored Copy
3 5 0 Mirrored Copy
3 5 6 Primary Copy
3 5 8 Mirrored Copy
3 5 12 Primary Copy
30 rows selected.
第四階段:測試實驗DATA2 HIGH情況下,6塊磁碟,觀察failgroup情況;
drop tablespace GAO1 including contents and datafiles; SQL> alter diskgroup data2 dismount; alter diskgroup data2 mount; drop diskgroup data2; col path for a30 col name for a15 col failgroup for a14 col mount_status for a10 col header_status for a10 col mode_status for a10 col state for a10 set linesize 200 set pagesize 200 select group_number,disk_number,name,failgroup,total_mb,free_mb,path,mount_status,header_status,mode_status,state from v$asm_disk order by 1,2,3; GROUP_NUMBER DISK_NUMBER NAME FAILGROUP TOTAL_MB FREE_MB PATH MOUNT_STAT HEADER_STA MODE_STATU STATE ------------ ----------- --------------- -------------- ---------- ---------- ------------------------------ ---------- ---------- ---------- ---------- 0 0 0 0 /dev/oracleasm/disks/ASMDISK13 CLOSED FORMER ONLINE NORMAL 0 1 0 0 /dev/oracleasm/disks/ASMDISK9 CLOSED FORMER ONLINE NORMAL 0 2 0 0 /dev/oracleasm/disks/ASMDISK8 CLOSED FORMER ONLINE NORMAL 0 3 0 0 /dev/oracleasm/disks/ASMDISK6 CLOSED FORMER ONLINE NORMAL 0 4 0 0 /dev/oracleasm/disks/ASMDISK5 CLOSED FORMER ONLINE NORMAL 0 5 0 0 /dev/oracleasm/disks/ASMDISK4 CLOSED FORMER ONLINE NORMAL 1 0 ARCH_0000 ARCH_0000 4016 1635 /dev/oracleasm/disks/ASMDISK14 CACHED MEMBER ONLINE NORMAL 2 0 DATA1_0000 DATA1_0000 2447 741 /dev/oracleasm/disks/ASMDISK10 CACHED MEMBER ONLINE NORMAL 2 1 DATA1_0001 DATA1_0001 2447 740 /dev/oracleasm/disks/ASMDISK11 CACHED MEMBER ONLINE NORMAL 2 2 DATA1_0002 DATA1_0002 2447 743 /dev/oracleasm/disks/ASMDISK12 CACHED MEMBER ONLINE NORMAL 2 3 DATA1_0003 DATA1_0003 2447 740 /dev/oracleasm/disks/ASMDISK7 CACHED MEMBER ONLINE NORMAL 5 0 OCR_0000 OCR_0000 2447 2138 /dev/oracleasm/disks/ASMDISK1 CACHED MEMBER ONLINE NORMAL 5 1 OCR_0001 OCR_0001 2447 2139 /dev/oracleasm/disks/ASMDISK2 CACHED MEMBER ONLINE NORMAL 5 2 OCR_0002 OCR_0002 2447 2138 /dev/oracleasm/disks/ASMDISK3 CACHED MEMBER ONLINE NORMAL 14 rows selected. --alter diskgroup data1 rebalance power 6; select * from v$asm_operation; create diskgroup DATA2 high redundancy FAILGROUP fgroup1 disk '/dev/oracleasm/disks/ASMDISK13','/dev/oracleasm/disks/ASMDISK9' FAILGROUP fgroup2 disk '/dev/oracleasm/disks/ASMDISK8','/dev/oracleasm/disks/ASMDISK6' FAILGROUP fgroup3 disk '/dev/oracleasm/disks/ASMDISK5','/dev/oracleasm/disks/ASMDISK4' ; GROUP_NUMBER DISK_NUMBER NAME FAILGROUP TOTAL_MB FREE_MB PATH MOUNT_STAT HEADER_STA MODE_STATU STATE ------------ ----------- --------------- -------------- ---------- ---------- ------------------------------ ---------- ---------- ---------- ---------- 1 0 ARCH_0000 ARCH_0000 4016 1635 /dev/oracleasm/disks/ASMDISK14 CACHED MEMBER ONLINE NORMAL 2 0 DATA1_0000 DATA1_0000 2447 741 /dev/oracleasm/disks/ASMDISK10 CACHED MEMBER ONLINE NORMAL 2 1 DATA1_0001 DATA1_0001 2447 740 /dev/oracleasm/disks/ASMDISK11 CACHED MEMBER ONLINE NORMAL 2 2 DATA1_0002 DATA1_0002 2447 743 /dev/oracleasm/disks/ASMDISK12 CACHED MEMBER ONLINE NORMAL 2 3 DATA1_0003 DATA1_0003 2447 740 /dev/oracleasm/disks/ASMDISK7 CACHED MEMBER ONLINE NORMAL 3 0 DATA2_0000 FGROUP1 2447 2420 /dev/oracleasm/disks/ASMDISK13 CACHED MEMBER ONLINE NORMAL 3 1 DATA2_0001 FGROUP1 2447 2421 /dev/oracleasm/disks/ASMDISK9 CACHED MEMBER ONLINE NORMAL 3 2 DATA2_0002 FGROUP2 2447 2420 /dev/oracleasm/disks/ASMDISK8 CACHED MEMBER ONLINE NORMAL 3 3 DATA2_0003 FGROUP2 2447 2421 /dev/oracleasm/disks/ASMDISK6 CACHED MEMBER ONLINE NORMAL 3 4 DATA2_0004 FGROUP3 2447 2420 /dev/oracleasm/disks/ASMDISK5 CACHED MEMBER ONLINE NORMAL 3 5 DATA2_0005 FGROUP3 2447 2421 /dev/oracleasm/disks/ASMDISK4 CACHED MEMBER ONLINE NORMAL 5 0 OCR_0000 OCR_0000 2447 2138 /dev/oracleasm/disks/ASMDISK1 CACHED MEMBER ONLINE NORMAL 5 1 OCR_0001 OCR_0001 2447 2139 /dev/oracleasm/disks/ASMDISK2 CACHED MEMBER ONLINE NORMAL 5 2 OCR_0002 OCR_0002 2447 2138 /dev/oracleasm/disks/ASMDISK3 CACHED MEMBER ONLINE NORMAL 14 rows selected. select group_number,name,type,COMPATIBILITY from v$asm_diskgroup GROUP_NUMBER NAME TYPE COMPATIBILITY ------------ --------------- ------------------ -------------------- 1 ARCH EXTERN 11.2.0.0.0 2 DATA1 EXTERN 11.2.0.0.0 3 DATA2 HIGH 10.1.0.0.0 5 OCR NORMAL 11.2.0.0.0 high冗餘三份資料: failgroup為單位,只允許壞掉兩個failgroup裡面的資料,是不會造成資料丟失的。 從oracle 11g版本開始,asm磁碟組會有兩個新屬性來相容asm版本和資料庫版本 http://blog.itpub.net/31397003/viewspace-2132859/ COMPATIBLE.ASM - The minimum version of the ASM software that can access the disk group. In 11g, the default setting is 10.1. COMPATIBLE.RDBMS - The minimum COMPATIBLE database initialization parameter setting for any database instance that uses the disk group. In 11g, the default setting is 10.1. SELECT group_number, name, value FROM v$asm_attribute where NAME like 'compatible%' ORDER BY group_number, name; GROUP_NUMBER NAME VALUE ------------ ---------------------------------------- ------------------------------ 1 compatible.asm 11.2.0.0.0 1 compatible.rdbms 10.1.0.0.0 2 compatible.asm 11.2.0.0.0 2 compatible.rdbms 10.1.0.0.0 5 compatible.asm 11.2.0.0.0 5 compatible.rdbms 10.1.0.0.0 6 rows selected. SELECT group_number, name, compatibility, database_compatibility FROM v$asm_diskgroup; GROUP_NUMBER NAME COMPATIBILITY DATABASE_COMPATIBILI ------------ ---------- -------------------- -------------------- 1 ARCH 11.2.0.0.0 10.1.0.0.0 2 DATA1 11.2.0.0.0 10.1.0.0.0 3 DATA2 10.1.0.0.0 10.1.0.0.0 5 OCR 11.2.0.0.0 10.1.0.0.0 create tablespace GAO1 datafile '+DATA2' size 14m SQL> select file_number,name from v$asm_alias where name like 'GAO%'; FILE_NUMBER NAME ----------- ---------------------------------------------------------------------- 256 GAO1.256.1057165987 0 DATA2_0000 FGROUP1 1 DATA2_0001 FGROUP1 2 DATA2_0002 FGROUP2 3 DATA2_0003 FGROUP2 4 DATA2_0004 FGROUP3 5 DATA2_0005 FGROUP3 select GROUP_KFFXP,disk_kffxp disk#, XNUM_KFFXP extent#, case lxn_kffxp when 0 then 'Primary Copy' when 1 then 'Mirrored Copy' when 2 then '2nd Mirrored Copy or metadata' else 'Unknown' END TYPE from x$kffxp where number_kffxp=256 and GROUP_KFFXP=3 order by 1,2,3; GROUP_KFFXP DISK# EXTENT# TYPE ----------- ---------- ---------- ----------------------------------- 3 0 0 Mirrored Copy 3 0 5 Primary Copy 3 0 8 Mirrored Copy 3 0 9 2nd Mirrored Copy or metadata 3 0 10 Mirrored Copy 3 0 11 Primary Copy 3 0 12 Mirrored Copy 3 1 1 Primary Copy 3 1 2 Mirrored Copy 3 1 3 Mirrored Copy 3 1 4 2nd Mirrored Copy or metadata 3 1 6 2nd Mirrored Copy or metadata 3 1 7 Primary Copy 3 1 13 Primary Copy 3 1 14 Mirrored Copy 3 2 3 Primary Copy 3 2 4 Mirrored Copy 3 2 5 2nd Mirrored Copy or metadata 3 2 7 2nd Mirrored Copy or metadata 3 2 8 2nd Mirrored Copy or metadata 3 2 9 Primary Copy 3 3 0 Primary Copy 3 3 1 2nd Mirrored Copy or metadata 3 3 2 2nd Mirrored Copy or metadata 3 3 6 Primary Copy 3 3 10 2nd Mirrored Copy or metadata 3 3 11 Mirrored Copy 3 3 12 Primary Copy 3 3 13 2nd Mirrored Copy or metadata 3 3 14 2nd Mirrored Copy or metadata 3 4 1 Mirrored Copy 3 4 4 Primary Copy 3 4 6 Mirrored Copy 3 4 9 Mirrored Copy 3 4 10 Primary Copy 3 4 11 2nd Mirrored Copy or metadata 3 4 13 Mirrored Copy 3 5 0 2nd Mirrored Copy or metadata 3 5 2 Primary Copy 3 5 3 2nd Mirrored Copy or metadata 3 5 5 Mirrored Copy 3 5 7 Mirrored Copy 3 5 8 Primary Copy 3 5 12 2nd Mirrored Copy or metadata 3 5 14 Primary Copy 45 rows selected. 可以發現每個FAILGROUP組存有45/3=15條記錄! 整個資料檔案佔用15個AU即15個extents分配,被3份冗餘! 因此high可以丟失2份所有Failgroup資料。