Otimizando Tabelas no Oracle Database: Marcando Colunas Como Unused
Você já viu alguém fazendo a coisa certa mas na hora errada?
Quando lidamos com um banco de dados em crescimento, especialmente um Oracle Database, a limpeza e otimização das tabelas são pontos-chave para manter a performance em dia. Mas o que fazer quando precisamos “remover” uma coluna sem necessariamente mexer na estrutura da tabela, nem consumir muito tempo de processamento?
Aqui entra uma função extremamente útil: a possibilidade de marcar colunas como ‘unused’. Este recurso permite indicar que uma coluna não será mais utilizada, sem realmente excluir os dados de imediato. Vamos entender melhor.
Imagine uma prateleira de escritório cheia de arquivos (nossa tabela) onde alguns deles estão desatualizados e ocupando espaço. Você decide ‘etiquetar’ esses arquivos como “não utilizados”, sem removê-los da prateleira, mas os ignora para todas as próximas consultas. Agora, é como se esses arquivos nem estivessem lá, liberando espaço “visual” na prateleira e deixando mais fácil para organizar o restante.
O mesmo conceito aplica-se às colunas marcadas como “unused” no Oracle Database. A coluna permanece na tabela, mas fica oculta e pode ser substituída com uma nova coluna usando o mesmo nome. É uma forma de marcar a coluna como obsoleta, aguardando uma futura limpeza completa.
Suponha que temos uma tabela ‘HR.ADMIN_EMP’ e queremos marcar as colunas ‘HIRE_DATE’ e ‘JOB_ID’ como não utilizadas. Para isso, utilizamos o comando:
ALTER TABLE hr.admin_emp SET UNUSED (hire_date, job_id);
- As colunas ‘HIRE_DATE’ e ‘JOB_ID’ serão tratadas como inexistentes em futuras consultas.
- Se houver restrições, índices ou estatísticas associados, serão removidos (com exceção dos índices internos de colunas LOB, que permanecem).
- O nome da coluna é “liberado”, permitindo que você crie uma nova coluna com o mesmo nome, caso necessário.
Este método é mais rápido do que remover as colunas diretamente e permite que o espaço seja recuperado de forma programada posteriormente.
Imagine que você tem uma prateleira cheia de livros, mas alguns já não servem mais. Em vez de retirá-los e reorganizar a prateleira (o que levaria tempo), você apenas os cobre com uma cortina. Isso libera os nomes dos espaços para novos livros, mas os antigos continuam lá até que você decida remover tudo de uma vez, em um momento mais conveniente.
Da mesma forma, ao marcar uma coluna como UNUSED no Oracle Database, ela é “escondida” sem ser realmente excluída, liberando o nome da coluna e reduzindo o I/O, ou seja, o número de operações de entrada e saída. Depois, você pode agendar a remoção completa, recuperando o espaço de uma vez e mantendo o desempenho imediato da tabela.
É possível monitorar quais tabelas têm colunas definidas como “unused” através da visualização de dados dicionários, como em ‘DBA_UNUSED_COL_TABS’. Para listar essas tabelas, basta executar:
SELECT * FROM DBA_UNUSED_COL_TABS;
Isso nos mostra todas as tabelas e o número de colunas marcadas como “unused”:
Quando for conveniente (talvez durante uma manutenção programada), você pode liberar o espaço usado por essas colunas com o comando:
ALTER TABLE hr.admin_emp DROP UNUSED COLUMNS;
Isso elimina permanentemente as colunas marcadas como “unused” e recupera o espaço. Assim, a tabela fica definitivamente otimizada e pronta para um uso mais eficiente de armazenamento.
Marcar colunas como “unused” é uma estratégia prática e eficaz para otimizar tabelas grandes de forma gradual. Isso permite administrar o crescimento do banco de dados sem o impacto de excluir colunas imediatamente. Experimente aplicar este conceito e veja como ele facilita o gerenciamento das tabelas em seu Oracle Database.