[oracle_br] Re: Liberação automatico de espaço após delete em tabelas com CLOB.

2015-01-13 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Na medida do possível eu recomendaria que vc tentasse levantar com eles 
exatamente o que eles fazem, e quando/como fazem, de forma que CASO o efeito em 
questão seja algo decorrente de funcionalidade básica do Oracle (ie, de não 
liberar o espaço após um DELETE) E CASO não tenha como eles remodelarem isso, 
que AO MENOS vc possa se programar com o work-around
 Por exemplo : um modelo Absurdo, mas que já vi implementado numa Aplicação 
(que gerenciava Documentos, tipo Apólices de Seguro) era que, AO INVÉS da data 
de criação ser um atributo da tabela TAB_DOCTOS que continha a coluna LOB com o 
documento, a doida de pedra da aplicação criava uma tabela para cada Semana. 
cada uma com a coluna LON necessária e os demais atributos, assim tínhamos uma 
tabela TAB_DOCTOS_JAN_S1, uma TAB_DOCTOS_JAN_S2 com as MESMAS colunas, 
TAB_DOCTOS_JAN_S3 com as MESMAS colunas, vc entendeu... Além dos Óbvios 
problemas de performance (tais como crescimento do dicionário de dados, 
exigência TOTAL de SQL Dinãmico pois contrariando toda e qquer norma de RDBMS 
não se sabe em qual tabela um dado está, JOINs imensos com uma dúzia ou mais de 
tabelas referenciadas no tal SQL dinãmico, etc, etc) , para Adicionar o modelo 
previa que quando um Documento deixasse de ser válido o registro fosse DELETADO 
da tabela onde ele estava, e quando fosse necessário inserir novamente quase 
com certeza já se passou uma semana, então ele vai ser re-inserido noutra 
tabela... É o caso TÍPICO : a informação foi deletada, o RDBMS Oracle ** 
reservou ** o espaço do DELETE para futuros INSERTs/UPDATEs, mas há uma regra 
de negócio, uma condição lógica estabelecida FORA DO DATABASE que indica que 
NÃO haverá INSERTs ou UPDATEs : taí, tal espaço reservado é puro desperdício, 
causado por uma Modelagem questionável que não faz o que comumente é feito...
 
  []s
  
Chiappa

[oracle_br] Re: Liberação automatico de espaço após delete em tabelas com CLOB.

2015-01-13 Por tôpico regisbavare...@yahoo.com.br [oracle_br]
Vlw Chiappa pela ajuda. o Problema era a aplicação, não sei o q os caras 
fizeram. Fiz um delete manual pelo banco e depois disso foi feito um coalesce 
da na tablespace e o Oracle agora esta reaproveitando os espaços.

[oracle_br] Re: Liberação automatico de espaço após delete em tabelas com CLOB.

2015-01-12 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Régis, até onde sei o RDBMS Oracle (principalmente por causa do grande overhead 
ao se reformatar para uso espaço fora do database)  *** não *** libera para 
disco o espaço após DELETEs automaticamente, SEJA em data segments, index 
segments ou LOB SEGMENTs, na Suposição de que as tabelas/índices/etc que 
sofreram o DELETE em breve vão sofrer novos DMLs, aí esse espaço que ficou 
reservado após o DELETE é Automaticamente reusado e ganha-se um enorme boost em 
performance, ao evitar que o RDBMS tenha que formatar novos blocos pra isso... 
 Então, se vc REALMENTE estiver num cenário não-rotineiro, onde vc tem quase 
absoluta certeza de os objetos que sofreram DELETE ** não ** vão sofrer DMLs 
proximamente E vc tá numa secura de espaço em disco que exija que esse espaço 
reservado ** TEM ** que ser liberado para uso alhures em outros segmentos, 
afaik Não Há como se fazer isso automaticamente, vc TEM que agendar (via job, 
trigger, o que for) uma rotina de liberação, seja via SHRINK/COALESCE, seja via 
COMPACT, ALTER xxx DEALLOCATE, movimentação de dados (via DBMS_REDEFINE ou 
recriação de objeto) com  posterior TRUNCATE, é por aí... A indicação DEPENDE 
100% de quanto está sendo não-usado no momento e onde está esse espaço (se 
acima ou abaixo da HWM, etc)...
   
   Apenas como complemento, questiono : vc *** ANALISOU *** esse data segment, 
