A questão dos LOBs é que embora eles realmente tenham limites máximos altíssimos, as linguagens utilizadas no RDBMS (ie, SQL e PL/SQL) possuem limites menores para o tanto de informação que conseguem enviar/receber do database de uma só vez (varia de acordo com a versão, mas normalmente é de 4000 bytes para SQL e 32767 para PL/SQL) : assim sendo, vc tem que ** quebrar ** a informação a receber/enviar de/para os seus LOBs em pedaços de tamanho adequado, okdoc ? Portanto sim, vc pode ter trocentros gigabytes no teu LOB no total, mas lidos/gravados de 4000 em 4000 bytes de cada vez (ou de 32767 em 32767 bytes de cada vez, se for PL/SQL).... certo ? Em cima disso, o que o Analista está supondo pelo que entendi é que a tua aplicação está usando as APIs da linguagem SQL e por falha de programação em alguns casos ao invés de enviar pro banco pedaços de 4000 bytes está enviando pedaços de 4001 bytes, E por bug do RDBMS ao invés de rejeitar o pedaço de comprimento inválido ele está dando ORA-600, é isso.... Se for uma aplicação desenvolvida in-house, Confirme com os programadores se eles estão usando a metodologia apropriada ao trabalhar com LOBs, enviando um pedaço de cada vez da informação, E se for aplicação de fornecedor, acione o Suporte do fornecedor para verificar se eles tem notícia de bug desse tipo na Aplicação.... Outra ação que pode ser MUITO esclarecedora é vc pedir um TRACE (sem tkprof, só o trace bruto) de uma execução e enviar isso pro Suporte - lá fica registrado direitinho cada operação que a aplicação fez no banco - , ou mesmo (com a Ajuda do Suporte Oracle) ativar um evento que gere dump na inserção de um LOB.... Com essas ações vc Comprova ou Rejeita a Suposição do analista da Oracle... []s Chiappa OBS : outra coisa que vc pode fazer é testar por corrupção nesses LOBs - procure no metalink por LOB CORRUPTION que vc acha algumas notas com procedimentos para isso.....
---Em oracle_br@yahoogrupos.com.br, <raffaell.t...@yahoo.com> escreveu: Chiappa, obrigado pelas ficas, ja homologuei o procedimento no database de homologação do SECURE FILES, enquanto isso recebi uma resposta do Suporte da Oracle no qual fiquei sem entender, poderia me ajudar? Eles falaram o seguinte: From the supplied trace files here, this looks to be a problem in the application code, in that it is attempting to update a column with a value greater than the maximum defined length of the column. For example, we see the failing statement as: UPDATE TABELA_XUXA SET DTEXP = :DTEXP , DTIMP = :DTIMP , INDEXP = :INDEXP , INDIMP = :INDIMP , TXT = :TXT , TXTWORD = :TXTWORD , TXTPDF = :TXTPDF WHERE CODDOC = :CODDOC AND NUMSEQ = :NUMSEQ AND CODLOCALRESP = :CODLOCALRESP In the bind values for this we see bind number 4 which equates to the 'TXT' column as being defined as a VARCHAR2 of length 4000 bytes, but the actual bind variable length is 4001 bytes, and so this overflows the column and hence corrupts the subsequent lob column. Therefore you need to correct the application code so that it uses a character value of 4000 bytes or less. Eu dei um desc na tabela_XUXA e a mesma me trouxe o seguinte: Name Null? Type ----------------------------------------------------- -------- ------------------------------------ CODDOC NOT NULL NUMBER(10) NUMSEQ NOT NULL NUMBER(4) TXT CLOB TXTWORD BLOB CODLOCALRESP NOT NULL NUMBER(4) DTEXP DATE DTIMP DATE INDEXP VARCHAR2(1) INDIMP VARCHAR2(1) TXTPDF BLOB INDVOTOVISTA VARCHAR2(1) INDVOTOCONDUTOR VARCHAR2(1) O campo TXT é CLOB, e não VARCHAR2 como o atendente da Oracle falou acima, e o tamanho máximo suportado por uma coluna do tipo CLOB e BLOB é de 8TB, me corrijam se estiver errado. Não sei se esse exemplo que o rapaz deu, é um exemplo fictício para tentar demonstrar o que está ocorrendo, mas se tratando de um campo LOB, acho difícil alguém conseguir atualizar um dado maior do que uma coluna do tipo LOB suporta. Em Quarta-feira, 7 de Maio de 2014 14:14, "jlchia...@yahoo.com.br" <jlchia...@yahoo.com.br> escreveu: Bom, eu acho que vc tem duas questões diferentes em mãos - causalmente aconteceram no mesmo timeframe, mas pode muito bem ser que não estejam relacionadas com causa e efeito, ie : que o ORA-600 foi foi causado por eventos disparados pelo UPDATE é certo, mas Não É certo que seja o ORA-600 que está causando o enqueue, okdoc ?? Vamos tratar separadamente, então... Começando com o ORA-600 : não tenho outro conselho que não seja o default, ie : usar a tool de lookup de ORA-600 no metalink *** E ***, mais importante de tudo, abrir um Chamado no Suporte Oracle .... Sobre enqueue em LOBs , meu conselho principal é que vc analise com carinho a possibilidade de usar SECUREFILES para as tablespaces que contém os LOBs, elas via de regra são Muito mais eficientes em manutenção/alocação de extents do que BASICFILES.... Em segundo lugar, vc VAI abrir um Chamado no Suporte para comprovar que os bugs já conhecidos (e em princípio já sanados) comuns em LOBs não estão re-surgindo no seu ambiente (principalmente os bugs 4450406, 5636728 e o 5565887, entre outros : não é comum bugs tão antigos resurgirem (após um PSU, após alguma alteração de ambiente) mas é o Suporte que vai confirmar ou negar isso... Como WORK-AROUND, vc pode experimentar deixar alguns tantos muitos extents já pré-alocados (com muitas execuções de ALLOCATE EXTENT), alterar params de storage / controle de alocação nos blocos (e eventualmente adicionar FREELISTS), experimentar inverter o tipo de controle de extents da tablespace (ie, se hoje é ASSM mudar para manual/MSSMN, se hoje é manual mudar para ASSM).... Vc também pode aproveitar esse mesmo Chamado vc aproveita para pedir Autorização para implementar coisas como o param _bump_highwater_mark_count , ás vezes ajuda, mas Nem em Sonhos Pense em fazer isso em prod sem Autorização, que a Oracle corta o teu Suporte sem dó nem pena se descobrir... []s Chiappa