しばちょう先生の試して納得!DBAへの道

しばちょう先生の試して納得!DBAへの道 indexページ▶▶

しばちょう先生による技術解説セミナー。
動画、資料を公開中です。

>> 最新のセミナーをチェック

しばちょう先生の試して納得!DBAへの道
第30回 ASMディスク・グループの作成と使用量の確認

みなさん、こんにちは。"しばちょう"こと柴田長(しばた つかさ)です。

やりました!気が付けば今回で連載30回目ですね!毎回好き勝手に書かせて頂きながらもここまで継続できたのは、一重に読者の皆様に日頃アクセスして頂いているからこそだと思っています。心より感謝申し上げます。ありがとうございます。

その記念すべき30回目と言う事で(満を持してでは無いですが)、私が最も得意としていた(過去形?)Oracle Automatic Storage Management(以降、ASMと略)の世界を複数回に渡って体験して頂きたいと思います。ASMはOracle Database 10g Release 1で登場したOracle Databaseに特化したストレージ管理機能ですが、今現在も止まることなく進化をし続けています。例えば、リバランスの動作は Oracle Database 11g Release 11.2.0.2 で改良されていたりしますし、Oracle Database 12cではOracle Flex ASMが登場して、より可用性が増しています。また、セミナー等で講演するとまだまだ反響が大きい事から深い知識が求められているようにも感じています。また、ASMはExadataの構成要素の一つでもありますので、是非この機会に自由に使いこなせるようになってしまいましょう。

今回はまず、基本中の基本であるASMディスク・グループの作成と使用量の確認方法をご説明させて頂きます。

なお、ASMの検証では多くのハードディスク・ドライブが必要となる傾向がありますが、そのような物理的な環境を用意できる方は多くは無いと思います。以降の演習は、仮想化ソフトウェアであるOracle VM VirtualBoxで作成した仮想環境で検証を進めさせて頂きます。Oracle Technology Networkで公開されているOracle Database 11g(11.2.0.4) on VirtualBox構築ガイド内の「Oracle VM VirtualBox を用いた Oracle Real Application Clusters(RAC)11g Release 2 環境の構築」を参考にして検証環境を作成してみてください。

こちらは2ノードRAC環境の構築ガイドとなっていますが、手順「6. 仮想マシンのクローンとクローン後の設定」をスキップして、続く手順「7. Oracle Grid Infrastructure インストールおよび構成」の「5. インストール・オプションの選択」画面において『スタンドアロン・サーバー用のOracle Grid Infrastructureの構成』を選択することで、Oracle Restart環境(ASMを使用したシングル・データベース環境)を作成することが可能です。もちろん、手順通り実施して2ノードRAC環境を構成して頂いても、以降の演習には影響はございません。

1. Oracle VM VirtualBoxのOracle Database 11g Release 2環境において、新規に1GBの仮想ハードディスク・ドライブを4つ追加してください。その後、仮想OSを起動して追加した各HDDにおいて、それぞれ一つずつパーティションを切り出して下さい。

pic-30-1
[root@vm11204]# fdisk /dev/sdj

Command (m for help): p <ENTER>

Disk /dev/sdj: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x6eba0f6f

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n <ENTER>

Command action
   e   extended
   p   primary partition (1-4)
p <ENTER>

Partition number (1-4): 1 <ENTER>
First cylinder (1-130, default 1): 1 <ENTER>
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): <ENTER>
Using default value 130

Command (m for help): w <ENTER>

**********************************************
残り3つのデバイスに対しても、上記を繰り返す
**********************************************

[root@vm11204]# vi /etc/udev/rules.d/99-oracle.rules
KERNEL=="sd[b-z]1",ACTION=="add|change",OWNER="grid",GROUP="asmadmin",MODE="0660"


[root@vm11204]# udevadm control --reload-rules
[root@vm11204]# start_udev


[root@vm11204 dev]# ls -lrt /dev | grep -E 'sdj1|sdk1|sdl1|sdm1'
brw-rw----. 1 grid    asmadmin   8, 145 Jun  2 21:06 sdj1
brw-rw----. 1 grid    asmadmin   8, 161 Jun  2 21:09 sdk1
brw-rw----. 1 grid    asmadmin   8, 177 Jun  2 21:09 sdl1
brw-rw----. 1 grid    asmadmin   8, 193 Jun  2 21:09 sdm1

