ASM を味わう ~ ASM をメンテする ~ その7

投稿日: 2005年9月21日

<ASM を味わう ~ ASM をメンテする ~ その7>
ペンネーム:ダーリン

先週は勢いあまって再び Oracle を壊してしまいました。なので、今週はもう
一度データを壊すところからスタートです。( 最近壊してばっかり。)

さて、同じように構築した環境を準備しました。 では、はじめましょう。

/dev/raw/raw1 にデータを書き込みます。

$ dd if=/dev/random of=/dev/raw/raw1
読み込んだブロック数は 0+607
書き込んだブロック数は 51+0

で、ステータスを確認します。

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

MOUNT_STATUS  HEADER_STATUS   MODE_STATUS  STATE     TOTAL_MB    FREE_MB NAME       PATH
------------- --------------- ------------ ------- ---------- ---------- ---------- --------------
CACHED        MEMBER          ONLINE       NORMAL       10236       9880 DATA_0004  /dev/raw/raw5
CACHED        MEMBER          ONLINE       NORMAL       10236       9877 DATA_0003  /dev/raw/raw4
CACHED        MEMBER          ONLINE       NORMAL       10236       9874 DATA_0002  /dev/raw/raw3
CACHED        MEMBER          ONLINE       NORMAL       10236       9877 DATA_0001  /dev/raw/raw2
CACHED        CANDIDATE       ONLINE       NORMAL       10236          0 DATA_0000  /dev/raw/raw1

今回は、一本だけ壊してようすを見ることにしましょう。 さあ、DISK を
DROP します。

SQL> alter diskgroup data drop disk data_0000;

Diskgroup altered.

むむ。 DISK がカリカリと動いている。

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

MOUNT_STATUS  HEADER_STATUS   MODE_STATUS  STATE      TOTAL_MB    FREE_MB NAME       PATH
------------- --------------- ------------ -------- ---------- ---------- ---------- --------------
CACHED        MEMBER          ONLINE       NORMAL        10236       9880 DATA_0004  /dev/raw/raw5
CACHED        MEMBER          ONLINE       NORMAL        10236       9877 DATA_0003  /dev/raw/raw4
CACHED        MEMBER          ONLINE       NORMAL        10236       9874 DATA_0002  /dev/raw/raw3
CACHED        MEMBER          ONLINE       NORMAL        10236       9877 DATA_0001  /dev/raw/raw2
CACHED        CANDIDATE       ONLINE       DROPPING      10236          0 DATA_0000  /dev/raw/raw1

SQL> /

MOUNT_STATUS  HEADER_STATUS   MODE_STATUS  STATE      TOTAL_MB    FREE_MB NAME       PATH
------------- --------------- ------------ -------- ---------- ---------- ---------- --------------
CACHED        MEMBER          ONLINE       NORMAL        10236       9826 DATA_0004  /dev/raw/raw5
CACHED        MEMBER          ONLINE       NORMAL        10236       9824 DATA_0003  /dev/raw/raw4
CACHED        MEMBER          ONLINE       NORMAL        10236       9823 DATA_0002  /dev/raw/raw3
CACHED        MEMBER          ONLINE       NORMAL        10236       9827 DATA_0001  /dev/raw/raw2
CACHED        CANDIDATE       OFFLINE      DROPPING      10236          0 DATA_0000  /dev/raw/raw1

DROP していない DISK の FREE_MB が減少してきたので、”DATA_0000″ の
DISK のデータを移動しているようです。でも、壊れたデータを移動されても
困るのですが、この後どうなるのでしょうか。

SQL> /

MOUNT_STATUS  HEADER_STATUS   MODE_STATUS  STATE      TOTAL_MB    FREE_MB NAME       PATH
------------- --------------- ------------ -------- ---------- ---------- ---------- --------------
CACHED        MEMBER          ONLINE       NORMAL        10236       9779 DATA_0004  /dev/raw/raw5
CACHED        MEMBER          ONLINE       NORMAL        10236       9785 DATA_0003  /dev/raw/raw4
CACHED        MEMBER          ONLINE       NORMAL        10236       9789 DATA_0002  /dev/raw/raw3
CACHED        MEMBER          ONLINE       NORMAL        10236       9796 DATA_0001  /dev/raw/raw2
CACHED        CANDIDATE       OFFLINE      HUNG          10236          0 DATA_0000  /dev/raw/raw1

んげっ!! 今度は “HUNG” です。

HUNG - 削除中のディスクからデータを再配置するための十分な領域がないた
め、ディスク削除操作を続行できない。

(「Oracle(R) Database リファレンス 10g リリース1(10.1)」から抜粋 )

そんなはずはありません。FREE_MB は DATA_0001 ~ DATA_0004 まであわせて
39GB 以上空いています。いったいどうなっているんでしょうか?

ちなみに、ASM にも alert.log があります。何か出ていないでしょうか。

====================================================================
......................
......................

Tue Sep 13 17:57:35 2005
SQL> alter diskgroup data drop disk data_0000
Tue Sep 13 17:57:35 2005

......................
......................

WARNING: offlining mode 3 of disk 0/0x0 (DATA_0000)
NOTE: cache closing disk 0: DATA_0000 path:/dev/raw/raw1
Tue Sep 13 17:59:21 2005
NOTE: stopping process ARB0
SUCCESS: rebalance completed for group 1/0xbc508a4b (DATA) <--(1)
WARNING: offline disk DATA_0000 has references (0 AUs)
====================================================================

(1) に 「SUCCESS: rebalance completed for group 1/0xbc508a4b (DATA)」
と言う文字列が見えます。

どうやら、リバランス処理は正常に終了したようです。
( 本当に STATE 列の値は信用できませんね。)
つまり、”壊れたデータ” を “無事” 他の DISK に再配置完了したと言うことで
しょう。 … 怖い。

とにかく、ASM をメンテナンスするときは、最初に各 STATUS 列の内容を確認
した方がよさそうです。 しかも、STATUS がおかしいからといって「とりあえ
ず切り離しておこう」というのは危なそうです。なぜなら、おかしなデータも
そのまま、再配置しているようなので。

来週は、DISK を追加します。