**現象:**在Oracle 12.2.0.1 RAC環境,在其ASM實例中,如果添加不同大小或者不同數量的LUN到failgroup中,會報錯:
ORA-15032: not all alterations performed
ORA-15410: Disks in disk group OCRVT do not have equal size.
或者
ORA-15032: not all alterations performed
ORA-15411: Failure groups in disk group OCRVT have different number of disks.
解決方案: 動態修改這兩個隱藏參數可以解決:
alter system set "_asm_disable_failgroup_size_checking"=true;
alter system set "_asm_disable_dangerous_failgroup_checking"=true;
下面舉一個實際的例子: 比如新加的LUN:mpathi,mpathj,mpathk都是200M大小,以前的ASM磁盤組OCRVT由3個LUN:mpatha,mpathb,mpathc都是1G大小組成;現在想把新的LUN加到OCRVT磁盤組中:
SQL> select name, failgroup, path, mode_status, voting_file from v$asm_disk;
NAME FAILGROUP PATH MODE_ST V
----------------------------------- ------------------------------ --------------------------------------------- ------- -
/dev/mapper/mpathj ONLINE N
/dev/mapper/mpathi ONLINE N
/public/nfsdisk ONLINE N
/dev/mapper/mpathk ONLINE N
DATA_0001 DATA_0001 /dev/mapper/mpathf ONLINE N
FRA_0000 FRA_0000 /dev/mapper/mpathh ONLINE N
DATA_0002 DATA_0002 /dev/mapper/mpathg ONLINE N
DATA_0000 DATA_0000 /dev/mapper/mpathe ONLINE N
MGMT_0000 MGMT_0000 /dev/mapper/mpathd ONLINE N
OCRVT_0000 OCRVT_0000 /dev/mapper/mpathc ONLINE Y
OCRVT_0002 OCRVT_0002 /dev/mapper/mpathb ONLINE Y
OCRVT_0001 OCRVT_0001 /dev/mapper/mpatha ONLINE Y
12 rows selected.
直接嘗試添加新的LUN到ASM磁盤組OCRVT中,會報錯。依次嘗試設置相關的隱藏參數,可以成功添加:
SQL> alter diskgroup ocrvt add FAILGROUP OCRVT_0000 disk '/dev/mapper/mpathi';
alter diskgroup ocrvt add FAILGROUP OCRVT_0000 disk '/dev/mapper/mpathi'
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15410: Disks in disk group OCRVT do not have equal size.
SQL> alter system set "_asm_disable_dangerous_failgroup_checking"=true;
System altered.
SQL> alter diskgroup ocrvt add FAILGROUP OCRVT_0000 disk '/dev/mapper/mpathi';
alter diskgroup ocrvt add FAILGROUP OCRVT_0000 disk '/dev/mapper/mpathi'
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15411: Failure groups in disk group OCRVT have different number of disks.
SQL> alter system set "_asm_disable_failgroup_size_checking"=true;
System altered.
SQL> alter diskgroup ocrvt add FAILGROUP OCRVT_0000 disk '/dev/mapper/mpathi';
Diskgroup altered.
總結: asm中與failgroup相關的隱藏參數: _asm_disable_dangerous_failgroup_checking FALSE _asm_disable_failgroup_count_checking FALSE _asm_disable_failgroup_size_checking FALSE
SQL> r
1 SELECT i.ksppinm name,
2 i.ksppdesc description,
3 CV.ksppstvl VALUE
4 FROM sys.x$ksppi i, sys.x$ksppcv CV
5 WHERE i.inst_id = USERENV ('Instance')
6 AND CV.inst_id = USERENV ('Instance')
7 AND i.indx = CV.indx
8 AND i.ksppinm LIKE '%¶m%'
9* ORDER BY REPLACE (i.ksppinm, '_', '')
Enter value for param: failgroup
old 8: AND i.ksppinm LIKE '%¶m%'
new 8: AND i.ksppinm LIKE '%failgroup%'
NAME DESCRIPTION VALUE
----------------------------------- ------------------------------------------------------------------ ------------------------------
_asm_disable_dangerous_failgroup_ch Disable checking for dubious failgroup configurations FALSE
ecking
_asm_disable_failgroup_count_checki Disable checking for failure group count FALSE
ng
_asm_disable_failgroup_size_checkin Disable checking for failure group size FALSE
g
--這類參數實測可以動態修改:
alter system set "_asm_disable_failgroup_size_checking"=true;
alter system set "_asm_disable_dangerous_failgroup_checking"=true;
--alter system set "_asm_disable_failgroup_count_checking"=true; 這個參數我沒有測出來實際作用,實測只需要上面兩個參數設置為true就同樣可以允許failgroup的數量不一致。
SQL> show parameter _asm
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_asm_disable_dangerous_failgroup_che boolean TRUE
cking
_asm_disable_failgroup_size_checking boolean TRUE
--test
SQL> select name, failgroup, path, mode_status, voting_file from v$asm_disk;
NAME FAILGROUP PATH MODE_ST V
----------------------------------- ------------------------------ --------------------------------------------- ------- -
/public/nfsdisk ONLINE N
OCRVT_0005 OCRVT_0002 /dev/mapper/mpathk ONLINE N
OCRVT_0004 OCRVT_0001 /dev/mapper/mpathj ONLINE N
DATA_0001 DATA_0001 /dev/mapper/mpathf ONLINE N
OCRVT_0003 OCRVT_0000 /dev/mapper/mpathi ONLINE N
FRA_0000 FRA_0000 /dev/mapper/mpathh ONLINE N
DATA_0002 DATA_0002 /dev/mapper/mpathg ONLINE N
DATA_0000 DATA_0000 /dev/mapper/mpathe ONLINE N
MGMT_0000 MGMT_0000 /dev/mapper/mpathd ONLINE N
OCRVT_0000 OCRVT_0000 /dev/mapper/mpathc ONLINE Y
OCRVT_0002 OCRVT_0002 /dev/mapper/mpathb ONLINE Y
OCRVT_0001 OCRVT_0001 /dev/mapper/mpatha ONLINE Y
12 rows selected.
--以下操作均可以成功:
alter diskgroup ocrvt drop disk OCRVT_0003;
alter diskgroup ocrvt add FAILGROUP OCRVT_0000 disk '/dev/mapper/mpathi';
--如果不改參數,那么只能同時刪除/增加每個failgroup中的成員:
alter diskgroup ocrvt drop disk OCRVT_0003, OCRVT_0004, OCRVT_0005;
alter diskgroup ocrvt add FAILGROUP OCRVT_0000 disk '/dev/mapper/mpathi'
FAILGROUP OCRVT_0001 disk '/dev/mapper/mpathj'
FAILGROUP OCRVT_0002 disk '/dev/mapper/mpathk';
--最后同樣可以動態還原配置:
alter system set "_asm_disable_failgroup_size_checking"=false;
alter system set "_asm_disable_dangerous_failgroup_checking"=false;
**注意:**實驗發現如果使用asmca添加磁盤,無論是否設置這個參數,都會報錯[DBT-30003] The size of the disks selected is not the same as to allow for an equal number of 4MB AU size blocks. 而使用命令行操作,只要設置這2個隱藏參數為true即可成功。