さて、まずは準備運動です。とは言え、sqlplusを使用した作業ではないですけどね。上記の手順は前述したガイド「Oracle VM VirtualBox を用いた Oracle Real Application Clusters(RAC)11g Release 2 環境の構築」の「5.11 記憶域の確認と準備」においても解説されている内容ですので、ここでの説明は割愛させて頂きます。

ここで把握しておくべきは、切り出して頂いた4つのデバイス名(/dev/sdj1, sdk1, sdl1, sdm1)です。簡単に言ってしまえば、これがASMディスクと呼ばれているものになるのですね。さあ、どんどん進めていきましょう。

2. ASMインスタンスへ接続し、どのASMディスク・グループにも所属していないASMディスクとして、演習1で作成した4つのデバイスが検出されていることを確認して下さい。

[root@vm11204]# su – grid

[grid@vm11204 ~]$ ps -ef | grep -v grep | grep asm_pmon
grid      2349     1  0 21:01 ?        00:00:00 asm_pmon_+ASM

[grid@vm11204 ~]$ export ORACLE_SID=+ASM
[grid@vm11204 ~]$ which sqlplus
/u01/app/grid/product/11.2.0/grid_1/bin/sqlplus

[grid@vm11204 ~]$ sqlplus / as sysasm
SQL>
set linesize 150 pages 500
select INSTANCE_NAME, STATUS from V$INSTANCE ;

INSTANCE_NAME           STATUS
----------------------- --------
+ASM                    STARTED


SQL>
col NAME for a12
col HEADER_STATUS for a14
col PATH for a40
select GROUP_NUMBER, DISK_NUMBER, NAME, HEADER_STATUS, PATH
  from V$ASM_DISK
 where GROUP_NUMBER = 0 ;

GROUP_NUMBER DISK_NUMBER NAME         HEADER_STATUS  PATH
------------ ----------- ------------ -------------- ----------------------------------------
           0           0              CANDIDATE      /dev/sdm1
           0           3              CANDIDATE      /dev/sdj1
           0           2              CANDIDATE      /dev/sdk1
           0           1              CANDIDATE      /dev/sdl1

正直どこからASMを説明すべきかを非常に悩みましたが、触ってみることが大事だと思ったので、少しずつ解説していきますね。

まず大切なのは、Oracle Database 11g Release 2より、Oracle ClusterwareとOracle Automatic Storage Managementが統合され、Oracle Grid Infrastructureとして提供されています。つまり、ASMを使用したい場合はOracle Grid Infrastructureをインストールする必要があると言う事です。ちなみに、以前のリリースではOracle Databaseに属していたので、Oracle DatabaseをインストールするだけでASMが使用できました。と書いてしまうと面倒になったーという印象を感じてしまいますが、Oracle Grid Infrastructureに統合されたことにより高い可用性や運用管理の容易性を提供してくれるようになったのです。とだけ、ここでは宣言しておきましょう。

そして、私の検証環境においてOracle Grid InfrastructureをインストールしたOSユーザーは「grid」ユーザーなので、ASMを操作する際には「grid」ユーザーにスイッチする必要があります。本当に基本中の基本ですが、初めて使用する方にとってはこのような部分が高い敷居になっているのではないでしょうか? 

そして、ASMインスタンスの名前をpsコマンドで確認しています。ASMインスタンスにもデータベース・インスタンスと同お湯にpmonプロセスが存在しているので、これを利用する非常に簡単な例です。これにより、ASMインスタンスの名前が「+ASM」であると確認できます。

ここからはデータベース・インスタンスへ接続する方法とほとんど同じですね。ORACLE_SID環境変数に先ほどの「+ASM」を設定してsqlplusで接続するわけですが、2点注意して下さい。一点目は「Oracle Grid Infrastructureのsqlplusを使用する」こと。二点目は「SYSDBAではなく、SYSASM権限を指定する」こと。本当は、わざと失敗して頂きたかったのですが、先が長いので正解を書いてしまいました。興味がある方は、この2点を守らずに(Oracle Databaseのsqlplusを使用 & SYSDBA権限を指定)ASMインスタンスへ接続を試みてください。どのようなエラーが出るのかを知っておくことも大切ですから。

