ASMフレックスディスクグループあれこれ

いつの頃からかASMディスクグループの種類に「フレックス」とかいう謎の冗長性属性が選択できるようになっている。

これはいったい何なんだ、ということで少しいじって遊んでみている。

参考:Oracle ASMフレックス・ディスク・グループの管理

先に感想を述べておくが、やむを得ない事情がない限りは利用すべきではないだろう。同じディスクグループ内に冗長度が違うファイルが混在するということは障害発生時の状況把握を困難なものにし、運用を著しく難しいものにすることは明らか。もちろん構成を完璧に把握している優秀なDBAが存在するのであればよいが、そうでない現場が多い中でこの機能を使うのはリスクが高い。

フレックスディスクグループとは何なのか

ざっくり言えば、一つのディスクグループの中でデータベース毎に別々の冗長性設定を行ったり、使用可能なディスク容量を制限したりできるようにした冗長性属性のこと。複数のデータベースをASMディスクグループ上に作成する際、データベース毎に別々の冗長性を持たせたいというようなケースで、データベース毎にディスクグループを作るのではなく単一のディスクグループで運用できるようになる。

普通のディスクグループとの違い

構成する要素として大きく違うのがファイルグループと割り当て制限グループの存在。冗長性の設定はファイルグループに対して行い、クォータ制限は割り当て制限グループに対して行う。

フレックスディスクグループを作成すると、デフォルトで「GENERIC」という割り当て制限グループに、「DEFAULT_FILEGROUP」というファイルグループが作成される。さらに、DBCAでフレックスディスクグループ上にデータベースを作成すると、データベース名と同じ名前のファイルグループが自動的に作成され、データファイルなどはすべてそのファイルグループに紐づけられることになる。

このあたりの関係性は、EMで確認するとビジュアル的にわかりやすい。以下はFLXというディスクグループに「TEST」という名前のデータベースを作成した際に作成されたファイルグループの情報を表示したもの。

デフォルトの「GENERIC」割り当て制限グループに、「TEST」というファイルグループがぶら下がっていて、そこにデータファイルや制御ファイルが紐づいていることがわかる。冗長性の設定はREDOログ、バックアップセット、制御ファイルといったくくりで個別に行うことも可能な様子。

ちなみに、このディスクグループは以下の通り5つの障害グループで構成されているが、何も考えずに作成すると制御ファイル以外は「ミラー」という冗長性が設定されており、標準冗長性相当になる模様。

ファイルグループや割り当て制限グループの情報は、asmcmdコマンドで以下のように確認することもできる。

[grid@physrac1 ~]$ asmcmd lsfg
File Group         Disk Group  Quota Group  Used Quota MB  Client Name  Client Type  
DEFAULT_FILEGROUP  FLX         GENERIC      0                                        
TEST               FLX         GENERIC      7336           TEST         DATABASE     

[grid@physrac1 ~]$ asmcmd lsqg
Group_Num  Quotagroup_Num  Quotagroup_Name  Incarnation  Used_Quota_MB  Quota_Limit_MB  
4          1               GENERIC          1            7336           0                     

また、v$asm_filegroup_property からファイルタイプごとの冗長性の設定などが確認可能。

SQL> set lin 1000
SQL> set pages 1000
SQL> col name for a20
SQL> col client_name for a10
SQL> col file_type for a30
SQL> col value for a20
SQL> select af.name, af.client_name, file_type, afp.name, value 
  2  from v$asm_filegroup_property afp inner join v$asm_filegroup af 
  3  on afp.group_number = af.group_number and afp.filegroup_number = af.filegroup_number
  4  where af.name='TEST' and afp.name='REDUNDANCY' 
  5  order by afp.group_number, afp.filegroup_number;

NAME                 CLIENT_NAM FILE_TYPE                      NAME                 VALUE
-------------------- ---------- ------------------------------ -------------------- --------------------
TEST                 TEST       CONTROLFILE                    REDUNDANCY           HIGH
TEST                 TEST       CONTAINER                      REDUNDANCY           MIRROR
TEST                 TEST       KEY_STORE                      REDUNDANCY           MIRROR
TEST                 TEST       INCR XTRANSPORT BACKUPSET      REDUNDANCY           MIRROR
TEST                 TEST       AUDIT_SPILLFILES               REDUNDANCY           MIRROR
TEST                 TEST       XTRANSPORT BACKUPSET           REDUNDANCY           MIRROR
TEST                 TEST       FLASHFILE                      REDUNDANCY           MIRROR
TEST                 TEST       OCRBACKUP                      REDUNDANCY           MIRROR
TEST                 TEST       ASMVDRL                        REDUNDANCY           MIRROR
TEST                 TEST       ASMVOL                         REDUNDANCY           MIRROR
TEST                 TEST       OCRFILE                        REDUNDANCY           MIRROR
TEST                 TEST       VOTINGFILE                     REDUNDANCY           MIRROR
TEST                 TEST       AUTOBACKUP                     REDUNDANCY           MIRROR
TEST                 TEST       DUMPSET                        REDUNDANCY           MIRROR
TEST                 TEST       FLASHBACK                      REDUNDANCY           MIRROR
TEST                 TEST       CHANGETRACKING                 REDUNDANCY           MIRROR
TEST                 TEST       DATAGUARDCONFIG                REDUNDANCY           MIRROR
TEST                 TEST       PARAMETERFILE                  REDUNDANCY           MIRROR
TEST                 TEST       BACKUPSET                      REDUNDANCY           MIRROR
TEST                 TEST       TEMPFILE                       REDUNDANCY           MIRROR
TEST                 TEST       ARCHIVELOG                     REDUNDANCY           MIRROR
TEST                 TEST       ONLINELOG                      REDUNDANCY           MIRROR
TEST                 TEST       DATAFILE                       REDUNDANCY           MIRROR
TEST                 TEST       AUTOLOGIN_KEY_STORE            REDUNDANCY           MIRROR

