ASM を味わう ~ ASM を監視する ~ その6

投稿日: 2005年9月14日

<ASM を味わう  ~ ASM を監視する ~ その6>
ペンネーム:ダーリン

さて、前回、前々回でデータの破壊と、Oracle の停止を試みました。
当然といえば当然ですが、ASM で 2 重化していても、次々とデータが壊れれ
ばいつかは Oracle もとまってしまいます。しかし、停止するまでの時間は
稼げるので、怪しげな状況になっていないかどうかは監視するべきです。

今回 ASM の情報を見るに当たって、ほとんどの情報はASM インスタンスから
取得しました。これは、データベースインスタンス側でも ASM の情報は取得
できるのですが、監視するには不十分なためです。例えば、前回 ASM を構成
している DISK のデータを壊した時、ASM インスタンスでは、V$ASM_DISK の
xxx_STATUS を見ました。

# 先週の環境は壊れたので、別の環境で確認しています。あしからず。

<>

SQL> select mount_status
  2       , header_status
  3       , mode_status
  4       , state
  5       , total_mb
  6       , free_mb
  7       , path
  8   from v$asm_disk;

MOUNT_S HEADER_STATU MODE_ST STATE   TOTAL_MB  FREE_MB PATH
------- ------------ ------- ------ --------- -------- -------------
CACHED  MEMBER       ONLINE  NORMAL     10236     9857 /dev/raw/raw5
CACHED  MEMBER       ONLINE  NORMAL     10236     9848 /dev/raw/raw4
CACHED  CANDIDATE    ONLINE  NORMAL     10236        0 /dev/raw/raw3
CACHED  CANDIDATE    ONLINE  NORMAL     10236        0 /dev/raw/raw2
CACHED  CANDIDATE    ONLINE  NORMAL     10236        0 /dev/raw/raw1

<>

SQL> select mount_status
  2       , header_status
  3       , mode_status
  4       , state
  5       , total_mb
  6       , free_mb
  7       , path
  8   from v$asm_disk;

MOUNT_S HEADER_STATU MODE_ST STATE   TOTAL_MB  FREE_MB PATH
------- ------------ ------- ------ --------- -------- -------------
OPENED  UNKNOWN      ONLINE  NORMAL     10236        0 /dev/raw/raw1
OPENED  UNKNOWN      ONLINE  NORMAL     10236        0 /dev/raw/raw2
OPENED  UNKNOWN      ONLINE  NORMAL     10236        0 /dev/raw/raw3
OPENED  UNKNOWN      ONLINE  NORMAL     10236        0 /dev/raw/raw4
OPENED  UNKNOWN      ONLINE  NORMAL     10236        0 /dev/raw/raw5

つまり、データベースインスタンス側では、状況の変化を認識できていない。
少なくとも、データを壊した直後においては、ASM インスタンス側で認識す
るほうがすばやく変化を検知できるでしょう。

ちなみに、データベースインスタンス側で FREE_MB が 0 になっているのは、
異常を検知しているわけではありません。各 DISK 上で具体的にどのくらい占
有しているかは、ASM 上で見るほうが確実です。

前回は、この状況でもう 1 つ DISK を壊して Oracle 停止に追い込んでみま
した。では、仮に本当にこのような状況になった場合にどうすれば元の状態に
戻せるのか念のために確認しておきましょう。

考えられる方法としては、空いている DISK を DISK Group に追加して、リバ
ランシングを実行してみる方法でしょうか。リバランシングとは、DISK を
DISK Group に追加、あるいは、削除する場合にデータを再配置する処理のこと
です。

では、まず壊した DISK を一度 DROP しましょう。
FREE_MB が 0 になっている DISK を確認します。

SQL> select group_number,disk_number,header_status,name,path,free_mb from v$asm_disk;

GROUP_NUMBER DISK_NUMBER HEADER_STATUS NAME       PATH           FREE_MB
------------ ----------- ------------- ---------- ------------- --------
           1           4 MEMBER        DATA_0004  /dev/raw/raw5     9857
           1           3 MEMBER        DATA_0003  /dev/raw/raw4     9848
           1           2 CANDIDATE     DATA_0002  /dev/raw/raw3        0
           1           1 CANDIDATE     DATA_0001  /dev/raw/raw2        0
           1           0 CANDIDATE     DATA_0000  /dev/raw/raw1        0

では、”DATA_0000″ DISK を DROP しましょう。

SQL> alter diskgroup data drop disk DATA_0000;

Diskgroup altered.

SQL> select mount_status
  2       , header_status
  3       , mode_status
  4       , state
  5       , total_mb
  6       , free_mb
  7       , path
  8    from v$asm_disk;

MOUNT_S HEADER_STATU MODE_ST STATE   TOTAL_MB  FREE_MB PATH
------- ------------ ------- ------ --------- -------- -------------
CLOSED  CANDIDATE    ONLINE  NORMAL     10236        0 /dev/raw/raw1
CLOSED  CANDIDATE    ONLINE  NORMAL     10236        0 /dev/raw/raw2
CLOSED  CANDIDATE    ONLINE  NORMAL     10236        0 /dev/raw/raw3
CLOSED  MEMBER       ONLINE  NORMAL     10236        0 /dev/raw/raw4
CLOSED  MEMBER       ONLINE  NORMAL     10236        0 /dev/raw/raw5

まだ、DROP が終了していないようです。。。。あら? 全部 FREE_MB が 0 に
なっています。あらら、MOUNT_STATUS が 全部 “CLOSED” になっています。
も、もしや、、

SQL> select count(*) from tbl002;
select count(*) from tbl002
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel

$ ps -elf | grep ora_
0 S oracle    6547  6518  0  83   0    -  1174 pipe_w 15:59 pts/0    00:00:00 grep ora_

ぎょえーーー!!

一見動いているように見えましたが、やはり 2 重化 している DISKを 2 本
同時に壊すのは無謀だったかもしれません。

ASM インスタンスは動いています。DISK Group の STATE を見てみましょう。

SQL> select * from v$asm_diskgroup;

GROUP_NUMBER NAME SECTOR_SIZE BLOCK_SIZE ALLOCATION_UNIT_SIZE STATE
------------ ---- ----------- ---------- -------------------- ----------
           0 DATA         512       4096              1048576 DISMOUNTED

TYPE   TOTAL_MB  FREE_MB
----- --------- --------
          51180        0

“DATA” DISK Group は “DISMOUNT” です。

次週は、もう一度 DISK の DROP と ADD を目指します。

People だけでは足りないのか Larry。 茅ヶ崎にて