os eventuais índices e o  LOB aí ? Vc diz que a tabela cresceu 10 GB em dois 
dias, tá, mas QUANTO desses 10 GB eram mesmo dados ??? Nada impede que desse 
crescimento sei lá, 1 GB sejam de dados efetivos e o resto seja de espaço 
reservado, ou de temporary lobs 
(http://www.toadworld.com/platforms/oracle/w/wiki/2050.datatypes-temporary-lobs.aspx),
 ou de espaço acima da HWM, etc : em qquer caso, se for uma proporção assim tão 
gritante, com certeza (** sempre ** com a Ajuda/Suporte/Autorização do teu 
Fornecedor) vc pode considerar mudar a cláusula de STORAGE dos seus LOBs, o 
CHUNK SIZE, etc... 
 Vc também (SEMPRE e AINDA com a Ajuda/Suporte/Autorização do seu Fornecedor) 
deveria considerar a possibilidade se SECUREFILES (tipicamente mais eficientes 
na utilização de espaço em disco, além das questões de performance) ** E ** 
deveria confirmar que não nenhum LEAKING, ie, que os LOBs após terem sidos 
abertos pela Aplicação são Fechados : cfrme 
https://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:2957424542334#4530439400346713089
 , uma Aplicação responsável Abre, usa e Fecha os LOBs, e naturalmente após o 
fechamento as estruturas de trabalho criadas para o LOB são liberadas ... Caso 
a aplicação não faça isso, é um BUG, é um LEAK de recurso que vc está 
enfrentando, isso TEM que ser corrigido na Aplicação : é similar á memória que 
vc alocou mas não desalocou no final do uso, aos arquivos em disco que a 
aplicação abriu/criou file handles mas não fechou, etc...

  []s
  
Chiappa

[oracle_br] Re: Liberação automatico de espaço após delete em tabelas com CLOB.

2015-01-12 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Régis, até onde sei o RDBMS Oracle (principalmente por causa do grande overhead 
ao se reformatar para uso espaço fora do database)  *** não *** libera para 
disco o espaço após DELETEs automaticamente, SEJA em data segments, index 
segments ou LOB SEGMENTs, na Suposição de que as tabelas/índices/etc que 
sofreram o DELETE em breve vão sofrer novos DMLs, aí esse espaço que ficou 
reservado após o DELETE é Automaticamente reusado e ganha-se um enorme boost em 
performance, ao evitar que o RDBMS tenha que formatar novos blocos pra isso... 
 Então, se vc REALMENTE estiver num cenário não-rotineiro, onde vc tem quase 
absoluta certeza de os objetos que sofreram DELETE ** não ** vão sofrer DMLs 
proximamente E vc tá numa secura de espaço em disco que exija que esse espaço 
reservado ** TEM ** que ser liberado para uso alhures em outros segmentos, 
afaik Não Há como se fazer isso automaticamente, vc TEM que agendar (via job, 
trigger, o que for) uma rotina de liberação, seja via SHRINK/COALESCE, seja via 
COMPACT, ALTER xxx DEALLOCATE, movimentação de dados (via DBMS_REDEFINE ou 
recriação de objeto) com  posterior TRUNCATE, é por aí... A indicação DEPENDE 
100% de quanto está sendo não-usado no momento e onde está esse espaço (se 
acima ou abaixo da HWM, etc)...
   
   Apenas como complemento, questiono : vc *** ANALISOU *** esse data segment, 
os eventuais índices e o  LOB aí ? Vc diz que a tabela cresceu 10 GB em dois 
dias, tá, mas QUANTO desses 10 GB eram mesmo dados ??? Nada impede que desse 
crescimento sei lá, 1 GB sejam de dados efetivos e o resto seja de espaço 
reservado, ou de temporary lobs 
(http://www.toadworld.com/platforms/oracle/w/wiki/2050.datatypes-temporary-lobs.aspx),
 ou de espaço acima da HWM, etc : em qquer caso, se for uma proporção assim tão 
gritante, com certeza (** sempre ** com a Ajuda/Suporte/Autorização do teu 
Fornecedor) vc pode considerar mudar a cláusula de STORAGE dos seus LOBs, o 
CHUNK SIZE, etc... 
 Vc também (SEMPRE e AINDA com a Ajuda/Suporte/Autorização do seu Fornecedor) 
deveria considerar a possibilidade se SECUREFILES (tipicamente mais eficientes 
na utilização de espaço em disco, além das questões de performance) ** E ** 
deveria confirmar que não nenhum LEAKING, ie, que os LOBs após terem sidos 
abertos pela Aplicação são Fechados : cfrme 
https://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:2957424542334#4530439400346713089
 , uma Aplicação responsável Abre, usa e Fecha os LOBs, e naturalmente após o 
fechamento as estruturas de trabalho criadas para o LOB são liberadas ... Caso 
a aplicação não faça isso, é um BUG, é um LEAK de recurso que vc está 
enfrentando, isso TEM que ser corrigido na Aplicação : é similar á memória que 
vc alocou mas não desalocou no final do uso, aos arquivos em disco que a 
aplicação abriu/criou file handles mas não fechou, etc...

  []s
  
Chiappa