ASM を味わう ~ ASM と OMF ~ その2

投稿日: 2005年8月10日

<ASM を味わう ~ ASM と OMF ~ その2>
ペンネーム:ダーリン

先週に引き続き Oracle 10g の新機能である ASM の検証を行います。

さて、先週はまず ASM を利用するように設定した Oracle 10g データベース
のインスタンスを起動しました。さらに ASM を使ってテスト用の表領域を作
成してみました。

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

さて、先週、データファイルを指定して表領域を作成しようとしてエラーを
起こしてしまいました。

——— 先週のエラー ———–

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.

———————————-

じつは、エラーメッセージを見るとわかるのですが、これは ASM のエラーと
いうより、Oracle Managed File(OMF) のエラーではじかれた様にみえます。
OMF を有効にし、表領域作成時にファイル名を明示的に指定しない場合、デ
フォルトで所定のディレクトリにデータファイルを作成することができます。
所定のディレクトリとは、先週ちらと出てきた、下記の初期化パラメータに
指定されているディレクトリのことです。これを設定しておくと OMF が有効
になります。

SQL> show parameter db_create_file_dest

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

初期化パラメータ “DB_CREATE_FILE_DEST” の初期値は”なし”です。しかし、
今回は上記の様に ASM の DISK Group が設定されていました。ということは、
ASM で構成すると OUI が自動的にこのパラメータを設定するようです。

OMF を使っているということがわかれば、データファイルのサイズを設定する
ことについても何の問題もないですね。普通に設定できそうです。
では、、

SQL> create tablespace test001 datafile size 20m uniform size 1m segment space management auto;

Tablespace created.

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

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

6 rows selected.

SQL> select initial_extent,next_extent,allocation_type,segment_space_management
  2  from dba_tablespaces where tablespace_name = 'TEST001';

INITIAL_EXTENT NEXT_EXTENT ALLOCATIO SEGMEN
-------------- ----------- --------- ------
       1048576     1048576 UNIFORM   AUTO

なるほど、特に普通の表領域を作成する場合と大きな違いはなさそうです。

ところで、ASM を使う場合 OMF は必須なのでしょうか。
初期化パラメータ “DB_CREATE_FILE_DEST” をはずしてみましょう。

[/sql]
SQL> show parameter db_create_file_dest

NAME TYPE VALUE
——————– ———– ————
db_create_file_dest string +DATA

SQL> alter system set db_create_file_dest = ” scope=memory;

System altered.

SQL> show parameter db_create_file_dest

NAME TYPE VALUE
——————– ———– ————
db_create_file_dest string

SQL> create tablespace test002 datafile size 20m autoextend off
2 uniform size 1m segment space management auto;
create tablespace test002 datafile size 20m autoextend off
*
ERROR at line 1:
ORA-02236: invalid file name

[/sql]

おっと、確かにデータファイルを作成する場所がわからない。
では、ASM の DISK Group を指定して、、

SQL> create tablespace test002 datafile '+DATA' size 20m autoextend off
  2  uniform size 1m segment space management auto;

Tablespace created.

特に問題ないようだ。じゃ、ついでに表領域を削除してみよう。

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

FILE_NAME                                TABLESPACE_NAME     MBYTES
---------------------------------------- --------------- ----------
+DATA/ora101/datafile/users.259.1        USERS                    5
+DATA/ora101/datafile/sysaux.257.1       SYSAUX                 230
+DATA/ora101/datafile/undotbs1.258.1     UNDOTBS1                25
+DATA/ora101/datafile/system.256.1       SYSTEM                 440
+DATA/ora101/datafile/test.270.1         TEST                   100
+DATA/ora101/datafile/test001.275.3      TEST001                 20
+DATA/ora101/datafile/test002.274.3      TEST002                 20

7 rows selected.

SQL> drop tablespace test002;

Tablespace dropped.


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

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

6 rows selected.

あっさりと削除できました。別に OMF である必要もないのではなかろうか。

ところで、OMF といえば、表領域削除の際にオプションを指定しなくてもデー
タファイルを削除するはずだ。ASM の場合、ファイルの扱いはどうなるのだろう。
そもそも、ASM でファイルはどのように識別されているのでしょう。

そういえば、ASM 関連の情報が得られる新しい動的パフォーマンスビューがい
くつか増えています。これを見てみましょう。

SQL> select * from v$asm_alias;

no rows selected

SQL> select * from v$asm_file;

no rows selected

あれれ???
これは困った。

夏はバイクに限る 茅ヶ崎にて