Este artigo será útil para
profissionais que trabalham com o banco de dados Oracle, seja desenvolvendo ou
administrando. Quando executamos uma instrução qualquer no banco,
inesperadamente um erro pode ocorrer. Estas e outras situações serão abordadas
neste artigo.
Vamos iniciar falando um pouco sobre um dos principais objetos existentes em um banco de dados, a tabela. Assim como todo objeto de um banco de dados, a tabela possui algumas propriedades que devem ser bastante analisadas para desempenhar corretamente a sua função.
Para a criação de tabelas em qualquer banco de dados é importante conhecer o uso correto da sua sintaxe, principalmente através de documentos e/ou manuais do SGBD fornecido por seus fabricantes. Estes materiais são facilmente encontrados na internet (veja na seção Links).
Entre outras propriedades, iremos abordar neste artigo a propriedade chamada table_compression.
Adicionada a partir da versão 9i do Oracle, essa propriedade tem por objetivo reduzir o espaço de armazenamento em disco através da compressão dos segmentos de dados. Ela é muito utilizada em ambientes data warehouse e OLTP.
Existem algumas opções de compressão utilizadas pela propriedade table_compression:
· Nocompress – esta opção é a default na criação de uma tabela no Oracle. Não há necessidade de mencioná-la na linha de comando SQL. Com esta opção, não haverá compactação dos dados da tabela;
· Compress – Esta opção é considerada adequada para utilização em ambientes de data warehouse. Com esta opção, a compactação é ativada na tabela ou em partição da tabela durante instruções de INSERT, somente por direct-path;
· Compress for direct_load operations – Esta opção tem o mesmo efeito que o tipo Compress;
· Compress for all operations – Esta opção é considerada adequada para ambientes OLTP. Ela permite o uso da compactação em todas as operações, incluindo declarações DML.
Esta opção requer parâmetro de inicialização compatível a ser configurado para versão 11.1.0 ou superior.
Além da economia no consumo em disco, a utilização da propriedade pode resultar em aumento de desempenho de I/O e redução de memória do buffer cache. Porém, resultará em sobrecarga de CPU, portanto, vai depender da relação custo x benefício para saber se será vantajoso a sua utilização.
Existem restrições quanto ao uso da propriedade table_compression. Iremos citar algumas:
· Não é possível a sua utilização em tabelas com mais de 255 colunas;
· Os segmentos de dados Basicfile LOBs não podem ser compactados;
· Tabelas externas ou que fazem parte de um cluster também não podem ser compactadas;
· Tabelas compactadas só podem ter colunas adicionadas e removidas se a opção Compress for all operations for usada;
· Não é possível remover colunas de tabela que utiliza a compactação com as opções Compress ou Compress for direct_load operations. Na versão 11g R2 esta opção foi renomeada para Compress for OLTP e seu nome original foi substituído.
Erro ORA-39726: Operação de adição/eliminação de coluna não suportada em tabelas compactadas
Conforme foi contextualizado anteriormente, existem algumas restrições quanto ao uso da propriedade table_compression para compactação de dados da tabela. Uma destas restrições é não poder remover colunas quando utilizamos a opção Compress. Também não poderá ser realizado com a opção Compress for direct_load operations.
Utilizando o banco de dados Oracle 11g R2 e a ferramenta PL/SQL Developer 8, exemplificaremos a criação de uma tabela utilizando a opção compress da propriedade table_compression, conforme mostra a Figura 1.
Figura 1. Criando tabela compactada usando a opção compress
Como a restrição é apenas para remoção de colunas, podemos realizar inclusões de colunas com êxito, conforme mostra a Figura 2.
Figura 2. Adicionando coluna em tabela compactada
Co ...