terça-feira, 24 de outubro de 2017

Roteiro de utilização - ASM Filter Driver (ASMFD)

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.

-- Vamos primeiro verificar o disco e seu tamanho.
[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.


[oracle@single122 ~]$ su -

[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;
-- Se necessário, podemos fazer outros acertos via SQL

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

2 comentários:

  1. 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.

    ResponderExcluir
  2. Opa Junior, beleza?

    Não entendi, como assim disponibilizar os links?

    De qualquer modo, obrigado pelas palavras.

    Abraço

    ResponderExcluir

Isso te ajudou? Comente...

Postagem em destaque

[ORACLE] Batch change EDITIONABLE property.

Hello everyone. Hope you're doing well! Today, I have a simple case.   A test database had many database objects with the EDITIONABLE pr...