ASM: Disk Group com Flex Redundancy (Parte I)

Por Franky weber Faust Oracle ACE
Publicado em Março 2018

Revisado por Lorenzo Mota


Objetivo: apresentar como criar um disk group com um dos novos recursos do Oracle ASM na versão 12.2.0.1, o Flex Redundancy ou Flex Disk Group.

Este novo tipo de redundância do Disk Group no ASM nos permite isolar bancos de dados em níveis de redundância diferentes. Por exemplo, o PROD_PDB terá High Redundancy, enquanto o HML_PDB e o DEV_PDB terão Normal Redundancy.

Isso se torna interessante quando a criticidade dos dados tem níveis diferentes de prioridade e quando queremos, por exemplo, economizar um pouco de espaço para os bancos de dados de desenvolvimento definindo um tipo inferior de redundância. No modelo anterior seria necessário dois disk groups para manter níveis diferentes de redundância. Outro ponto bastante interessante é a definição de cotas por banco de dados, sendo assim ocorre um isolamento dentro do disk group, portanto um banco de dados com cota de 100GB jamais ocupará todo o espaço de um disk group de 500GB.

Como era até então:





Como é agora com Flex Redundancy:




Vamos ao passo-a-passo…

Inicialmente eu apresento novos discos ao ASM utilizando o Filter Driver

[root@london1 ~]# . oraenv
ORACLE_SID = [root] ? +ASM1
The Oracle base has been set to /u01/app/oracle
 
[root@london1 ~]# asmcmd
 
ASMCMD> afd_label FLEX01 /dev/sdg
ASMCMD> afd_label FLEX02 /dev/sdh
ASMCMD> afd_label FLEX03 /dev/sdi
ASMCMD> afd_label FLEX04 /dev/sdj
ASMCMD> afd_label FLEX05 /dev/sdk



Listamos os discos para verificar os recém adicionados:

ASMCMD> afd_lslbl
--------------------------------------------------------------------------------
Label                     Duplicate  Path
================================================================================
CONFIG01                              /dev/sdb
CONFIG02                              /dev/sdc
CONFIG03                              /dev/sdd
CONFIG04                              /dev/sde
DATA01                                /dev/sdf
FLEX01                                /dev/sdg
FLEX02                                /dev/sdh
FLEX03                                /dev/sdi
FLEX04                                /dev/sdj
FLEX05                                /dev/sdk
 
ASMCMD> exit




Ao sair do ASMCMD alterne sua sessão para o usuário oracle e defina novamente as variáveis de ambiente apontando para a instância +ASM1 e acesse o SQL*Plus:

[root@london1 ~]# su - oracle
Last login: Mon Jul 31 23:22:56 BRT 2017
[oracle@london1 ~]$ . oraenv
ORACLE_SID = [orcl1] ? +ASM1
The Oracle base remains unchanged with value /u01/app/oracle
[oracle@london1 ~]$ sqlplus / as sysasm
 
SQL*Plus: Release 12.2.0.1.0 Production on Mon Jul 31 23:23:24 2017
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production



Feito isso, vamos criar um novo disk group com estes discos:

SQL> create diskgroup FLEX flex redundancy disk 'AFD:FLEX01', 'AFD:FLEX02', 'AFD:FLEX03';
 
Diskgroup created.



Para utilizar a redundância Flex é necessário no mínimo 3 Failure Groups, portanto 3 discos.

Observe que no comando de criação não informei nenhum Failure Group, mas por padrão o ASM cria um para cada um dos discos. Vejamos:

SQL> select group_number, name, path, label, state, mount_status, header_status, 
total_mb, free_mb, library, failgroup, voting_file from v$asm_disk;
 