さて、次の解説へ進みます。実際にASMインスタンスへ接続出来たか否かをV$INSTANCEビューへ問合せて確認してみてください。簡単なオペレーションではありますが、実際にSQLを実行した方は、ASMインスタンスがデータベース・インスタンスをベースとして開発されたものだということを信じ初めてくれたことでしょう。だって、V$INSTANCEビューが存在しているのですから。

最後に、ようやく本題となります。ASMディスクの状態を確認するには、V$ASM_DISKビューへ問い合わせます。このビューの説明はデータベースのディクショナリ・ビューを調べる時と同様であり、マニュアル「Oracle Databaseリファレンス」を使用します。どのASMディスク・グループにも属していないASMディスクのGROUP_NUMBER列は「0」であり、新規/既存のASMディスク・グループに追加することが出来るASMディスクのHEADER_STATUS列の値は「CANDIDATE」となります。ここで見事に、演習1で切りだした4つのデバイスが表示されれば問題ありません。

もし、表示されなかった場合は、ASMインスタンスのASM_DISKSTRING初期化パラメータに、適切な検出パスが設定されていない可能性がありますので、見直してみてくださいね。

3. 演習2で検出した4つのASMディスクから構成される、標準冗長性のASMディスク・グループ「DG_NORMAL」を作成して下さい。

[grid@vm11204 ~]$ sqlplus / as sysasm
SQL> 
create diskgroup DG_NORMAL
  normal redundancy
    regular failgroup FG1 disk '/dev/sdj1' name DG_NORMAL_DISK1 size 1000m
    regular failgroup FG2 disk '/dev/sdk1' name DG_NORMAL_DISK2 size 1000m
    regular failgroup FG3 disk '/dev/sdl1' name DG_NORMAL_DISK3 size 1000m
    regular failgroup FG4 disk '/dev/sdm1' name DG_NORMAL_DISK4 size 1000m
  attribute
    'COMPATIBLE.ASM'   = '11.2.0.2',
    'COMPATIBLE.RDBMS' = '11.2' ;

いかがでしょうか?標準冗長性のASMディスク・グループを作成することが出来ましたか?マニュアル「Oracle Database SQL言語リファレンス」の「CREATE DISKGROUP」に書き方が掲載されていますが意外と「カンマ(,)」の必要の有無でミスしがちなので、必ず実行できるサンプルを提示する目的として、上記の回答例は非常に細かく色々指定したSQL文にしてみています。

参考までに普段の私であれば、次のように非常にシンプルなSQL文を書いています。

SQL>
create diskgroup DG_NORMAL 
  disk '/dev/sdj1', '/dev/sdk1', '/dev/sdl1', '/dev/sdm1' ;

ここではASMディスク・グループの冗長性に関して説明しておきますね。

ASMディスク・グループの冗長性とは、いわゆるファイルのミラー化であり、外部冗長性(External Redundancy)、標準冗長性(Normal Redundancy)、高冗長性(High Redundancy)の3種類のタイプがあります。下記の説明は、マニュアルの記述を抜粋+編集したものです。

  • 外部冗長性
    ミラー化冗長性は提供されない為、ストレージ側のRAIDで可用性を担保することをお勧めします。万が一、書込みエラーが発生した場合、ディスク・グループは強制的にディスマウントされます。ディスク・グループを正常にマウントするには、すべてのディスクを検出する必要があります。
  • 標準冗長性
    デフォルトで2重ミラー化を行います。つまり、すべてのファイルがミラー化されるため、各ASMエクステントのコピーが2つ存在することになるので、もしも1つのASMディスクが破損した場合でもASMディスク・グループとしては全てのデータの読書きを継続することが可能です。
    必要に応じて、3方向ミラー化または非保護ミラー化を選択できます。
  • 高冗長性
    デフォルトでトリプル・ミラー化を行います。異なる障害グループに属するASMディスクが同時に2つ破損しても、データは保護されます。

はい。こんな感じです。例えば、RAID1+0から切り出したLogical Unit(LU)をASMディスクとする場合、そのLUはRAID機能によって可用性が担保されているので、ASMディスク・グループ側では外部冗長性を選択するお客様が多い傾向があります。もちろん、ASM側でも標準冗長性を採用すれば、より高い可用性を手にすることは出来ますが、RAIDで2重持ち+ASMで2重持ち=実データの4倍になりますので、I/O性能や容量を充分に確保しなければならなくなりますよね。

