Pular para o conteúdo

Reclaiming Unused Space – Recuperando Espaço Não Utilizado no Banco de Dados Oracle

Reclaiming Unused Space – Recuperando Espaço Não Utilizado no Banco de Dados Oracle

Imagine que seu banco de dados Oracle é como um aeroporto. Cada tabela e índice são como terminais e portões, enquanto os segmentos são os voos e passageiros ocupando espaço nas pistas e nos portões. Com o tempo, o aeroporto pode ficar congestionado com voos cancelados, atrasos e bagagens não reclamadas. Vamos ver como podemos “limpar o aeroporto” e otimizar o espaço.

image 70

Verificar Terminais e Portões Congestionados

Primeiro, precisamos identificar os terminais (tabelas) e portões (índices) que estão fragmentados ou congestionados. Pense nas tabelas e índices como áreas do aeroporto com muitas áreas vazias ou espaço desperdiçado.
Execute os seguintes comandos para verificar o espaço utilizado e vazio:

image 71

TABELAS

SQL
SELECT table_name, ROUND((blocks * 8)/1024, 2) AS size_MB,
ROUND((empty_blocks * 8)/1024, 2) AS empty_space_MB
FROM dba_tables
WHERE owner = 'HR';

Para índices, use:

image 72

ÍNDICE

SQL
SELECT i.index_name, i.table_name, ROUND((s.bytes / 1024 / 1024), 2) AS size_MB
FROM dba_segments s
JOIN dba_indexes i ON s.segment_name = i.index_name
WHERE s.segment_type = 'INDEX' AND s.owner = 'HR';a'

Após essa verificação, podemos ver todas as tabelas e índices vinculados ao usuário HR. Como se trata de um laboratório de teste com pouca movimentação, conseguimos expor todas as tabelas e índices facilmente. Mas, mesmo em um banco pequeno, é importante não subestimar a importância desse exercício.

Movendo Segmentos

Depois de verificar o status das tabelas e índices, podemos mover os segmentos com o comando:

image 74

MOVENDO TABELAS – RECONSTRUINDO ÍNDICES

SQL
ALTER TABLE hr.employees MOVE ONLINE;a

E, em seguida, reconstruir os índices:

PLSQL
BEGIN
  FOR r IN (SELECT index_name FROM dba_indexes WHERE table_name = 'EMPLOYEES' AND owner = 'HR') LOOP
    EXECUTE IMMEDIATE 'ALTER INDEX hr.' || r.index_name || ' REBUILD ONLINE';
  END LOOP;
END;
/

Movemos a tabela employees, realocando-a e liberando espaço ao desfragmentar o espaço vago em disco. E sem perder tempo, reorganizamos os índices. Essa ação é crucial, pois a realocação da tabela pode fazer com que os índices percam suas referências, então reconstruí-los após a movimentação é essencial.

Verificando o Tamanho Após a Movimentação

Para verificar o tamanho da tabela employees após a movimentação, execute:

image 75

REVENDO O TAMANHO

SQL
SELECT segment_name, segment_type, ROUND((bytes / 1024 / 1024), 2) AS size_MB
FROM dba_segments
WHERE segment_name = 'EMPLOYEES' AND owner = 'HR';

Conclusão
O comando ALTER TABLE … MOVE ONLINE é útil para reorganizar a tabela e liberar espaço sem causar grandes interrupções. A reconstrução dos índices é uma etapa crucial após a movimentação para garantir que os índices estejam atualizados e utilizáveis.

Seguindo esses passos, você mantém seu “aeroporto” funcionando de maneira eficiente, garantindo que todos os “voos” e “passageiros” estejam bem acomodados.

Quão útil foi este post ?

Clique em uma estrela para classificar o post

nota média 4.7 / 5. Contagem de votos: 11

Sem votos ! Seja o primeiro a classificar !

Marcações:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress