ASM を味わう ~ ASM を立ち上げるのだ ~ その1

投稿日: 2005年8月03日

<ASM を味わう ~ ASM を立ち上げるのだ ~ その1>
ペンネーム:ダーリン

今週から Oracle 10g の新機能である ASM の検証を行います。

ASM(Automatic Storage Management) を使用すると、Oracle を構成するファ
イルの物理配置についてこれまでのように意識して配置する必要がなくなりま
す。従来、ファイルの物理配置を意識する必要があった点といえば、耐障害性
と、次に I/O レスポンスです。
従来の方法では、耐障害性を保つために 2 重化するファイルは、異なる物
理 DISK や、異なる RAID Group に配置しました。しかし、ASM では対象の
ファイルを多重化する( 2重化 あるいは 3 重化)かどうかを指定すれば、
物理 DISK (デバイス) を分けて配置してくれます。 もちろん、ASM だけでは
コントローラや、ストレージの電源と言ったレベルの障害範囲を考慮した配置
は不可能なので、これらについては、エンジニアの判断が必要です。ただし、
これらについても、障害 Group を把握する必要があるだけなので、一旦、障
害 Group を設定してしまえば、以降、 ASM が同一障害 Group を避けるよう
に多重化してくれます。
では、レスポンスの観点からどのようなメリットがあるのでしょうか。
ASM に配置したファイルは、AU(Allocation Unit) 単位でストライピングされ、
それぞれの DISK に配置されます。このため、すべてのファイルへのアクセス
が、ASM を構成する物理 DISK に分散されることになります。つまり、Oracle
の標準機能で、ストライピング DISK の機能を実現できることになります。
では、この夢のような ASM が実際にどのように使えるのかを見ていきまし
ょう。しばらくの間お付き合いください。

<>

Oracle 10g のインストールは、これまでのバージョンのインストールと大し
て変わりはありません。ASM を使用するときは、OUI でインストールする場合
は、途中で ASM を選択してください。 デフォルトのままだと、通常通りファ
イルシステムで作成してしまいます。

では、検証を始めましょう。
まず ASM で作成した Oracle 10g データベースを起動します。

$ sqlplus " / as sysdba "

Connected to an idle instance.

SQL> startup
ORA-17503: ksfdopn:2 Failed to open file +DATA/ora101/spfileora101.ora
ORA-15055: unable to connect to ASM instance
SQL>

多分みんな一度はやっていますよね。おきまりのパターンです。
ASM を使用するには、ストレージ管理用のインスタンスが必要です。また、
ASM を利用するデータベースを起動する前には、これをあらかじめ起動して
おく必要があります。OUI で ASM を指定したデータベースの作成まで行った
場合は、ASM インスタンスも作成されているはずです。

では、ASM インスタンスが起動しているかどうかを確認し、ASM インスタン
スが起動していない場合はまずこれを起動しましょう。

$ ps -elf | grep asm_ | grep -v grep
$
$ ORACLE_SID=+ASM sqlplus " / as sysdba "

SQL*Plus: Release 10.1.0.3.0 - Production on 水 8月 3 00:28:22 2005

Copyright (c) 1982, 2004, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ASM instance started

Total System Global Area   75497472 bytes
Fixed Size                   777772 bytes
Variable Size              74719700 bytes
Database Buffers                  0 bytes
Redo Buffers                      0 bytes
ASM diskgroups mounted
SQL>

これで、ASM の準備完了です。
つづいてデータベースを起動しましょう。

$ sqlplus " / as sysdba "

SQL*Plus: Release 10.1.0.3.0 - Production on ? 8? 3 00:30:19 2005

Copyright (c) 1982, 2004, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  167772160 bytes
Fixed Size                   778212 bytes
Variable Size              66068508 bytes
Database Buffers          100663296 bytes
Redo Buffers                 262144 bytes
Database mounted.
Database opened.
SQL>

今度は無事起動できました。
参考までに、起動しているプロセスを以下に示しておきます。

ASM 関連プロセス