このASMディスク・グループの冗長性はCREATE DISKGROUP時にしか指定することが出来ません。作成した後に変更は出来ませんのでご注意ください。とは言え、上記の標準冗長性の説明書きの中で赤文字とした部分は、意外と知られていません。ASMディスク・グループの冗長性はあくまでデフォルトの設定であり、実際に、それらのASMディスク・グループ上にファイルを作成する際には、ファイル単位で冗長性を指定することが出来るのですよ。実に、面白いですよね。しかーし、私自身もほとんどファイル単位で冗長性を指定したことは無いので、使用する場合にはキッチリと検証してみてくださいね。

ちなみに、上段で非常に細かくオプションを指定した回答例のSQL文で「attribute」オプションとして2つの属性を指定していますが、これらの属性に指定するバージョンによって、使用可能となるASMの機能が変わってきます。これに関しては、マニュアル「Oracle Automatic Storage Management管理者ガイド」の「表4-2 ディスク・グループの互換性属性設定により使用可能になる機能」を参照してみてください。次回以降の連載でリバランスを扱う回にて、もう一度触れる予定です。

また、本当に標準冗長性のASMディスク・グループとして作成されているのかは、V$ASM_DISKGROUPビューへ問い合わせることで確認することが可能です。その例をV$ASM_DISKビューの結果と共に、下記に提示しておきます。参考にしてみてください。ここでは、標準冗長性のASMディスク・グループを作成した直後(特に、明示的にファイルを作成していない状況)の空き容量(FEE_MB)と使用量(HOT_USED_MB+COLD_USED_MB)を確認しておいてください。

set lines 110 pages 500
col NAME for a10
col STATE for a10
col TYPE for a8
col COMPATIBILITY for a15
col DATABASE_COMPATIBILITY for a15
select * from V$ASM_DISKGROUP where NAME = 'DG_NORMAL' ;

GROUP_NUMBER NAME       SECTOR_SIZE BLOCK_SIZE ALLOCATION_UNIT_SIZE STATE      TYPE       TOTAL_MB    FREE_MB
------------ ---------- ----------- ---------- -------------------- ---------- -------- ---------- ----------
HOT_USED_MB COLD_USED_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB OFFLINE_DISKS COMPATIBILITY   DATABASE_COMPAT
----------- ------------ ----------------------- -------------- ------------- --------------- ---------------
           3 DG_NORMAL          512       4096              1048576 MOUNTED    NORMAL         4000       3839
          0          161                    1000           1419             0 11.2.0.2.0      11.2.0.0.0


col NAME for a15
col HEADER_STATUS for a14
col PATH for a12
col FAILGROUP for a8
select GROUP_NUMBER, DISK_NUMBER, HEADER_STATUS, PATH, NAME, FAILGROUP, TOTAL_MB, FREE_MB
  from V$ASM_DISK
 where GROUP_NUMBER = 3
 order by 2 ;

GROUP_NUMBER DISK_NUMBER HEADER_STATUS  PATH         NAME            FAILGROU   TOTAL_MB    FREE_MB
------------ ----------- -------------- ------------ --------------- -------- ---------- ----------
           3           0 MEMBER         /dev/sdj1    DG_NORMAL_DISK1 FG1            1000        960
           3           1 MEMBER         /dev/sdk1    DG_NORMAL_DISK2 FG2            1000        959
           3           2 MEMBER         /dev/sdl1    DG_NORMAL_DISK3 FG3            1000        962
           3           3 MEMBER         /dev/sdm1    DG_NORMAL_DISK4 FG4            1000        958

4. 演習3で作成したASMディスクグループ「DG_NORMAL」上に100MBの表領域「TBS30」を作成してください。

[oracle@vm11204]$ sqlplus / as sysdba
SQL>
create tablespace TBS30 datafile '+DG_NORMAL(DATAFILE)' size 100m ;

ずいぶんと文章を書いたつもりですが、未だ演習4の解説なのですね。。。えーと、頑張ります!皆さんも付いてきて下さい。

この演習はそれほど、難しくなかったと思います。とは言え、気を付けてくださいね。表領域の作成はデータベース・インスタンスへ接続して実行するわけですが、ASMインスタンスに接続しながら「CREATE TABLESPACE文が実行出来ないです!」なんて言ってしまったら、非常に恥ずかしい事になりますからね(笑) 

