ASMの障害グループについて、机上の知識はあるものの、実務経験が無いため、実際の動きを検証してみました。
■検証環境
OS:Oracle Linux 6.5
GI:Oracle Grid Infrastructure 12c Release 1 (12.1.0.2.0) Enterprise Edition
DB:Oracle Database 12c Release 1 (12.1.0.2.0) Enterprise Edition
※2ノードRAC(管理者管理型DB)
■前提
・ASMの冗長構成は標準冗長構成(2多重)
■設定情報
[root@node1 ~]# /u01/app/12.1.0/grid/bin/crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRS.dg
ONLINE ONLINE node1 STABLE
ONLINE ONLINE node2 STABLE
ora.DATA.dg
ONLINE ONLINE node1 STABLE
ONLINE ONLINE node2 STABLE
ora.FRA.dg
ONLINE ONLINE node1 STABLE
ONLINE ONLINE node2 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE node1 STABLE
ONLINE ONLINE node2 STABLE
ora.asm
ONLINE ONLINE node1 Started,STABLE
ONLINE ONLINE node2 Started,STABLE
ora.net1.network
ONLINE ONLINE node1 STABLE
ONLINE ONLINE node2 STABLE
ora.ons
ONLINE ONLINE node1 STABLE
ONLINE ONLINE node2 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE node1 STABLE
ora.LISTENER_SCAN2.lsnr
1 ONLINE ONLINE node1 STABLE
ora.LISTENER_SCAN3.lsnr
1 ONLINE ONLINE node1 STABLE
ora.MGMTLSNR
1 ONLINE ONLINE node1 169.254.243.236 192.
168.100.101,STABLE
ora.cvu
1 ONLINE ONLINE node2 STABLE
ora.mgmtdb
1 ONLINE ONLINE node1 Open,STABLE
ora.node1.vip
1 ONLINE ONLINE node1 STABLE
ora.node2.vip
1 ONLINE ONLINE node2 STABLE
ora.oc4j
1 ONLINE ONLINE node2 STABLE
ora.orcl.db
1 ONLINE ONLINE node1 Open,STABLE
2 ONLINE ONLINE node2 Open,STABLE
ora.scan1.vip
1 ONLINE ONLINE node1 STABLE
ora.scan2.vip
1 ONLINE ONLINE node1 STABLE
ora.scan3.vip
1 ONLINE ONLINE node1 STABLE
--------------------------------------------------------------------------------
ディスク・グループ構成
SQL> select
2 g.group_number, g.name, g.type REDUNDANCY, d.disk_number, d.MOUNT_STATUS, d.HEADER_STATUS, d.MODE_STATUS, d.STATE, round(d.TOTAL_MB/1024, 2) TOTAL_GB, round(d.FREE_MB/1024, 2) FREE_GB, d.NAME, d.FAILGROUP, d.PATH, d.VOTING_FILE
3 from
4 v$asm_disk d, v$asm_diskgroup g
5 where
6 d.group_number = g.group_number
7 order by
8 g.group_number, d.disk_number;
GROUP_NUMBER NAME REDUNDANCY DISK_NUMBER MOUNT_STATUS HEADER_STATUS MODE_STATUS STATE TOTAL_GB FREE_GB NAME FAILGROUP PATH VOT
------------ ---------- ------------------ ----------- -------------------- -------------------- -------------------- -------------------- ---------- ---------- ---------- -------------------- -------------------- ---
1 CRS NORMAL 0 CACHED MEMBER ONLINE NORMAL 8 5.02 CRS_0000 CRS_0000 /dev/sdb1 Y
1 CRS NORMAL 1 CACHED MEMBER ONLINE NORMAL 8 5.03 CRS_0001 CRS_0001 /dev/sdc1 Y
1 CRS NORMAL 2 CACHED MEMBER ONLINE NORMAL 8 5.02 CRS_0002 CRS_0002 /dev/sdd1 Y
2 DATA NORMAL 0 CACHED MEMBER ONLINE NORMAL 8 6.3 DATA_0000 FG2 /dev/sdg1 N
2 DATA NORMAL 1 CACHED MEMBER ONLINE NORMAL 8 6.3 DATA_0001 FG2 /dev/sdh1 N
2 DATA NORMAL 2 CACHED MEMBER ONLINE NORMAL 8 6.3 DATA_0002 FG1 /dev/sde1 N
2 DATA NORMAL 3 CACHED MEMBER ONLINE NORMAL 8 6.3 DATA_0003 FG1 /dev/sdf1 N
3 FRA NORMAL 0 CACHED MEMBER ONLINE NORMAL 8 7.83 FRA_0000 FRA_0000 /dev/sdi1 N
3 FRA NORMAL 1 CACHED MEMBER ONLINE NORMAL 8 7.83 FRA_0001 FRA_0001 /dev/sdj1 N
※DATA:アプリデータのみ格納
※CRS:OCR、投票ディスク、ASM SPFILE、ASM パスワードファイルなど格納
※FRA:制御ファイル、DB SPFILE、REDOログ、アーカイブログ、DB パスワードファイルなど格納
■検証パターン
①DATAディスク・グループのFG1障害グループ障害 (一部破損)
②DATAディスク・グループのFG1、FG2障害グループ障害 (全損)
■検証
①DATAディスク・グループのFG1障害グループ障害 (一部破損)
一部の障害グループ(FG1)が破損した場合、DBからアプリデータをSELECTできるか検証します
【検証手順】
1. FG1障害グループ破壊前にDBからアプリデータをSELECT
2. ddコマンドでFG1障害グループを構成するASMディスクを論理破壊
3. FG1障害グループ破壊後にDBからアプリデータをSELECT
【想定】
FG1障害グループが破損しても、FG2障害グループが稼働しているため、正常にアプリデータをSELECTできるはず
【検証結果】
FG1障害グループ破損後も正常にアプリデータをSELECTできた
【作業ログ】
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ------------------------------ --------------------------- ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80-12-17 800 20
7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30
7521 WARD SALESMAN 7698 81-02-22 1250 500 30
7566 JONES MANAGER 7839 81-04-02 2975 20
7654 MARTIN SALESMAN 7698 81-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 81-05-01 2850 30
7782 CLARK MANAGER 7839 81-06-09 2450 10
7839 KING PRESIDENT 81-11-17 5000 10
7844 TURNER SALESMAN 7698 81-09-08 1500 0 30
7900 JAMES CLERK 7698 81-12-03 950 30
7902 FORD ANALYST 7566 81-12-03 3000 20
7934 MILLER CLERK 7782 82-01-23 1300 10
12行が選択されました。
2. ddコマンドでFG1障害グループを構成するASMディスクを論理破壊
[root@node1 ~]# dd if=/dev/zero of=/dev/sde bs=1M
dd: writing `/dev/sde': デバイスに空き領域がありません
8193+0 records in
8192+0 records out
8589934592 bytes (8.6 GB) copied, 5.5338 s, 1.6 GB/s
[root@node1 ~]# dd if=/dev/zero of=/dev/sdf bs=1M
dd: writing `/dev/sdf': デバイスに空き領域がありません
8193+0 records in
8192+0 records out
8589934592 bytes (8.6 GB) copied, 5.90776 s, 1.5 GB/s
3. FG1障害グループ破壊後にDBからアプリデータをSELECT
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ------------------------------ --------------------------- ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80-12-17 800 20
7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30
7521 WARD SALESMAN 7698 81-02-22 1250 500 30
7566 JONES MANAGER 7839 81-04-02 2975 20
7654 MARTIN SALESMAN 7698 81-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 81-05-01 2850 30
7782 CLARK MANAGER 7839 81-06-09 2450 10
7839 KING PRESIDENT 81-11-17 5000 10
7844 TURNER SALESMAN 7698 81-09-08 1500 0 30
7900 JAMES CLERK 7698 81-12-03 950 30
7902 FORD ANALYST 7566 81-12-03 3000 20
7934 MILLER CLERK 7782 82-01-23 1300 10
12行が選択されました。
★インスタンス2のDBアラートログに下記メッセージが出力されていました
Hex dump of (file 3, block 84609) in trace file /u01/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_w000_3232.trc
Corrupt block relative dba: 0x00c14a81 (file 3, block 84609)
Completely zero block found during buffer read
Reading datafile '+DATA/orcl/sysaux01.dbf' for corruption at rdba: 0x00c14a81 (file 3, block 84609)
Read datafile mirror 'DATA_0003' (file 3, block 84609) found same corrupt data (no logical check)
Read datafile mirror '' (file 3, block 84609) found valid data
Hex dump of (file 3, block 84609) in trace file /u01/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_w000_3232.trc
Hex dump of (file 3, block 84610) in trace file /u01/app/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_w000_3232.trc
Corrupt block relative dba: 0x00c14a82 (file 3, block 84610)
Completely zero block found during buffer read
②DATAディスク・グループのFG1、FG2障害グループ障害 (全損)
すべての障害グループ(FG1、FG2)が破損した場合、アプリデータをSELECTできるか検証します
【検証手順】
1. FG2障害グループ破壊前にDBからアプリデータをSELECT
2. ddコマンドでFG2障害グループを構成するASMディスクを論理破壊
3. FG2障害グループ破壊後にDBからアプリデータをSELECT
【想定】
検証パターン①でFG1障害グループが破損しており、FG2障害グループも破損するため、アプリデータをSELECTできないはず
【検証結果】
FG2障害グループ破損後はアプリデータをSELECTできなかった
【作業ログ】
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ------------------------------ --------------------------- ---------- -------- ---------- ---------- ----------
7369 SMITH CLERK 7902 80-12-17 800 20
7499 ALLEN SALESMAN 7698 81-02-20 1600 300 30
7521 WARD SALESMAN 7698 81-02-22 1250 500 30
7566 JONES MANAGER 7839 81-04-02 2975 20
7654 MARTIN SALESMAN 7698 81-09-28 1250 1400 30
7698 BLAKE MANAGER 7839 81-05-01 2850 30
7782 CLARK MANAGER 7839 81-06-09 2450 10
7839 KING PRESIDENT 81-11-17 5000 10
7844 TURNER SALESMAN 7698 81-09-08 1500 0 30
7900 JAMES CLERK 7698 81-12-03 950 30
7902 FORD ANALYST 7566 81-12-03 3000 20
7934 MILLER CLERK 7782 82-01-23 1300 10
12行が選択されました。
2. ddコマンドでFG2障害グループを構成するASMディスクを論理破壊
[root@node1 ~]# dd if=/dev/zero of=/dev/sdg bs=1M
dd: writing `/dev/sdg': デバイスに空き領域がありません
8193+0 records in
8192+0 records out
8589934592 bytes (8.6 GB) copied, 4.9955 s, 1.7 GB/s
[root@node1 ~]# dd if=/dev/zero of=/dev/sdh bs=1M
dd: writing `/dev/sdh': デバイスに空き領域がありません
8193+0 records in
8192+0 records out
8589934592 bytes (8.6 GB) copied, 5.21187 s, 1.6 GB/s
3. FG2障害グループ破壊後にDBからアプリデータをSELECT
SQL> select * from emp;
select * from emp
*
行1でエラーが発生しました。:
ORA-03135: 接続が失われました
プロセスID: 23842
セッションID: 142、シリアル番号: 35899
★インスタンス1・2のDBアラートログに下記メッセージが出力されていました
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_dbw0_25889.trc:
ORA-01157: ???????1???/???????? - DBWR??????????????????
ORA-01110: ???????1: '+DATA/orcl/system01.dbf'
ORA-17503: ksfdopn:2 ????+DATA/orcl/system01.dbf????????????
ORA-15001: ?????????"DATA"??????????????????????
ORA-15001: diskgroup "DATA" does not exist or is not mounted
Tue Sep 06 16:50:04 2022
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_dbw0_25889.trc:
ORA-01157: ???????3???/???????? - DBWR??????????????????
ORA-01110: ???????3: '+DATA/orcl/sysaux01.dbf'
ORA-17503: ksfdopn:2 ????+DATA/orcl/sysaux01.dbf????????????
ORA-15001: ?????????"DATA"??????????????????????
ORA-15001: diskgroup "DATA" does not exist or is not mounted
Tue Sep 06 16:50:04 2022
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_dbw0_25889.trc:
ORA-01157: ???????5???/???????? - DBWR??????????????????
ORA-01110: ???????5: '+DATA/orcl/example01.dbf'
ORA-17503: ksfdopn:2 ????+DATA/orcl/example01.dbf????????????
ORA-15001: ?????????"DATA"??????????????????????
ORA-15001: diskgroup "DATA" does not exist or is not mounted
Tue Sep 06 16:50:04 2022
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl1/trace/orcl1_dbw0_25889.trc:
ORA-01157: ???????6???/???????? - DBWR??????????????????
ORA-01110: ???????6: '+DATA/orcl/users01.dbf'
ORA-17503: ksfdopn:2 ????+DATA/orcl/users01.dbf????????????
ORA-15001: ?????????"DATA"??????????????????????
ORA-15001: diskgroup "DATA" does not exist or is not mounted
Ping without log force is disabled
※インスタンス1・2のトレースファイルを見たら日本語が文字化けせず出力されていました
ORA-751 occurred during recovery, instance will be terminated
ORA-00751: ファイルのミラー復元ステータスを取得できませんでした
ORA-01110: データファイル1: '+DATA/orcl/users01.dbf'
ORA-15118: ASMディスク・グループ'DATA'が強制ディスマウントされました。
★ASMインスタンスでディスク・グループ情報を取得したところ、最終的にDATAディスク・グループの情報が削除されました
SQL> select
2 g.group_number, g.name, g.type REDUNDANCY, d.disk_number, d.MOUNT_STATUS, d.HEADER_STATUS, d.MODE_STATUS, d.STATE, round(d.TOTAL_MB/1024, 2) TOTAL_GB, round(d.FREE_MB/1024, 2) FREE_GB, d.NAME, d.FAILGROUP, d.PATH, d.VOTING_FILE
3 from
4 v$asm_disk d, v$asm_diskgroup g
5 where
6 d.group_number = g.group_number
7 order by
8 g.group_number, d.disk_number;
GROUP_NUMBER NAME REDUNDANCY DISK_NUMBER MOUNT_STATUS HEADER_STATUS MODE_STATUS STATE TOTAL_GB FREE_GB NAME FAILGROUP PATH VOT
------------ ---------- ------------------ ----------- -------------------- -------------------- -------------------- -------------------- ---------- ---------- ---------- -------------------- -------------------- ---
0 DATA 0 CLOSED CANDIDATE ONLINE NORMAL 0 0 /dev/sde1 N
0 DATA 1 CLOSED CANDIDATE ONLINE NORMAL 0 0 /dev/sdg1 N
0 DATA 2 CLOSED MEMBER ONLINE NORMAL 0 0 /dev/sdh1 N
0 DATA 4 CLOSED CANDIDATE ONLINE NORMAL 0 0 /dev/sdf1 N
1 CRS NORMAL 0 CACHED MEMBER ONLINE NORMAL 8 5.02 CRS_0000 CRS_0000 /dev/sdb1 Y
1 CRS NORMAL 1 CACHED MEMBER ONLINE NORMAL 8 5.03 CRS_0001 CRS_0001 /dev/sdc1 Y
1 CRS NORMAL 2 CACHED MEMBER ONLINE NORMAL 8 5.02 CRS_0002 CRS_0002 /dev/sdd1 Y
3 FRA NORMAL 0 CACHED MEMBER ONLINE NORMAL 8 5.5 FRA_0000 FRA_0000 /dev/sdi1 N
3 FRA NORMAL 1 CACHED MEMBER ONLINE NORMAL 8 5.5 FRA_0001 FRA_0001 /dev/sdj1 N
↓ 数秒後
GROUP_NUMBER NAME REDUNDANCY DISK_NUMBER MOUNT_STATUS HEADER_STATUS MODE_STATUS STATE TOTAL_GB FREE_GB NAME FAILGROUP PATH VOT
------------ ---------- ------------------ ----------- -------------------- -------------------- -------------------- -------------------- ---------- ---------- ---------- -------------------- -------------------- ---
1 CRS NORMAL 0 CACHED MEMBER ONLINE NORMAL 8 5.02 CRS_0000 CRS_0000 /dev/sdb1 Y
1 CRS NORMAL 1 CACHED MEMBER ONLINE NORMAL 8 5.03 CRS_0001 CRS_0001 /dev/sdc1 Y
1 CRS NORMAL 2 CACHED MEMBER ONLINE NORMAL 8 5.02 CRS_0002 CRS_0002 /dev/sdd1 Y
3 FRA NORMAL 0 CACHED MEMBER ONLINE NORMAL 8 5.5 FRA_0000 FRA_0000 /dev/sdi1 N
3 FRA NORMAL 1 CACHED MEMBER ONLINE NORMAL 8 5.5 FRA_0001 FRA_0001 /dev/sdj1 N
★クラスタリソース情報もDATAディスク・グループ、DBリソースがOFFLINEになっていました
[root@node1 ~]# /u01/app/12.1.0/grid/bin/crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRS.dg
ONLINE ONLINE node1 STABLE
ONLINE ONLINE node2 STABLE
ora.DATA.dg
OFFLINE OFFLINE node1 STABLE
OFFLINE OFFLINE node2 STABLE
ora.FRA.dg
ONLINE ONLINE node1 STABLE
ONLINE ONLINE node2 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE node1 STABLE
ONLINE ONLINE node2 STABLE
ora.asm
ONLINE ONLINE node1 Started,STABLE
ONLINE ONLINE node2 Started,STABLE
ora.net1.network
ONLINE ONLINE node1 STABLE
ONLINE ONLINE node2 STABLE
ora.ons
ONLINE ONLINE node1 STABLE
ONLINE ONLINE node2 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE node1 STABLE
ora.LISTENER_SCAN2.lsnr
1 ONLINE ONLINE node1 STABLE
ora.LISTENER_SCAN3.lsnr
1 ONLINE ONLINE node1 STABLE
ora.MGMTLSNR
1 ONLINE ONLINE node1 169.254.243.236 192.
168.100.101,STABLE
ora.cvu
1 ONLINE ONLINE node2 STABLE
ora.mgmtdb
1 ONLINE ONLINE node1 Open,STABLE
ora.node1.vip
1 ONLINE ONLINE node1 STABLE
ora.node2.vip
1 ONLINE ONLINE node2 STABLE
ora.oc4j
1 ONLINE ONLINE node2 STABLE
ora.orcl.db
1 ONLINE OFFLINE Instance Shutdown,ST
ABLE
2 ONLINE OFFLINE Instance Shutdown,ST
ABLE
ora.scan1.vip
1 ONLINE ONLINE node1 STABLE
ora.scan2.vip
1 ONLINE ONLINE node1 STABLE
ora.scan3.vip
1 ONLINE ONLINE node1 STABLE
--------------------------------------------------------------------------------
■参考資料
・オラクルマスター教科書 Oracle Expert RAC 11gR2
・Oracle Database 11g Release 2 RAC実践ガイド 基礎から学ぶRAC構築・管理
■おわりに
今回は標準冗長構成(2多重)でしたが、外部冗長構成の場合、ASMエクステントはストライピングやミラーリングされないため、ストレージ側で冗長化します(RAID)
なお、ASM側とRAID側でそれぞれミラーリングする場合、書き込みのオーバーヘッドが問題になるため、非推奨だそうです。