ASM を味わう ~ ASM を立ち上げるのだ ~ その1
<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 になっています。
この辺りの設定が任意にできないとは思えないのですが。
では、来週はこの辺りから攻めていきましょう。
江ノ島の花火が見える茅ヶ崎にて