「ASMディスク・グループ上に表領域を作成する」= 「DATAFILE句のパスにASMディスク・グループ名(先頭に「+」を追加)を含める」だけです良いです。ただし、上記回答例ではASMディスク・グループ名の後ろに(DATAFILE)と記述させて頂いています。これはASMテンプレートと呼ばれるものです。

従来のファイル・システム上にデータファイルを作成しようとした場合、例えば下記の例のようにデータファイル名を含めたフルパスを記述していた方がほとんどだと思いますが、ASMテンプレートを指定する方が大分楽になった感はありますよね。

SQL>
create tablespace TBS30 datafile '/u01/app/oracle/oradata/orcl/tbs03.dbf' size 100m ;

このASMテンプレートはユーザーが「ALTER DISKGROUP <ASMディスク・グループ名> ADD TEMPLATE文」で追加することも出来ますが、基本的にはデフォルトで用 意されているもので充分だと私は思っています。実際に、どのようなASMテンプレートが存在しているのかはV$ASM_TEMPLATEビューで確認することが出来ますので、興味のある方は問合せ てみると良いでしょう。

とは言え、ASMテンプレートを指定した場合に、実際にどんな名前でどんなパスにデータファイルが作成されているのかが非常に気になりますよね。と言う事で、次の演習5にチャレンジしてみてください。

5. 演習4で作成した表領域「TBS30」のデータファイル名とそのサイズを確認して下さい。

[oracle@vm11204]$ sqlplus / as sysdba
SQL> set linesize 150
col FILE_NAME for a48
select FILE_NAME, BYTES/1024/1024
  from DBA_DATA_FILES
 where TABLESPACE_NAME = 'TBS30' ;

FILE_NAME                                        BYTES/1024/1024
------------------------------------------------ ---------------
+DG_NORMAL/orcl/datafile/tbs30.256.849218571                 100

はい、ちょっと一安心な感じの演習ですね。

ASMテンプレートを指定して作成した表領域TBS30のデータファイルは、上記回答例のようなパスで作成されていることを確認することが出来たでしょう。ASMディスク・グループの直下に「orcl (=DB_UNIQUE_NAME初期化パラメータの設定値)」というディレクトリが作成されて、さらに「datafile」ディレクトリの下に、先頭が「表領域名」となるデータファイルが作成されています。

今回は指定したASMテンプレートが「DATAFILE」だったので、「datafile」ディレクトリ配下に作成されています。

6. 演習4で100MBの表領域「TBS30」を作成したことにより、ASMディスクグループ「DG_NORMAL」の使用量や空き容量がどのように変化したのかを確認して下さい。

[grid@vm11204]$ sqlplus / as sysasm
SQL>
set lines 110 pages 500
col NAME for a10
col STATE for a10
col TYPE for a8
col COMPATIBILITY for a15
col DATABASE_COMPATIBILITY for a15
select * from V$ASM_DISKGROUP where NAME = 'DG_NORMAL' ;

GROUP_NUMBER NAME       SECTOR_SIZE BLOCK_SIZE ALLOCATION_UNIT_SIZE STATE      TYPE       TOTAL_MB    FREE_MB
------------ ---------- ----------- ---------- -------------------- ---------- -------- ---------- ----------
HOT_USED_MB COLD_USED_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB OFFLINE_DISKS COMPATIBILITY   DATABASE_COMPAT
----------- ------------ ----------------------- -------------- ------------- --------------- ---------------
           3 DG_NORMAL          512       4096              1048576 MOUNTED    NORMAL         4000       3613
          0          387                    1000           1306             0 11.2.0.2.0      11.2.0.0.0

100MBの表領域を作成した後、演習3の解説後半でご紹介したV$ASM_DISKGROUPビューに対する問合せを再実行しています。

どのように変化しているのかと言うと、空き容量(FREE_MB)が226MB(=3839 - 3613)減少し、使用量(HOT_USED_MB+COLD_USED_MB)が226MB(=387 - 161)増加していることが簡単に確認できると思います。

