Oracle ASM - Adicionando discos a um Diskgroup com AFD
Nesse post vamos adicionar alguns discos em um ambiente Oracle Database 21.03.0.0 com AFD.
Dessa forma antes, vamos contextualizar o AFD em relação ao ASMLIB.
Oque é o Driver de Filtro Oracle ASM (ASMFD)?
O Driver de Filtro Oracle ASM (ASMFD) é um módulo do kernel introduzido para simplificar a configuração e o gerenciamento de dispositivos de disco no Oracle Automatic Storage Management (ASM). Elimina a necessidade de redistribuir dispositivos de disco após a reinicialização do sistema e garante a integridade dos dados filtrando requisições de I/O inválidas para discos ASM.
Principais Características do ASMFD:
- Gerenciamento de Disco Simplificado: O ASMFD elimina a necessidade de rebinding manual dos dispositivos de disco, simplificando a configuração do disco.
- Proteção de Dados: Rejeita solicitações de E/S que não sejam da Oracle, prevenindo escritas acidentais e corrupção de discos ASM.
- Integração com a Oracle Grid Infrastructure: O ASMFD pode ser configurado durante ou após a instalação da Oracle Grid Infrastructure.
Considerações Importantes:
- Se o ASMLIB estiver instalado, ele deve ser desinstalado antes de configurar o ASMFD. Discos anteriormente gerenciados pelo ASMLIB podem ser migrados para o ASMFD usando a opção --migrate:
- O ASMFD está disponível a partir do Oracle Database 12c Release 1 (12.1.0.2) para Linux e Solaris.
- Tabelas de partição estendidas não são suportadas pelo ASMFD.
- Certifique-se de que as strings de descoberta de disco do Oracle ASM sejam atualizadas para incluir discos gerenciados pelo ASMFD.
- O ASMFD aprimora a confiabilidade e facilidade de gerenciamento de ambientes Oracle ASM, tornando-se uma escolha preferida para gerenciamento de disco em configurações de Oracle Grid Infrastructure.
- ASMFD e o sucessor do ASMLIB.
Dessa forma, agora que esclarecemos todas as características do AFD, vamos seguir com o procedimento.
1- Nosso ambiente:
[oracle@ol8-vm1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 21.0.0.0.0 - Production on Wed Mar 25 15:28:46 2026
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup;
ORACLE instance started.
Total System Global Area 1543503024 bytes
Fixed Size 9686192 bytes
Variable Size 1073741824 bytes
Database Buffers 452984832 bytes
Redo Buffers 7090176 bytes
Database mounted.
Database opened.
SQL>
SQL>
SQL>
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB READ WRITE NO
SQL>
SQL>
SQL> alter session set container = ORCLPDB;
Session altered.
SQL>
SQL> set lines 9999
set pages 9999
SET SQLFORMAT
COL NAME HEADING "Disksgroup"
COL TYPE HEADING "Redundancy"
COL TOTAL_GB HEADING "Total GB" FORMAT 999,999,999,999
COL FREE_GB HEADING "Free GB" FORMAT 999,999,999,999
COL PERCFREE HEADING "Free %" FORMAT 999.99
SELECT NAME, TYPE, TOTAL_GB, FREE_GB, ROUND(FREE_GB/TOTAL_GB*100,2) AS PERCFREE
FROM (
SELECT NAME,
TYPE,
( TOTAL_MB / DECODE(TYPE,'HIGH',3,'NORMAL',2,1) ) / 1024 AS TOTAL_GB,
USABLE_FILE_MB/1024 AS FREE_GB
FROM V$ASM_DISKGROUP
);
SQL> SQL> SP2-0158: unknown SET option "SQLFORMAT"
SQL> SQL> SQL> SQL> SQL> SQL> SQL> 2 3 4 5 6 7 8
Disksgroup Redundancy Total GB Free GB Free %
------------------------------ ---------- ---------------- ---------------- -------
DG_ARCH EXTERN 200 120 59.80
DG_DATA EXTERN 500 41 8.16
Informações dos discos a serem adicionados - 100G cada disco.
/dev/sdl
/dev/sdm
/dev/sdn
/dev/sdo1- Particionando os discos:
Com usuário ROOT vamos validar se os discos foram apresentados corretamente ao ambiente com o comando "lsblk -f":
[root@ol8-vm1 ~]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 xfs cfd5935a-101c-4ca1-9478-018eaaa566bd /boot ├─sda2 xfs 8b84d2ce-314c-4ec4-865a-c5f161e89aaa /u01 ├─sda3 xfs bd226c71-2c8c-49d7-83db-7ebe3264af47 / ├─sda4 ├─sda5 swap 35afe57c-0d80-47bc-99ad-b6e090861bf2 [SWAP] ├─sda6 xfs 1a689c9b-a139-4bd3-bfb1-c95bd04e8ae8 /home └─sda7 xfs aea20e8a-ecda-4db4-ae54-202b7b6a40f7 /u02
sdd └─sdd1 oracleasm DATA01 <-- particionado sde └─sde1 oracleasm DATA02 <-- particionado sdf └─sdf1 oracleasm DATA03 <-- particionado sdg └─sdg1 oracleasm DATA04 <-- particionado sdh └─sdh1 oracleasm DATA05 <-- particionado sdi └─sdi1 oracleasm ARCH01 <-- particionado sdj └─sdj1 sdk └─sdk1 oracleasm ARCH02 <-- particionado
sdl -------- DISCO DISPONÍVEL sdm -------- DISCO DISPONÍVEL sdn -------- DISCO DISPONÍVEL sdo -------- DISCO DISPONÍVEL
Podemos ver acima que os nossos discos estão disponíveis para adição e são particionados.
OBS: Caso no seu ambiente os discos não sejam particionados, pule a etapa de particionamento e siga para o passo 3.
Outro comando útil para ver o label dos discos, apenas dos discos já configurados "asmcmd afd_lslbl":
Pode ser necessário configurar as variáveis do ASM para executar o comando:
. oraenv --> +ASM
[root@ol8-vm1 ~]# asmcmd afd_lslbl
-------------------------------------------------------------------------------- Label Duplicate Path ================================================================================ ARCH01 /dev/sdi1 ARCH02 /dev/sdk1 DATA01 /dev/sdd1 DATA02 /dev/sde1 DATA03 /dev/sdf1 DATA04 /dev/sdg1 DATA05 /dev/sdh1
Nesse ponto para iniciar adição, devemos particionar o disco para seguir o padrão dos discos já adicionados ao ambiente. Vamos usar o "fdisk" para realizar a atividade, abaixo vou mostrar o output de particionamento de apenas 1 disco, os demais seguiram o mesmo procedimento:
[root@ol8-vm1 ~]# fdisk /dev/sdl
Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x0285f398. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): << ENTER >> First sector (2048-209715199, default 2048): << ENTER >> Last sector, +sectors or +size{K,M,G,T,P} (2048-209715199, default 209715199): << ENTER >>
Created a new partition 1 of type 'Linux' and of size 100 GiB. Command (m for help): p Disk /dev/sdl: 100 GiB, 107374182400 bytes, 209715200 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x0285f398 Device Boot Start End Sectors Size Id Type /dev/sdl1 2048 209715199 209713152 100G 83 Linux Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. [root@ol8-vm1 ~]# partprobe
Descrição dos comandos:
1- n : Para iniciar o particionamento
2- p : Para criar uma partição primária
3- ENTER : Para manter a configuração padrão - vai particionar o disco em uma única partição
4- ENTER : Para manter a configuração padrão - Vai criar a partição com o tamanho total do disco
5- ENTER : Para manter a configuração padrão - Vai criar a partição com o tamanho total do disco
6- p : Para listar a partição criada
7- w : Para escrever e salvar a alteração
8- partprobe: Para fixar a nova partição no kernel sem necessidade de reboot do sistema
Se tudo deu certo, agora devemos ter os 4 discos particionados, usaremos novamente o comando "asmcmd afd_lslbl" para validar:
[root@ol8-vm1 ~]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 xfs cfd5935a-101c-4ca1-9478-018eaaa566bd /boot ├─sda2 xfs 8b84d2ce-314c-4ec4-865a-c5f161e89aaa /u01 ├─sda3 xfs bd226c71-2c8c-49d7-83db-7ebe3264af47 / ├─sda4 ├─sda5 swap 35afe57c-0d80-47bc-99ad-b6e090861bf2 [SWAP] ├─sda6 xfs 1a689c9b-a139-4bd3-bfb1-c95bd04e8ae8 /home └─sda7 xfs aea20e8a-ecda-4db4-ae54-202b7b6a40f7 /u02
sdd └─sdd1 oracleasm DATA01 <-- particionado sde └─sde1 oracleasm DATA02 <-- particionado sdf └─sdf1 oracleasm DATA03 <-- particionado sdg └─sdg1 oracleasm DATA04 <-- particionado sdh └─sdh1 oracleasm DATA05 <-- particionado sdi └─sdi1 oracleasm ARCH01 <-- particionado sdj └─sdj1 sdk └─sdk1 oracleasm ARCH02 <-- particionado sdl └─sdl1 -- <---------------------------------- PART CRIADA sdm └─sdm1 -- <---------------------------------- PART CRIADA sdn └─sdn1 -- <---------------------------------- PART CRIADA sdo └─sdo1 -- <---------------------------------- PART CRIADA
3- Adicionados discos a um Diskgroup:
Agora vamos configurar as variáveis do ASM e criar o label dos discos:
. oraenv --> +ASM
Como já temos discos configurados e o último label usado foi o DATA05, vamos criar a partir do DATA06:
asmcmd afd_label DATA06 /dev/sdl1 asmcmd afd_label DATA07 /dev/sdm1 asmcmd afd_label DATA08 /dev/sdn1 asmcmd afd_label DATA09 /dev/sdo1
Depois de executar os comandos acimas vamos executar o scan e listar os discos novamente:
asmcmd afd_scan asmcmd afd_lslbl
-------------------------------------------------------------------------------- Label Duplicate Path ================================================================================ ARCH01 /dev/sdi1 ARCH02 /dev/sdk1 DATA01 /dev/sdd1 DATA02 /dev/sde1 DATA03 /dev/sdf1 DATA04 /dev/sdg1 DATA05 /dev/sdh1 DATA06 /dev/sdl1 -- < ------ DISCOS APRESENTADOS DATA07 /dev/sdm1 -- < ------ DISCOS APRESENTADOS DATA08 /dev/sdn1 -- < ------ DISCOS APRESENTADOS DATA09 /dev/sdo1 -- < ------ DISCOS APRESENTADOS
Caso seja necessário desconfigurar o label de um disco ou remover use o comandos abaixo:
asmcmd afd_unlabel DATAXXX
Agora devemos adicionar os discos ao diskgroup DATA:
Faça login no ambiente com as variáveis do ASM configuradas:
sqlplus / as sysasm
Agora vamos executar uma consulta para listar os discos e espaço disponíveis:
SQL> column path format a40 set lines 9999 pages 9999 select path,os_mb,header_Status from v$asm_Disk where header_Status!='MEMBER';
PATH OS_MB HEADER_STATU ---------------------------------------- ---------- ------------ AFD:DATA08 102399 PROVISIONED AFD:DATA07 102399 PROVISIONED AFD:DATA09 102399 PROVISIONED AFD:DATA06 102399 PROVISIONED SQL>
Agora vamos adicionar os discos ao Diskgroup que desejarmos:
OBS: Aqui coloquei o rebalance com o valor de 10, para deixar a adição e a redistribuição dos dados entre os discos mais rápida, mas isso demanda mais consumo de CPU e I/O, esse valor pode ser configurado na instância através do parâmetro ASM_POWER_LIMIT, um valor muito alto pode impactar a performance do banco, dessa forma, use com sabedoria.
SQL> alter diskgroup DG_DATA add disk 'AFD:DATA06','AFD:DATA07','AFD:DATA08','AFD:DATA09' rebalance power 10; Diskgroup altered. SQL>
4- Validando operação de rebalance do disco:
Depois de adicionar os discos podemos acompanhar o rebalance:
select INST_ID, OPERATION, STATE, POWER, SOFAR, EST_WORK, EST_RATE, EST_MINUTES from GV$ASM_OPERATION;
INST_ID OPERA STAT POWER SOFAR EST_WORK EST_RATE EST_MINUTES
---------- ----- ---- ---------- ---------- ---------- ---------- -----------
1 REBAL WAIT 10 0 0 0 0
1 REBAL RUN 10 416 52239 4580 11
1 REBAL DONE 10 0 0 0 0
SQL>Aqui podemos ver que ele está estimando o rebalance em 11 minutos, esse valor pode varia de acordo com o tamanho dos discos adicionados e também do espaço já consumido dos discos existentes.
Por ultimo, após o rebalance finalizar, vamos consultar o tamanho do nosso Diskgroup DG_DATA após a adição:
Disksgroup Redundancy Total GB Free GB Free % ------------------------------ ---------- ---------------- ---------------- ------- DG_ARCH EXTERN 200 120 59.80 DG_DATA EXTERN 900 441 48.98
Agora temos 900G no nosso diskgroup DG_DATA.
Conclusão:
- Como formatar discos com FDISK no linux
- Como criar e gerenciar labels com ASMFD
- Como adicionar discos a um Diskgroup
- Como validar o rebalance de um operação de Adição
Agora temos o ambiente redimensionado para as demandas do dia a dia!
Espero que esse material ajude no dia a dia atuando como DBA. Caso tenha alguma dúvida ou sugestão de postagem, deixo aqui meu E-mail - pedrohvido@gmail.com para contato.
Nos vemos no próximo post!
Material de apoio - Administering Oracle ASM Filter Driver
Comentários
Postar um comentário