ASM を味わう ~ ASM を監視する ~ その6
<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。 茅ヶ崎にて