ここで気付いて頂きたい点は、100MBの表領域を作成して約200MBの使用量が増加している点です。これは何故でしょう?ピンときましたよね。ASMディスク・グループ「DATA_NORMAL」は標準冗長化(NORMAL Redundancy)ですから、デフォルトで2重ミラー化されています。よって、データベース側から100MBのデータファイル(=ASM側から見た場合には、ASMファイルと呼ぶ)を作成すると、ASMディスク・グループ上では2倍の200MBが使用されることになるのですね。

私は「ちなみに」と言うのが大好きなので、ここでもちなみにですが、上記のV$ASM_DISKGROUPビューに対するSQL文を毎度書くのが面倒です。と言う方の為に、ASMCMDユーティリティの「lsdg」コマンドをご紹介しておきますね。各列の意味については、もう少し前提知識が必要となりますので、次回以降で解説したいと思います。

[grid@vm11204]$ env | grep ORACLE_SID
+ASM

[grid@vm11204]$ which asmcmd
/u01/app/grid/product/11.2.0/grid_1/bin/asmcmd

[grid@vm11204]$ asmcmd lsdg DG_NORMAL

State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  
MOUNTED  NORMAL  N         512   4096  1048576      4000     3839             1000            1419              0 

※出力結果の列は表示の都合上、一部カット

7. ASMディスクグループ「DG_NORMAL」を削除して下さい。

[grid@vm11204]$ sqlplus / as sysasm
SQL> drop diskgroup DG_NORMAL ;

ERROR at line 1:
ORA-15039: diskgroup not dropped
ORA-15053: diskgroup "DG_NORMAL" contains existing files


[oracle@vm11204]$ sqlplus / as sysdba
SQL> drop tablespace TBS30 ;

Tablespace dropped.


[grid@vm11204]$ sqlplus / as sysasm
SQL> drop diskgroup DG_NORMAL ;

Diskgroup dropped.

一度失敗しておけば、以降は失敗しなくなるでしょう。と思い、少し乱暴な演習問題文としてみました。上記の回答例のように、「DROP DISKGROUP」文を実行してORAエラーが発生してしまった方は、非常に素直な方だと思います。ありがとうございます。

何故、ORAエラーが発生しているのかと言えば、ORA-15053のエラーメッセージからも一目瞭然です。削除しようとしたASMディスク・グループ「DG_NORMAL」上に何かしらのASMファイルが存在していたから。つまり、それは我々が演習4で作成した表領域TBS30のデータファイルですね。よって、表領域TBS30を削除すれば、ASMディスク・グループを削除することが可能となります。

またまたちなみにですが、ファイル・システム上にデータファイルを作成した場合、「DROP TABLESPACE」文では「INCLUDING CONTENTS AND DATAFILES」オプションを付けなければ、データファイルは残ったままだったのを覚えているでしょうか?ASM環境上のデータファイルは、このオプションを付けなくても消えてしまう事に注意して下さい。もしも、表領域は消すけど、確実にデータファイルを残しておきたい場合は、「DROP TABLESPACE」文に「INCLUDING CONTENTS KEEP DATAFILES」オプションを付けるクセを付けておきましょう。

8. 同じASMディスクを使用して、高冗長性のASMディスクグループ「DG_HIGH」を作成して下さい。

[grid@vm11204 ~]$ sqlplus / as sysasm
SQL> 
create diskgroup DG_HIGH
  high redundancy
    disk '/dev/sdj1', '/dev/sdk1', '/dev/sdl1', '/dev/sdm1'
  attribute
    'COMPATIBLE.ASM'   = '11.2.0.2',
    'COMPATIBLE.RDBMS' = '11.2' ;

サクッと実行できましたか?今回は、「高冗長性」のASMディスク・グループなので、CREATE DISKGROUP文において「HIGH REDUNDANCY」オプションを指定すれば良いだけですね。

演習3での回答例からは色々と省略していますが、私が特に省略することをお勧めする句としては「SIZE」です。演習3では各ASMディスクのSIZEを1000mと指定していましたが、指定し無い場合には自動的にASMディスクで確保できる最大サイズ(上限有り)となります。実際に、ASMディスク・グループのTOTAL_MBを確認して頂ければ、皆さんもSIZEの省略はご納得頂けるでしょう。

[grid@vm11204]$ sqlplus / as sysasm
SQL>
set lines 110 pages 500
col NAME for a10
col STATE for a10
col TYPE for a8
col COMPATIBILITY for a15
col DATABASE_COMPATIBILITY for a15
select * from V$ASM_DISKGROUP where NAME = 'DG_HIGH' ;

