No cenário de bancos de dados modernos, gerenciar o armazenamento de forma eficiente é um desafio constante. É preciso garantir alta performance, disponibilidade e facilidade de administração. O Oracle ASM (Automatic Storage Management) surge como a solução ideal, integrando a gestão de discos diretamente ao banco de dados Oracle.
O que é o Oracle ASM?
O Oracle ASM é um gerenciador de volumes de armazenamento e um sistema de arquivos projetado especificamente para bancos de dados Oracle. Ele é uma alternativa aos sistemas de arquivos tradicionais (como ext4, NTFS) e aos gerenciadores de volumes lógicos (como LVM), oferecendo uma camada inteligente e otimizada entre o sistema operacional e os arquivos do banco de dados (datafiles, control files, redo logs, etc.).
Ao contrário de um sistema de arquivos convencional, o ASM não mostra os arquivos do banco de dados de forma hierárquica para o sistema operacional. Em vez disso, ele apresenta um conjunto de Grupos de Discos (Disk Groups), onde cada grupo é uma coleção de discos físicos. O ASM então distribui automaticamente os arquivos do banco de dados por esses discos, otimizando o I/O e fornecendo redundância.
Pense nele como um “mini-RAID” inteligente e integrado ao Oracle Database.
Para que serve o Oracle ASM?
O principal objetivo do ASM é simplificar e otimizar o gerenciamento de armazenamento para bancos de dados Oracle, especialmente em ambientes de alta demanda e alta disponibilidade como o Oracle RAC (Real Application Clusters). Suas principais funções e benefícios incluem:
- Simplificação do Gerenciamento:
- Abstração de Hardware: O DBA não precisa se preocupar com os discos físicos individuais. Ele gerencia disk groups, e o ASM se encarrega de onde os dados são gravados.
- Rebalanceamento Automático: Quando você adiciona ou remove discos de um disk group, o ASM automaticamente redistribui os dados para otimizar o I/O e o uso do espaço, sem downtime para o banco de dados.
- Performance Otimizada:
- Striping Automático: O ASM distribui os dados em “faixas” (stripes) uniformemente por todos os discos em um disk group, o que melhora o desempenho de I/O, permitindo que várias operações de leitura/gravação ocorram em paralelo.
- Balanceamento de Carga: O rebalanceamento garante que a carga de I/O seja distribuída de forma equilibrada entre os discos, evitando gargalos.
- Alta Disponibilidade e Redundância:
- Espelhamento Interno (Software RAID): O ASM pode fornecer redundância de dados através de espelhamento (equivalente a RAID 1 ou RAID 5/6), mesmo que o hardware de armazenamento subjacente não ofereça essa proteção. Isso significa que, se um disco falhar, o banco de dados continua operando sem interrupção.
- Gerenciamento de falhas: Em caso de falha de disco, o ASM automaticamente reconstrói os dados perdidos a partir das cópias espelhadas em outros discos.
- Integração com RAC: É a solução de armazenamento preferencial e mais eficiente para o Oracle RAC, permitindo que todas as instâncias acessem o mesmo armazenamento compartilhado de forma transparente.
- Flexibilidade e Escalabilidade:
- Expansão Simples: Adicionar capacidade de armazenamento é tão simples quanto adicionar novos discos a um disk group.
- Compatibilidade: Funciona com diferentes tipos de armazenamento (SAN, NAS, discos locais, SSDs).
Componentes chave do Oracle ASM
- Instância ASM: O ASM roda como uma instância Oracle separada, mas leve, com sua própria SGA e processos em segundo plano. Ela gerencia os disk groups. Em um ambiente RAC, há uma instância ASM em cada nó do cluster.
- Grupos de Discos (Disk Groups): São as unidades lógicas de armazenamento. Cada disk group consiste em um conjunto de discos físicos (chamados de ASM disks). Quando você cria um disk group, você define a política de redundância (externa, normal ou alta).
- ASM Disks: Os discos físicos (ou partições, ou LUNs de SAN) que são membros de um disk group.
- Arquivos do Banco de Dados: O RMAN e o Oracle Database se comunicam diretamente com a instância ASM para criar, ler e gravar os arquivos do banco de dados dentro dos disk groups.
Exemplos de Configuração e Gerenciamento do Oracle ASM
Vamos ver alguns comandos e conceitos práticos para gerenciar o ASM.
1. Pré-requisitos para Discos ASM
Antes de usar discos com ASM, eles precisam estar “preparados” para isso. Geralmente, isso envolve:
- Particionamento: Criar partições nos discos.
- Permissões: Garantir que o usuário oracle (ou grid, em ambientes RAC/Grid Infrastructure) tenha permissão de leitura e escrita nos dispositivos de disco bruto.
- Ferramentas de Persistência: Em Linux, usar ferramentas como udev rules para garantir que as permissões e o nome dos dispositivos permaneçam consistentes após reinicializações.
2. Iniciando a Instância ASM (em ambiente standalone)
Se você não tiver o Grid Infrastructure, a instância ASM é iniciada separadamente do banco de dados.
# Conectar como usuário grid/oracle (depende da instalação)
export ORACLE_SID=+ASM
export ORACLE_HOME=/u01/app/grid/product/19.0.0/grid
Dentro do asmcmd ou via SQL*Plus conectado à instância ASM:
SQL> STARTUP;
3. Criando um Disk Group
Para criar um disk group, você especifica o nome, o nível de redundância e os discos que farão parte dele.
Níveis de Redundância:
- EXTERNAL REDUNDANCY: O ASM não gerencia a redundância; espera-se que o hardware (RAID de SAN, por exemplo) forneça a proteção. Não há espelhamento pelo ASM.
- NORMAL REDUNDANCY: O ASM espelha os dados em duas cópias (equivalente a RAID 1 ou RAID 10). Requer pelo menos dois discos no disk group.
- HIGH REDUNDANCY: O ASM espelha os dados em três cópias. Requer pelo menos três discos no disk group.
Exemplo: Criando um Disk Group com Redundância Normal
Assumindo que você tem dois discos (ou partições) disponíveis: /dev/sdc1 e /dev/sdd1.
CREATE DISKGROUP DATA_DG NORMAL REDUNDANCY DISK '/dev/sdc1' NAME DISK_01 DISK '/dev/sdd1' NAME DISK_02;
- DATA_DG: Nome do disk group.
- NORMAL REDUNDANCY: Nível de proteção (espelha em duas cópias).
- DISK ‘/dev/sdc1’ NAME DISK_01: Adiciona o disco físico /dev/sdc1 e dá a ele um nome lógico DISK_01 dentro do ASM.
4. Verificando Disk Groups
Para listar os disk groups existentes e seu status:
SELECT NAME, STATE, TYPE, TOTAL_MB, FREE_MB, USABLE_FILE_MB FROM V$ASM_DISKGROUP;
- STATE: ONLINED/MOUNTED significa que o disk group está ativo e disponível.
- TYPE: EXTERNAL, NORMAL, HIGH.
- TOTAL_MB, FREE_MB: Espaço total e livre no disk group.
- USABLE_FILE_MB: Espaço livre que realmente pode ser usado para novos arquivos, considerando a redundância.
Para listar os discos dentro de um disk group:
SELECT PATH, HEADER_STATUS, NAME, GROUP_NAME, MOUNT_STATUSFROM V$ASM_DISK;
5. Adicionando Discos a um Disk Group
Para aumentar a capacidade e/ou performance de um disk group, adicione mais discos:
ALTER DISKGROUP DATA_DG ADD DISK '/dev/sde1' NAME DISK_03;
- O ASM iniciará um processo de rebalanceamento automático para distribuir os dados existentes pelos novos e antigos discos. Você pode monitorar este processo através de V$ASM_OPERATION.
6. Removendo Discos de um Disk Group
Se um disco estiver falhando ou precisar ser substituído:
ALTER DISKGROUP DATA_DG DROP DISK DISK_01;
- O ASM primeiro migrará os dados do disco DISK_01 para os outros discos do disk group (se houver redundância ou espaço suficiente) e só então o removerá.
7. Criando um Banco de Dados Usando ASM
Ao criar um banco de dados com o DBCA (Database Configuration Assistant), você pode especificar um disk group ASM como local de armazenamento.
Exemplo de Caminho ASM:
Em vez de /u01/app/oracle/oradata/ORCL/datafile01.dbf, o caminho se torna:
+DATA_DG/ORCL/DATAFILE/system.256.8900000
- +DATA_DG: Indica que o arquivo está no disk group DATA_DG.
- /ORCL/DATAFILE/system.256.8900000: O Oracle ASM gerencia automaticamente o nome do arquivo, adicionando um sufixo numérico exclusivo.
Você pode configurar o parâmetro DB_CREATE_FILE_DEST para apontar para um disk group padrão:
ALTER SYSTEM SET DB_CREATE_FILE_DEST = '+DATA_DG' SCOPE=BOTH;
Agora, ao criar tablespaces ou datafiles sem especificar um caminho completo, eles serão criados automaticamente no +DATA_DG.
8. Monitoramento Avançado do ASM
- Operações em Andamento:
SELECT GROUP_NUMBER, OPERATION, STATE, SOFAR, EST_MB, EST_MINUTES
FROM V$ASM_OPERATION; - Estatísticas de I/O:
SELECT DG.NAME AS DISKGROUP_NAME, D.PATH, D.READS, D.WRITES, D.READ_ERRS, D.WRITE_ERRS
FROM V$ASM_DISKGROUP DG, V$ASM_DISK D
WHERE DG.GROUP_NUMBER = D.GROUP_NUMBER
ORDER BY DG.NAME, D.PATH;
Conclusão
O Oracle ASM é uma tecnologia poderosa e um pilar fundamental para ambientes de banco de dados Oracle de alta performance e alta disponibilidade, especialmente para Oracle RAC. Ele abstrai a complexidade do gerenciamento de armazenamento, automatiza tarefas críticas como o balanceamento de carga e a recuperação de falhas de disco, e otimiza o I/O, permitindo que os DBAs se concentrem em desafios mais estratégicos.
Dominar o ASM não é apenas uma habilidade valiosa; é uma necessidade para qualquer DBA Oracle que trabalhe com ambientes de produção robustos.
Te vejo no próximo post!