24 rows selected.

冗長性の変更

ファイルグループ全体の冗長性を変更する場合はASMインスタンスに接続して以下のように行える。

SQL> ALTER DISKGROUP FLX MODIFY FILEGROUP TEST SET 'REDUNDANCY' = 'HIGH';

Diskgroup altered.

SQL> select af.name, af.client_name, file_type, afp.name, value 
  2  from v$asm_filegroup_property afp inner join v$asm_filegroup af 
  3  on afp.group_number = af.group_number and afp.filegroup_number = af.filegroup_number
  4  where af.name='TEST' and afp.name='REDUNDANCY' 
  5  order by afp.group_number, afp.filegroup_number;

NAME                 CLIENT_NAM FILE_TYPE                      NAME                 VALUE
-------------------- ---------- ------------------------------ -------------------- --------------------
TEST                 TEST       CONTROLFILE                    REDUNDANCY           HIGH
TEST                 TEST       CONTAINER                      REDUNDANCY           HIGH
TEST                 TEST       KEY_STORE                      REDUNDANCY           HIGH
TEST                 TEST       INCR XTRANSPORT BACKUPSET      REDUNDANCY           HIGH
TEST                 TEST       AUDIT_SPILLFILES               REDUNDANCY           HIGH
TEST                 TEST       XTRANSPORT BACKUPSET           REDUNDANCY           HIGH
TEST                 TEST       FLASHFILE                      REDUNDANCY           HIGH
TEST                 TEST       OCRBACKUP                      REDUNDANCY           HIGH
TEST                 TEST       ASMVDRL                        REDUNDANCY           HIGH
TEST                 TEST       ASMVOL                         REDUNDANCY           HIGH
TEST                 TEST       OCRFILE                        REDUNDANCY           HIGH
TEST                 TEST       VOTINGFILE                     REDUNDANCY           HIGH
TEST                 TEST       AUTOBACKUP                     REDUNDANCY           HIGH
TEST                 TEST       DUMPSET                        REDUNDANCY           HIGH
TEST                 TEST       FLASHBACK                      REDUNDANCY           HIGH
TEST                 TEST       CHANGETRACKING                 REDUNDANCY           HIGH
TEST                 TEST       DATAGUARDCONFIG                REDUNDANCY           HIGH
TEST                 TEST       PARAMETERFILE                  REDUNDANCY           HIGH
TEST                 TEST       BACKUPSET                      REDUNDANCY           HIGH
TEST                 TEST       TEMPFILE                       REDUNDANCY           HIGH
TEST                 TEST       ARCHIVELOG                     REDUNDANCY           HIGH
TEST                 TEST       ONLINELOG                      REDUNDANCY           HIGH
TEST                 TEST       DATAFILE                       REDUNDANCY           HIGH
TEST                 TEST       AUTOLOGIN_KEY_STORE            REDUNDANCY           HIGH

24 rows selected.

属性変更後は自動的にリバランスが走り、物理的にも冗長度を変える動きが発生していることがわかる。

SQL> select * from v$asm_operation;                            

GROUP_NUMBER OPERATION       PASS                        STATE             POWER     ACTUAL      SOFAR   EST_WORK   EST_RATE EST_MINUTES ERROR_CODE     CON_ID
------------ --------------- --------------------------- ------------ ---------- ---------- ---------- ---------- ---------- ----------- ---------- ----------
           4 REBAL           COMPACT                     WAIT                  1          1          0          0          0           0                     0
           4 REBAL           PREPARE                     WAIT                  1                                                                             0
           4 REBAL           REBALANCE                   RUN                   1          1        534        951       8748           0                     0
           4 REBAL           REBUILD                     DONE                  1          1          0          0          0           0                     0
           4 REBAL           RESYNC                      DONE                  1          1          0          0          0           0                     0

事前にファイルグループを作る

データベース作成時に自動的にデータベース名と同じ名前でファイルグループが作られるが、事前に冗長性設定などを実施済みのファイルグループを作ることも可能。クライアント名にデータベース名を指定すればよい。

例えば、「TEST」という名前のデータベース用に「HIGH_FG」という名前のファイルグループを作り、冗長性を変更する設定も併せて行うなら以下のようになる。

SQL> ALTER DISKGROUP FLX ADD FILEGROUP HIGH_FG DATABASE TEST;
SQL> ALTER DISKGROUP FLX MODIFY FILEGROUP HIGH_FG SET 'REDUNDANCY'='HIGH';

この後、DBCAでデータベースを対象のフレックスディスクグループ上に作成すると、自動的に「HIGH_FG」というファイルグループにデータファイルなどが紐づく。

コメント