GROUP_NUMBER NAME       SECTOR_SIZE BLOCK_SIZE ALLOCATION_UNIT_SIZE STATE      TYPE       TOTAL_MB    FREE_MB
------------ ---------- ----------- ---------- -------------------- ---------- -------- ---------- ----------
HOT_USED_MB COLD_USED_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB OFFLINE_DISKS COMPATIBILITY   DATABASE_COMPAT
----------- ------------ ----------------------- -------------- ------------- --------------- ---------------
           3 DG_HIGH            512       4096              1048576 MOUNTED    HIGH           4076       3915
          0          161                    2038            625             0 11.2.0.2.0      11.2.0.0.0

9. 演習8で作成したASMディスク・グループ「DG_HIGH」において演習4~6を実行し、使用量が空き容量の変化を確認して下さい。

[oracle@vm11204]$ sqlplus / as sysdba
SQL> create tablespace TBS30 datafile '+DG_HIGH(DATAFILE)' size 100m ;

set linesize 150
col FILE_NAME for a48
select FILE_NAME, BYTES/1024/1024
  from DBA_DATA_FILES
 where TABLESPACE_NAME = 'TBS30' ;

FILE_NAME                                        BYTES/1024/1024
------------------------------------------------ ---------------
+DG_HIGH/orcl/datafile/tbs30.256.849219053                   100


[grid@vm11204]$ sqlplus / as sysasm
SQL>
set lines 110 pages 500
col NAME for a10
col STATE for a10
col TYPE for a8
col COMPATIBILITY for a15
col DATABASE_COMPATIBILITY for a15
select * from V$ASM_DISKGROUP where NAME = 'DG_HIGH' ;

GROUP_NUMBER NAME       SECTOR_SIZE BLOCK_SIZE ALLOCATION_UNIT_SIZE STATE      TYPE       TOTAL_MB    FREE_MB
------------ ---------- ----------- ---------- -------------------- ---------- -------- ---------- ----------
HOT_USED_MB COLD_USED_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB OFFLINE_DISKS COMPATIBILITY   DATABASE_COMPAT
----------- ------------ ----------------------- -------------- ------------- --------------- ---------------
           3 DG_HIGH            512       4096              1048576 MOUNTED    HIGH           4076       3588
          0          488                    2038            516             0 11.2.0.2.0      11.2.0.0.0

はい、最後は復習問題となりましたね。

さて、高冗長性のASMディスク・グループ上に100MBのデータファイルを作成した訳ですが、使用量はおよそ何MBになっていると予想できますか?そうですよね。きっと3倍の約300MBを消費していると予想できますよね。実際に、演習8でASMディスク・グループを作成した直後のV$ASM_DISKGROUPビューへの問合せ結果と比較してみると、空き容量(FREE_MB)が327MB(=3915-3588)、使用量(HOT_USED_MB+COLD_USED_MB)が327MB(=488 - 161)増加しているので、推測通りでしたね!

さて、いかがでしたでしょうか?

仮想化環境を使用してOracle Automatic Storage Managementの基本中の基本である、ASMディスク・グループの作成と使用量の確認方法を体験して頂きましたが、特に、ASMディスクとは?とかASMディスク・グループとは?と、細かく解説しなくとも、実際に触ってみることで、その名称が指すものの実体や関係性がイメージ出来たのではないかと思います。そして、意外にも簡単に操作できそうな感触を得て頂けたのであれば、連載でご紹介した甲斐があったというものです。

既にASMを良く使用されている方にとっては、あまり面白みの無い内容だったかもしれませんが、次回以降は、ASMのストライピングやリバランス、リバランスの内部挙動等を公開可能な限りご紹介していく予定ですので、是非とも体験に参加して頂けると嬉しい限りです。また、Oracle DBA & Developer Day2012において、私が講演させて頂いたセッション「高可用性システムに適した管理性と性能を向上させる ASM と RMANの魅力」のリンクが本ページの冒頭に掲載してありますので、今すぐ深くASMを理解したい方はそちらを参照して頂ければ参考になるかと思います。

今回も最後まで体験して頂きましてありがとうございました。次回以降もどうぞよろしくお願い致します。

しばちょう先生の試して納得!DBAへの道 indexページ▶▶