Olá pessoal.
Vamos falar um pouco de ASM Filter Driver (ASMFD).
Não vamos entrar aqui em questão de definições do que é, para que serve porque se você chegou até aqui você já sabe (ou deveria saber) do que se trata o assunto.
A ideia aqui é um roteiro para inserir novos discos, deletar discos, criar diskgroup, adicionar discos, etc.
Lembrando também que a minha virtual tem um Oracle Single 12.2.0.1.0 com GRID instalado.
Primeiro, sempre bom dar uma olhada no Help. Aqui abaixo está somente a parte que nos interessa que é do ASMFD.
[oracle@single122 ~]$ asmcmd help
commands:
--------
afd_configure, afd_deconfigure, afd_di, afd_dsget, afd_dsset
afd_filter, afd_label, afd_lsdsk, afd_lslbl, afd_refresh
afd_scan, afd_state, afd_unlabel
Legal também dar uma olhada nos comandos para sabermos as possibilidades como abaixo.
[oracle@single122 ~]$ asmcmd help afd_state
Enfim, vamos ao que interessa. Para os nossos testes apresentei um disco (/dev/sdl) para podermos fazer o processo inteiro.
[oracle@single122 ~]$ cd /dev/
[oracle@single122 dev]$ ls -lhrt sdl*
brw-rw---- 1 root disk 8, 176 Oct 24 08:51 sdl
[oracle@single122 dev]$ lsblk sdl
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdl 8:176 0 10G 0 disk
-- Criando a partição no disco
oracle@single122 dev]$ su -
[root@single122 ~]# fdisk -l /dev/sdl
Disk /dev/sdl: 10.7 GB, 10737418240 bytes, 20971520 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
[root@single122 ~]# fdisk /dev/sdl
-- Responda as opções abaixo as perguntas apresentadas.
n
p
1
ENTER
ENTER
w
[root@single122 ~]# fdisk -l /dev/sdl
Disk /dev/sdl: 10.7 GB, 10737418240 bytes, 20971520 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
Disk label type: dos
Disk identifier: 0x00094735
Device Boot Start End Blocks Id System
/dev/sdl1 2048 20971519 10484736 83 Linux
-- Verificando a artição criada.
[oracle@single122 dev]$ ls -lhrt sdl*
brw-rw---- 1 root disk 8, 176 Oct 24 09:07 sdl
brw-rw---- 1 root disk 8, 177 Oct 24 09:07 sdl1
[oracle@single122 dev]$ lsblk sdl
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdl 8:176 0 10G 0 disk
+-sdl1 8:177 0 10G 0 part
-- Nesse momento ainda não temos nada além da partição, nenhum disco candidate.
[oracle@single122 dev]$ asmcmd lsdsk -p --candidate
-- Vou listar os meus discos já existentes apresentados ao ASMFD.
[oracle@single122 dev]$ asmcmd afd_lsdsk
------------------------------------------------------------
Label Filtering Path
============================================================
DATA01 ENABLED /dev/sdb1
DATA02 ENABLED /dev/sdc1
DATA03 ENABLED /dev/sdd1
DATA04 ENABLED /dev/sde1
DATA05 ENABLED /dev/sdf1
DATA06 ENABLED /dev/sdg1
DATA07 ENABLED /dev/sdh1
DATA08 ENABLED /dev/sdi1
DATA09 ENABLED /dev/sdj1
DATA10 ENABLED /dev/sdk1
-- Criar um label para o novo disco. Esse comando seria o equivalente (bem a grosso modo) ao CREATEDISK do ASLMLIB.
[root@single122 ~]# /oracle/12.2.0.1/grid/bin/asmcmd afd_label DATA11 /dev/sdl1
Importante: Se tentar criar um label para um disco que já está mapeado, levamos o erro abaixo:
[root@single122 dev]# /oracle/12.2.0.1/grid/bin/asmcmd afd_label DATA10 /dev/sdj1
disk /dev/sdj1 is already provisioned for ASM
ASMCMD-9513: ASM disk label set operation failed.
-- SCAN
[root@single122 dev]# /oracle/12.2.0.1/grid/bin/asmcmd afd_scan
-- Listando novamente os discos com o label criado.
[oracle@single122 dev]$ asmcmd afd_lsdsk
------------------------------------------------------------
Label Filtering Path
============================================================
DATA01 ENABLED /dev/sdb1
DATA02 ENABLED /dev/sdc1
DATA03 ENABLED /dev/sdd1
DATA04 ENABLED /dev/sde1
DATA05 ENABLED /dev/sdf1
DATA06 ENABLED /dev/sdg1
DATA07 ENABLED /dev/sdh1
DATA08 ENABLED /dev/sdi1
DATA09 ENABLED /dev/sdj1
DATA10 ENABLED /dev/sdk1
DATA11 ENABLED /dev/sdl1
-- Ao criarmos o label, agora temos um disco candidate ao ASMFD.
[oracle@single122 dev]$ asmcmd lsdsk -p --candidate
-- Podemos verificar via SQL também.
COL GROUP_NUMBER FORMAT 999;
COL MOUNT_STATUS FORMAT A7;
COL HEADER_STATUS FORMAT A12;
COL MODE_STATUS FORMAT A6;
COL PATH FORMAT A11;
COL STATE FORMAT A7;
COL TOTAL_MB FORMAT 999,999,999.99;
COL FREE_MB FORMAT 999,999,999.99;
COL NAME FORMAT A15;
COL LABEL FORMAT A15;
COL LIBRARY FORMAT A10;
COL FAILGROUP FORMAT A15;
COL VOTING_FILE FORMAT A1;
SELECT
GROUP_NUMBER,
MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,PATH,
STATE,TOTAL_MB,FREE_MB,NAME,LABEL,LIBRARY,
FAILGROUP, VOTING_FILE
FROM V$ASM_DISK
ORDER BY HEADER_STATUS, PATH;
Se o header status estiver PROVISIONED OU FORMER (fazia parte de outro DG e foi liberado), podemos adicionar. Caso tenha outro header, ai fazer o dd abaixo.
-- Vamos agora criar um novo diskgroup.
[oracle@single122 sql]$ sqlplus / as sysasm
SQL> CREATE DISKGROUP TESTE EXTERNAL REDUNDANCY DISK 'AFD:DATA11'
ATTRIBUTE
'SECTOR_SIZE'='512',
'LOGICAL_SECTOR_SIZE'='512',
'compatible.asm'='12.2.0.1',
'compatible.rdbms'='12.2.0.1',
'au_size'='1M';
Diskgroup created.
SQL>@showasm
-- Vamos agora dropar um disco de um dos diskgroups.
-- Remover o disco 09 do diskgroup REDO
SQL> alter diskgroup TESTE drop disk DATA09;
Diskgroup altered.
SQL> @showasm
-- Para fazer a remoção completa do disco devemos remover o label também.
[root@single122 ~]# su -
-- Listando os discos
[root@single122 ~]# /oracle/12.2.0.1/grid/bin/asmcmd afd_lsdsk
------------------------------------------------------------
Label Filtering Path
============================================================
DATA01 ENABLED /dev/sdb1
DATA02 ENABLED /dev/sdc1
DATA03 ENABLED /dev/sdd1
DATA04 ENABLED /dev/sde1
DATA05 ENABLED /dev/sdf1
DATA06 ENABLED /dev/sdg1
DATA07 ENABLED /dev/sdh1
DATA08 ENABLED /dev/sdi1
DATA09 ENABLED /dev/sdj1
DATA10 ENABLED /dev/sdk1
DATA11 ENABLED /dev/sdl1
-- Removendo o label
[root@single122 ~]# /oracle/12.2.0.1/grid/bin/asmcmd afd_unlabel DATA09
-- Listando novamente
[root@single122 ~]# /oracle/12.2.0.1/grid/bin/asmcmd afd_lsdsk
------------------------------------------------------------
Label Filtering Path
============================================================
DATA01 ENABLED /dev/sdb1
DATA02 ENABLED /dev/sdc1
DATA03 ENABLED /dev/sdd1
DATA04 ENABLED /dev/sde1
DATA05 ENABLED /dev/sdf1
DATA06 ENABLED /dev/sdg1
DATA07 ENABLED /dev/sdh1
DATA08 ENABLED /dev/sdi1
DATA10 ENABLED /dev/sdk1
DATA11 ENABLED /dev/sdl1
-- Agora, vamos adicionar um disco a um DG existente
[oracle@single122 sql]$ sqlplus / as sysasm
-- Adicinando o disco 09
SQL> alter diskgroup TESTE add disk 'AFD:DATA09';
Diskgroup altered.
-- Dropar um diskgroup completo
SQL> drop diskgroup TESTE including contents;
Diskgroup dropped.
Importante 1: Depois disso, basta excluir os labels dos discos como descrito mais acima.
Importante2 : Caso esteja em um RAC, deixar apenas um dos nós montados
Exemplo: Temos um RAC com 2 nós, então no nó 2 executar como grid:
sqlplus / as sysasm
SQL> alter diskgroup TESTE dismount;
-- Alterando o compat ASM e DB
-- Antes da alteração
Group Name Type Compat. DB Compat. Total (GB) Used (GB) Free (GB) Used (PCT) Free (PCT) State
----- ------------ ---------- ------------ ------------ ------------- ------------- ------------- ---------- ---------- ----------
2 FRA EXTERN 12.2.0.0.0 12.2.0.0.0 30.00 .06 29.94 .20 % 99.80% MOUNTED
SQL> sqlplus / as sysasm
SQL> ALTER DISKGROUP FRA SET ATTRIBUTE 'compatible.asm' = '12.2.0.1.0';
Diskgroup altered.
SQL> ALTER DISKGROUP FRA SET ATTRIBUTE 'compatible.rdbms' = '12.2.0.1.0';
Diskgroup altered.
Group Name Type Compat. DB Compat. Total (GB) Used (GB) Free (GB) Used (PCT) Free (PCT) State
----- ------------ ---------- ------------ ------------ ------------- ------------- ------------- ---------- ---------- ----------
2 FRA EXTERN 12.2.0.1.0 12.2.0.1.0 30.00 .06 29.94 .20 % 99.80% MOUNTED
-- Algumas verificações interessantes:
-- Quando adicionar ou dropar um disco do ASM, para verificar se ainda está fazendo REBALANCE
select
o.INST_ID, g.name AS disk_grp,
o.OPERATION,
o.STATE,
o.POWER,
o.SOFAR,
o.EST_WORK,
o.EST_RATE,
o.EST_MINUTES
from
GV$ASM_OPERATION o
join
v$asm_diskgroup g ON g.group_number = o.group_number
where
o.GROUP_NUMBER=2
ORDER BY o.INST_ID, g.name;
-- Se necessário alterar o valor do rebalance online (isso pode gerar lentidão - quanto maior o power, mais impacto)
ALTER DISKGROUP DG_MVTREINA REBALANCE POWER 1;
-- Para verificar o compat,
COLUMN name FORMAT A10
COLUMN compatibility FORMAT A20
COLUMN database_compatibility FORMAT A20
SELECT
group_number, name, compatibility,
database_compatibility
FROM v$asm_diskgroup;
-- Para verificar os valores default na criação dos DG's
COLUMN name FORMAT A20
COLUMN value FORMAT A20
SELECT
group_number, name, value
FROM v$asm_attribute
WHERE
UPPER(NAME) NOT LIKE ('%TEMPLATE%') AND
GROUP_NUMBER = 1
ORDER BY group_number, name;
Então é isso. Espero que esse roteiro ajude.
Abraço
Mario
Olá Mario, voce precisa colocar links aqui para compartilhar seu trabalho no linkedin e Face. Ele é excelente e importante. Os profissionais da área precisam saber disso e nessas redes a divulgação é mais ampla principalmente o Linkedin que é bem comunidade de Tecnologia para nós.
ResponderExcluirOpa Junior, beleza?
ResponderExcluirNão entendi, como assim disponibilizar os links?
De qualquer modo, obrigado pelas palavras.
Abraço