$ ps -elf | grep asm_ | grep -v grep
0 S oracle   24819    1  0  75   0    - 38975 schedu 00:28 ?     00:00:00 asm_pmon_+ASM
0 S oracle   24821    1  0  75   0    - 38808 schedu 00:28 ?     00:00:00 asm_mman_+ASM
0 S oracle   24823    1  0  75   0    - 39308 schedu 00:28 ?     00:00:00 asm_dbw0_+ASM
0 S oracle   24825    1  0  75   0    - 38808 schedu 00:28 ?     00:00:00 asm_lgwr_+ASM
0 S oracle   24827    1  0  75   0    - 39100 schedu 00:28 ?     00:00:00 asm_ckpt_+ASM
0 S oracle   24829    1  0  75   0    - 39002 schedu 00:28 ?     00:00:00 asm_smon_+ASM
0 S oracle   24831    1  0  75   0    - 38845 schedu 00:28 ?     00:00:00 asm_rbal_+ASM
0 S oracle   24855    1  0  75   0    - 38852 pipe_w 00:30 ?     00:00:00 asm_asmb_+ASM
0 S oracle   24859    1  0  85   0    - 38849 schedu 00:30 ?     00:00:00 asm_o000_+ASM
0 S oracle   24864    1  0  75   0    - 38807 schedu 00:30 ?     00:00:00 asm_o001_+ASM

データベース関連プロセス

$ ps -elf | grep ora_ | grep -v grep
0 S oracle   24866    1  0  75   0    - 61517 schedu 00:30 ?     00:00:00 ora_pmon_ora101
0 S oracle   24868    1  0  75   0    - 61339 schedu 00:30 ?     00:00:00 ora_mman_ora101
0 S oracle   24870    1  0  75   0    - 62250 schedu 00:30 ?     00:00:00 ora_dbw0_ora101
0 S oracle   24872    1  0  75   0    - 66988 schedu 00:30 ?     00:00:00 ora_lgwr_ora101
0 S oracle   24874    1  0  75   0    - 61787 schedu 00:30 ?     00:00:00 ora_ckpt_ora101
0 S oracle   24876    1  0  75   0    - 61607 schedu 00:30 ?     00:00:01 ora_smon_ora101
0 S oracle   24878    1  0  75   0    - 61335 schedu 00:30 ?     00:00:00 ora_reco_ora101
0 S oracle   24880    1  0  77   0    - 61617 schedu 00:30 ?     00:00:01 ora_cjq0_ora101
0 S oracle   24882    1  0  75   0    - 61628 schedu 00:30 ?     00:00:00 ora_d000_ora101
0 S oracle   24884    1  0  75   0    - 61484 schedu 00:30 ?     00:00:00 ora_s000_ora101
0 S oracle   24888    1  0  75   0    - 61382 pipe_w 00:30 ?     00:00:00 ora_asmb_ora101
0 S oracle   24892    1  0  75   0    - 61534 schedu 00:30 ?     00:00:00 ora_rbal_ora101
0 S oracle   24894    1  0  75   0    - 61379 schedu 00:30 ?     00:00:00 ora_o000_ora101
0 S oracle   25016    1  1  75   0    - 61339 schedu 00:33 ?     00:00:00 ora_qmnc_ora101
0 R oracle   25037    1 16  81   0    - 61868 -      00:33 ?     00:00:02 ora_mmon_ora101
0 S oracle   25039    1  1  75   0    - 61336 schedu 00:33 ?     00:00:00 ora_mmnl_ora101
0 S oracle   25053    1  3  83   0    - 61345 schedu 00:33 ?     00:00:00 ora_q000_ora101
0 R oracle   25055    1 13  82   0    - 61606 -      00:33 ?     00:00:00 ora_j000_ora101
0 R oracle   25058    1 10  83   0    - 61600 -      00:33 ?     00:00:00 ora_j001_ora101
0 R oracle   25060    1 10  83   0    - 61609 -      00:33 ?     00:00:00 ora_j002_ora101
0 S oracle   25062    1 11  83   0    - 61336 schedu 00:33 ?     00:00:00 ora_j003_ora101
0 R oracle   25067    1 21  83   0    - 61206 -      00:33 ?     00:00:00 ora_j004_ora101