GROUP_NUMBER NAME       PATH            LABEL      STATE    MOUNT_S HEADER_STATU   TOTAL_MB    
------------ ---------- --------------- ---------- -------- ------- ------------ ---------- 
       0                AFD:FLEX04      FLEX04     NORMAL   CLOSED  PROVISIONED           0  
       0                AFD:FLEX05      FLEX05     NORMAL   CLOSED  PROVISIONED           0  
       1     CONFIG01   AFD:CONFIG01    CONFIG01   NORMAL   CACHED  MEMBER            10240 
       1     CONFIG02   AFD:CONFIG02    CONFIG02   NORMAL   CACHED  MEMBER            10240 
       1     CONFIG03   AFD:CONFIG03    CONFIG03   NORMAL   CACHED  MEMBER            10240 
       1     CONFIG04   AFD:CONFIG04    CONFIG04   NORMAL   CACHED  MEMBER            10240  
       2     DATA01     AFD:DATA01      DATA01     NORMAL   CACHED  MEMBER            12288  
       3     FLEX01     AFD:FLEX01      FLEX01     NORMAL   CACHED  MEMBER             1024  
       3     FLEX02     AFD:FLEX02      FLEX02     NORMAL   CACHED  MEMBER             1024  
       3     FLEX03     AFD:FLEX03      FLEX03     NORMAL   CACHED  MEMBER             1024  

FREE_MB LIBRARY                                                    FAILGROUP                  V
------- ---------------------------------------------------------- -------------------------- -
      0 AFD Library - Generic , version 3 (KABI_V3)                                           N
      0 AFD Library - Generic , version 3 (KABI_V3)                                           N
   1724 AFD Library - Generic , version 3 (KABI_V3)                CONFIG01                   N
   1696 AFD Library - Generic , version 3 (KABI_V3)                CONFIG02                   Y
   1732 AFD Library - Generic , version 3 (KABI_V3)                CONFIG03                   N
   1716 AFD Library - Generic , version 3 (KABI_V3)                CONFIG04                   N
   8160 AFD Library - Generic , version 3 (KABI_V3)                DATA01                     N
    920 AFD Library - Generic , version 3 (KABI_V3)                FLEX01                     N
    920 AFD Library - Generic , version 3 (KABI_V3)                FLEX02                     N
    920 AFD Library - Generic , version 3 (KABI_V3)                FLEX03                     N
       
10 rows selected.



E o Disk Group ficou assim:

SQL> select GROUP_NUMBER, NAME, STATE, TYPE, TOTAL_MB, FREE_MB, 
REQUIRED_MIRROR_FREE_MB, USABLE_FILE_MB from v$asm_diskgroup;
 
GROUP_NUMBER NAME     STATE       TYPE     TOTAL_MB    FREE_MB
------------ -------- ----------- ------ ---------- ---------- 
           1 CONFIG   MOUNTED     EXTERN      40960       6868  
           2 DATA     MOUNTED     EXTERN      12288       8160 
           3 FLEX     MOUNTED     FLEX         3072       2760  

REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
----------------------- --------------
                      0           6868
                      0           8160
                      0              0

3 rows selected.



Vamos excluir o Disk Group para criá-lo novamente:

SQL> drop diskgroup FLEX;
 
Diskgroup dropped.




Veja que ao tentar criar com 4 discos, mas apenas 2 Failure Groups ocorre o erro:

SQL> create diskgroup FLEX flex redundancy
  2  failgroup FG_A disk 'AFD:FLEX01', 'AFD:FLEX03'
  3  failgroup FG_B disk 'AFD:FLEX02', 'AFD:FLEX04';
create diskgroup FLEX flex redundancy
*
ERROR at line 1:
ORA-15018: diskgroup cannot be created
ORA-15167: command requires at least 3 failure groups; found only 2



Então incluímos os 3 discos e criamos novamente especificando o path de cada disco e também seus respectivos Failure Groups:

SQL> create diskgroup FLEX flex redundancy
  2  failgroup FG_A disk 'AFD:FLEX01'
  3  failgroup FG_B disk 'AFD:FLEX02'
  4  failgroup FG_C disk 'AFD:FLEX03';
 
Diskgroup created.



Como temos 5 discos vamos utilizar os 2 restantes e adicioná-los em Failure Groups separados:

SQL> alter diskgroup FLEX add
  2  failgroup FG_D disk 'AFD:FLEX04'
  3  failgroup FG_E disk 'AFD:FLEX05';
 
Diskgroup altered.



Listamos os discos novamente para ver como ficou depois de utilizarmos todos eles:

