Esse procedimento é útil à medida que as bases
de dados são manipuladas, tornando-se muitas vezes ineficientes do ponto de
vista de armazenamento dos dados. Existem várias opções para a realização de
desfragmentação de tabelas. Neste artigo será mostrado um dos caminhos para
realizar a desfragmentação de tabelas no Oracle 10g/11g de forma online. Este
tema é útil para todos os DBAs que trabalham em empresas tradicionais e de
desenvolvimento de software que lidam com diversas bases de dados em ambientes
que possuem janelas pequenas para manutenção.
Em empresas de desenvolvimento de software é muito comum termos vários esquemas representando ambientes de desenvolvimento e ambientes de homologação para clientes.
Em muitos casos, em determinadas fases de um projeto de implantação ou desenvolvimento de uma nova funcionalidade, o cliente disponibiliza uma cópia da base de dados para ser utilizada como base de homologação na empresa fornecedora de suas aplicações.
Muitas vezes, a base disponibilizada de forma completa pode ter um tamanho de vários gigabytes, dificultando sua carga internamente na empresa desenvolvedora devido ao seu tamanho. Uma base completa de cliente pode representar vários anos de informação.
Para desenvolvimento de uma nova rotina, uma empresa desenvolvedora poderia ter uma base histórica menor, por exemplo, 12 meses já seria suficiente para desenvolver e homologar dados.
Com o intuito de otimizar a taxa de ocupação das bases de homologação de clientes, muitas vezes é necessário realizar um procedimento de limpeza de dados para diminuir a retenção de dados históricos.
Grande parte das aplicações trabalha com os dados mais recentes, quanto maior ficam as tabelas e índices, mais demoradas podem ficar as rotinas para processar esses dados, assim é recomendado que esse processo de limpeza/expurgo de dados históricos seja feito de forma periódica também em produção.
Nesse artigo, mostraremos como executar esse procedimento em ambientes com pouca janela de manutenção para o banco de dados.
Quando reorganizar fisicamente as tabelas?
As tabelas têm várias funções dentro de um banco de dados. As principais são usadas com informações de cadastro, outras guardam informações sobre transações da aplicação.
Quando atualizamos ou apagamos (update/delete) registros das tabelas, pois os espaços que são liberados durante essas operações não são imediatamente reutilizados. O resultado do surgimento desses espaços livres dentro de blocos de dados é chamado de fragmentação de dados. Quando as tabelas são usadas para adição (insert) de registros no banco, nenhum tipo de fragmentação de dados será gerado, pois as informações são armazenadas de forma contínua.
A realização de um procedimento de limpeza/expurgo ainda que apague grande parte ocupada fisicamente pelas tabelas não diminui o limite máximo (marca d’água) das mesmas.
O que é uma marca d’água?
Referente à arquitetura física do Oracle, existe um conceito bastante usado chamado de marca d’água, originado do termo em inglês High Water Mark (HWM). Este termo indica a quantidade máxima de bloco de dados que uma tabela já ocupou fisicamente em um banco de dados.
As tabelas continuam estendendo a marca d’água enquanto as 100.000 linhas são adicionadas, como apresentado na Figura 1.
Figura 1. Marca d’água após 100.000 linhas adicionadas
De forma similar, podemos comparar esse conceito a uma casa
dentro de uma enchent ...