<>

通常データベースに業務データを配置する場合 SYSTEM 表領域は使用せず、
業務用に専用の表領域を作成しこれを使用します。
では、ASM を利用したデータベースに、検証用の表領域を作成しましょう。

現在すでに作成されている表領域はどのマウントポイントに作成されている
でしょうか? これを参考にします。

SQL> select tablespace_name,file_name,bytes/1024/1024 MBytes
  2  from dba_data_files ;

TABLESPACE_NAME  FILE_NAME                              MBYTES
---------------- -------------------------------------- ----------
USERS            +DATA/ora101/datafile/users.259.1               5
SYSAUX           +DATA/ora101/datafile/sysaux.257.1            220
UNDOTBS1         +DATA/ora101/datafile/undotbs1.258.1           25
SYSTEM           +DATA/ora101/datafile/system.256.1            440

SQL> select tablespace_name,file_name,bytes/1024/1024 MBytes
  2  from dba_temp_files;

TABLESPACE_NAME  FILE_NAME                              MBYTES
---------------- -------------------------------------- ----------
TEMP             +DATA/ora101/tempfile/temp.268.1               20

ファイル名に妙な記述があります。これが ASM 上で表領域に割り当てられて
いるファイル(*)をあらわしています。

(*) ASM では、RAW デバイス上に Oracle が管理する単位でデータを配置す
るため、OS 上からは、表領域を構成する上記のようなファイルは認識で
きません。あくまでも、Oracle が管理する上での “ファイル” です。

上記のファイル名について、説明しておきましょう。
なお、ディレクトリ構成で書かれていますが、実際には ASM が管理する DISK
GROUP 内で管理されているので、OS 上のディレクトリとは関係ありません。

ファイル名は、以下のパートで構成されています。

+DATA ・・・・・ ASM の DISK GROUP 名
ora101 ・・・・ 初期化パラメータの DB_UNIQUE_NAME
datafile ・・・・ ASM 構成ファイルのテンプレート
system.256.1 ・・ 表領域名.ファイル番号.添え字

つまり、表領域を作成するときは、これらを指定すれば作成可能のようです。
ではでは、ファイル番号をダブらないように 260 にして TEST 表領域を作成
してみます。

SQL> create tablespace test datafile '+DATA/ora101/datafile/test.260.1' size 50m;
create tablespace test datafile '+DATA/ora101/datafile/test.260.1' size 50m
*
ERROR at line 1:
ORA-01276: Cannot add file +DATA/ora101/datafile/test.260.1.  File has an Oracle Managed Files file name.

あらら、そうは簡単に問屋がおろしてくれないようです。
しかし、マニュアルを見ると話はもっと簡単で、テーブルスペース名だけ指
定すれば表領域が作成可能のようです。その際のファイル作成先は初期化パ
ラメータの DB_CREATE_FILE_DEST に指定されたDISK Group になります。
では、試してみましょう。

SQL> sho parameter db_create_file_dest

NAME                  TYPE        VALUE
--------------------- ----------- ---------
db_create_file_dest   string      +DATA

SQL> create tablespace test;

Tablespace created.

SQL> select tablespace_name,file_name,bytes/1024/1024 MBytes from dba_data_files;

TABLESPACE_NAME   FILE_NAME                               MBYTES
----------------- --------------------------------------- ----------
USERS             +DATA/ora101/datafile/users.259.1                5
SYSAUX            +DATA/ora101/datafile/sysaux.257.1             220
UNDOTBS1          +DATA/ora101/datafile/undotbs1.258.1            25
SYSTEM            +DATA/ora101/datafile/system.256.1             440
TEST              +DATA/ora101/datafile/test.270.1               100

なるほどこれは簡単です。ファイル名などは、自動的に付与してくれるようです。
また、データファイルのサイズはなぜか 100MB になっています。
この辺りの設定が任意にできないとは思えないのですが。

では、来週はこの辺りから攻めていきましょう。

江ノ島の花火が見える茅ヶ崎にて