SQL> select group_number, name, path, label, state, mount_status, header_status, total_mb, 
free_mb, library, failgroup, voting_file from v$asm_disk;
 
GROUP_NUMBER NAME       PATH            LABEL      STATE    MOUNT_S HEADER_STATU   TOTAL_MB
------------ ---------- --------------- ---------- -------- ------- ------------ ---------- 
           1 CONFIG01   AFD:CONFIG01    CONFIG01   NORMAL   CACHED  MEMBER            10240  
           1 CONFIG02   AFD:CONFIG02    CONFIG02   NORMAL   CACHED  MEMBER            10240 
           1 CONFIG03   AFD:CONFIG03    CONFIG03   NORMAL   CACHED  MEMBER            10240
           1 CONFIG04   AFD:CONFIG04    CONFIG04   NORMAL   CACHED  MEMBER            10240 
           2 DATA01     AFD:DATA01      DATA01     NORMAL   CACHED  MEMBER            12288 
           3 FLEX01     AFD:FLEX01      FLEX01     NORMAL   CACHED  MEMBER             1024  
           3 FLEX02     AFD:FLEX02      FLEX02     NORMAL   CACHED  MEMBER             1024  
           3 FLEX03     AFD:FLEX03      FLEX03     NORMAL   CACHED  MEMBER             1024   
           3 FLEX04     AFD:FLEX04      FLEX04     NORMAL   CACHED  MEMBER             1024  
           3 FLEX05     AFD:FLEX05      FLEX05     NORMAL   CACHED  MEMBER             1024  
 

    FREE_MB LIBRARY                                                   FAILGROUP               V
----------- --------------- ---------- -------- ------- ------------  ---------- ------------ -
       1724 AFD Library - Generic , version 3 (KABI_V3)               CONFIG01                N
       1696 AFD Library - Generic , version 3 (KABI_V3)               CONFIG02                Y
       1732 AFD Library - Generic , version 3 (KABI_V3)               CONFIG03                N
       1716 AFD Library - Generic , version 3 (KABI_V3)               CONFIG04                N
       8160 AFD Library - Generic , version 3 (KABI_V3)               DATA01                  N
        952 AFD Library - Generic , version 3 (KABI_V3)               FG_A                    N
        948 AFD Library - Generic , version 3 (KABI_V3)               FG_B                    N
        956 AFD Library - Generic , version 3 (KABI_V3)               FG_C                    N
        952 AFD Library - Generic , version 3 (KABI_V3)               FG_D                    N
        952 AFD Library - Generic , version 3 (KABI_V3)               FG_E                    N
 
10 rows selected.




Por fim verificamos como ficou a distribuição do espaço nos Disk Groups:

SQL> select GROUP_NUMBER, NAME, STATE, TYPE, TOTAL_MB, FREE_MB, 
REQUIRED_MIRROR_FREE_MB, USABLE_FILE_MB from v$asm_diskgroup;
 
GROUP_NUMBER NAME       STATE       TYPE   TOTAL_MB   FREE_MB    
------------ ---------- ----------- ------ ---------- ----------
           1 CONFIG     MOUNTED     EXTERN      40960       6868  
           2 DATA       MOUNTED     EXTERN      12288       8160 
           3 FLEX       MOUNTED     FLEX         5120       4760  

 REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
 ----------------------- --------------
                       0           6868
                       0           8160
                       0              0

 
3 rows selected.



Aqui vimos como criar um Flex Disk Group. No próximo artigo veremos como utilizar esse Flex Disk Group.




Franky Weber Faust atua como administrador de banco de dados Oracle e MySQL no PagSeguro, tem 26 anos, é graduado em Tecnologia em Bancos de Dados e iniciou sua carreira trabalhando num projeto internacional da Volkswagen com os bancos de dados DB2 da IBM, SQL Server da Microsoft e tambémcom o Oracle e desde o início direcionou seus estudos para as tecnologias Oracle. É especialista em tecnologias de Alta Disponibilidade como RAC, Dataguard e GoldenGate e compartilha seus conhecimentos no blog loredata.com.br. Possui as certificações OCE SQL, OCA 11g, OCP 12c, OCS RAC 12c e OCS Linux 6.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.