Oracle ASM - Adicionando discos a um Diskgroup com ASMLIB

  Olá pessoal, nesse artigo vou mostrar como adicionar discos, em um Diskgroup para um banco Oracle RAC de 2 nodes, seja para o diskgroup de DATA, FRA ou RECO, o procedimento será aplicável.

Para iniciar, devemos ter em mãos as informações dos discos disponibilizados pela equipe de Infraestrutura, geralmente a adição no ASM, criação do label do disco, particionamento se necessário e feito pela equipe de infra, mas, já trabalhei em lugares que a responsabilidade por todas as etapas descritas acima fica a cargo do DBA, então dessa forma vou cobrir todos os passos para que o material sirva para todos os casos.


1 - Com as informações do disco, vamos validar se eles tem o tamanho correto, e estão corretamente apresentados no SO, abaixo os discos criados simulando um ambiente real

 mpathap (3600c0ff000647f7d4e2f376901000000) dm-21
 mpathaq (3600c0ff000647f7d4f2f376901000000) dm-22


Nesse exemplo temos o Diskgroup DG_DATA onde vamos adicionar 2 discos de 190G demonstrados acima, dessa forma vamos seguir realizando algumas validações

Disco disponível no SO:

Comando : lsblk | grep <disk name>




Aqui pode se ver 4 entradas do mesmo disco, aqui estamos usando o Multipath para balancear o I/O entre o server e a Storage, e fornecer redundância. Comum em ambientes reais. Podemos ver que o DM (Device Mapper Multipath) esta correto com as informações fornecidas e podemos seguir com o processo.

Outro tipo de validação e o permissionamento do disco, nesse ambiente para adição os discos são criados e disponibilizados com o root, você pode conferir no seu ambiente com o comando "ls -l /dev/mapper/*"


Validando os discos que iremos apresentar ao ASM:

ls -l /dev/mapper/mpathap
ls -l /dev/mapper/mpathaq



Agora vamos validar os discos que já temos atachados ao ASM para seguir a mesma padronização do ambiente, 

Dessa forma, com user root vamos seguir configurando as variáveis de ambiente para o +ASM1 para usar o ASMlib:

. oraenv 
ORACLE_SID = [root] ? +ASM1 
The Oracle base has been changed from /home/oracle to /u01/app/oracle

[root@ol8-vm1 ~]# oracleasm listdisks


Temos 3 discos. 1 para DATA (DATA001), 1 para os archives (ARCH001) e um para a Recovery Area (RECO001)

Nesse exemplo vamos adicionar no DATA, então, vamos seguir o padrão e adicionar o DATA002 e DATA 003.

Uma consulta que gosto de realizar quando temos vários discos ou em algumas situações validar, onde precisamos remover algum disco que foi adicionado temporariamente, onde ele lista os discos e o respectivo DM :

[root@ol8-vm1 ~]#   for d in $(/usr/sbin/oracleasm listdisks); do dq=$(/usr/sbin/oracleasm querydisk -d $d); dqn=$(echo $dq | cut -d[ -f2 | cut -d] -f1); dq1=$(echo $dqn | cut -d, -f1);
>  dq2=$(echo $dqn | cut -d, -f2); dev=$(ls -ld /dev/* | egrep " $dq1, *$dq2 " | awk '{print $NF}'); echo $d $dq $dev; done




Feito as devidas validações vamos ver o tamanho atual do ASM para comparar com o tamanho após a adição:

Query:

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
);




Agora vamos adicionar o disco ao ASM - (com root):

oracleasm createdisk DATA002 /dev/mapper/mpathap
oracleasm createdisk DATA003 /dev/mapper/mpathaq


Agora devemos realizar o scandisk e listdisk no node 2 para o disco ser reconhecido em ambos os nodes, caso o ambiente fosse single, esse passo a mais não seria necessário.

1- ACESSAR TODOS OS NOS E EXECUTAR :
  oracleasm scandisks (root)
  oracleasm listdisks (root)













Agora vamos validar na instancia do ASM se os discos aparecem como candidatos para adição:

logar no ASM - (com oracle) :

. oraenv : +ASM1
sqlplus / as sysasm

column path format a50
set lines 9999 pages 9999
select path,os_mb,header_Status from v$asm_Disk where header_Status!='MEMBER';












Agora podemos adicionar os discos com o comando:
 
alter diskgroup DG_DATA add disk '/dev/oracleasm/disks/DATA002','/dev/oracleasm/disks/DATA003' rebalance power 10;
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ápido, 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.







O rebalance por ser acompanhando pela consulta abaixo:

select INST_ID, OPERATION, STATE, POWER, SOFAR, EST_WORK, EST_RATE, EST_MINUTES from GV$ASM_OPERATION;









Pode ver acima que o processo esta sendo feito na instancia 1 e ainda não iniciou na instancia 2, dessa forma por aqui pode ser validado o processo e o tempo estimado em cada instancia.

Agora vamos validar o tamanho atual do Diskgroup com a mesma query usada anteriormente nesse artigo:









Agora temos o ambiente redimensionado para as demandas do dia a dia!


Conclusão:

  • Como formatar discos com FDISK no linux
  • Como criar, deletar e gerenciar labels com ASMLIB
  • Como adicionar discos a um Diskgroup com ASMLIB
  • Como adicionar discos a um diskgroup com ASMLIB em ambientes RAC
  • Como validar o rebalance de um operação de Adição



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.

Comentários

Postagens mais visitadas deste blog

Instalando Oracle Database 19c em um Oracle Linux 8.8 no Virtual Box - PARTE 2

Temporary Tablespace : Identificando consultas consumindo uma Tablespace Temporária

SQL - Calculando crescimento do Banco de dados Oracle