忘れかけのIT備忘録

今まで学んできた知識や小技、なるほど!と思ったことをメモするブログです。

ASMの障害グループを使用したデータ保護検証

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できた

【作業ログ】

1. 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. 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できなかった

【作業ログ】

1. FG2障害グループ破壊前に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. 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側でそれぞれミラーリングする場合、書き込みのオーバーヘッドが問題になるため、非推奨だそうです。