Opa, blz ? Só umas infos adicionais... 
 => Primeiro, o funcionamento do gerenciamento de espaço nos blocos em disco 
pelo RDBMS Oracle é : conforme vão entrando dados na tabela, o RDBMS aloca um 
EXTENT (ie, um conjunto de blocos contíguos em disco, que pode ser de tamanho 
fixo OU variável, cfrme vc criou a tabela e a tablespace) e vai usando o espaço 
alocado (e usando o espaço dentro dos blocos da maneira que vc indicou com 
PCTFREE/PCTUSED na hora de criar a tabela OU via algoritmo próprio se vc usa a 
opção de gerenciamente automático), mais pra frente quando mais dados chegam e 
o extent cresceu ele aloca outro extent, depois outro... Quando há DELETEs 
(reconhecendo que comumente no futuro breve vão entrar novos dados) ao invés de 
devolver esse espaço que ficou em branco/não usado, o RDBMS ainda o deixa 
reservado, ALOCADO para a tabela - aí, quando (em brve, normalmente) chegarem 
os novos dados não vai ser preciso o RDBMS formatar/alocar novos blocos, ele só 
reusa esses que ficaram reservados, é MUITO mais rápido... OK ? 
 A teoria explicada aí fica mais fácil de entender... A questão é que vc tem 
que identificar o COMPORTAMENTE DE USO das suas tabelas - afinal , FACILMENTE 
pode acontecer de vc encontrar uma tabela X que tem 
não-sei-quantos-muitosmegabytes de espaço reservado mas não usado, mas NADA 
IMPEDE de que ela seja uma tabela de carga, por exemplo : nesse cenário vc vai 
ter um trabalhinho pra desalocar o espaço reservado, aí amanhã chega uma carga 
de dados e a tabela CRESCE tudo de novo, vc teve um trabalho *** INÚTIL ***.... 
E além disso liberando o espaço que estava reservado para X, vc ainda ** forçou 
** o RDBMS a formatar NOVOS blocos para recepcionar os novos dados que entraram 
em X, possivelmente INTERFERINDO na performance.... OU seja, vc gastou o seu 
tempo (que Custa dinheiro) e ainda por cima Interferiu na performance - nada 
bom, né ??? Então, ** ANTES ** de sair Analisando as tabelas para ver se tem 
espaço não-usado mas alocado (que vou indicar Brevemente mais abaixo) e sair 
fazendo SHRINK ou MOVE ou seja o que for feito um doido, PLEASE conheça e 
entenda o seu ambiente, Explique o conceito acima pro pessoal da Aplicação, 
para poder Receber deles as dicas de uso das tabelas.... OK ?
  A outra possibilidade de vc estar com espaço não-usado é extent de tamanho 
muito grande ou blocos com politicas de uso inadequadas (por exemplo, uma 
tabela que só faz sempre INSERTs por carga de dados está com espaço reservado 
para futuros UPDATEs via pctfree/pctused) : é estudar os conceitos de extent e 
storage dentro dos blocos e ver o que mais se adequa pra vc..
 
==> Para  Analisar se uma tabela contém espaço não-usado , vc usa a DBMS_SPACE, 
veja nos links de ref para alguns exemplos de uso.
 ==> Mecanismos : uma vez concluído que uma tabela (ou uma tablespace) pode se 
beneficiar de reorganização (ie, vc fez a Análise necessária, encontrou espaço 
não usado e vc ** SABE **, por uma regra de negócio, que NUNCA MAIS vão vir 
novos dados que precisem/reusem esse espaço sem uso) vc pode usar os comandos 
de COALESCE, SHRINK, ALTER xx DEALLOCATE UNUSED ou mover os dados (com MOVE, 
DBMS_REDEFINITION e similares) : além da Documentação, os links de refs falam a 
respeito delas.
 Como refs, posso indicar (ALÉM da Documentação) 
http://www.oracle.com/technetwork/articles/database/fragmentation-table-shrink-tips-2330997.html
 , 
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:1388955800346448370
 , 
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:266215435203,
 
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:2929412562998
 e 
https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:649658900346125677
 
 

 []s
 

   Chiappa

Responder a