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.