[oracle_br] Re: Procedure com erro

2016-07-11 Por tôpico germanopac...@gmail.com [oracle_br]
Chiappa, 

 Isso mesmo.
 Obrigado pela excelente explanação.
 

 []s


[oracle_br] Re: Procedure com erro

2016-07-11 Por tôpico germanopac...@gmail.com [oracle_br]
Chiappa, 

 Excelente explanação. Vc tem toda razão quando fala ref. à verificação de 
hardware inclusive, pois de nada adianta corrigir o bloco corrompido se isso 
for gerado por memória ou disco bugado, em tese, vai resolver, depois acontece 
de novo.
 Quanto ao patch, correto de novo.
 

 Obrigado pela explanação e vou utilizar da forma como vc coloca mesmo.
 

 Abraços,
 



[oracle_br] Re: Procedure com erro

2016-07-11 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Blz ? Antes de responder, eu ** tenho que observar que o DBMS_REPAIR.CHECK é ** 
uma ** das maneiras de se checar por corrupção : vc TEM que usar várias, pois 
as Dieferentes ferramentas vão te verificar diferentes tipos de corrupção - 
assim sendo, além dela vc ** VAI ** ter que necessariamente usar Também o 
dbverify (tanto ONLINE quanto OFFLINE - algo que MUITA GENTE esquece!), ** VAI 
** usar o analyze table validate structure, um export full (só pra fazer a 
leitura geral de tudo), pelo RMAN fazendo primeiro um  BACKUP VALIDATE e depois 
um  BACKUP VALIDATE CHECK LOGICAL DATABASE ARCHIVELOG ALL, E DEPOIS Óbvio que 
vai usar as tools que tiver no Sistema Operacional para (com banco Aberto no 
caso das não-destrutivas/que não alteram nada, E com o banco FECHADO nas 
outras) procurar por falhas eou olhar logsmsgs de sistema ref.  disco, 
filesystem, memória e hardware em geral SE vc está confiando Só e Apenas no 
DBMS_REPAIR,CHECK para identificar corrupção, vc está fazendo um serviço 
INCOMPLETO aí, blz ? fechado ?

 Isso posto, a sua resposta : um ORA-600 *** não é *** para ser tratado como 
uma Exceção (ie, algo Possível e passível de ocorrer) , mas sim indica um BUG, 
de pleno direito, okdoc ? É ERRO mesmo, então vc TEM que antes de mais nada 
fazer uma pesquisa por BUGs abertos na sua versão e no seu SO - dado que tua 
versão 11.2.0.1 indica que NENHUM PATCHSET (e talvez nenhum patch de forma 
geral ?) nunca  foi aplicado nesse ambiente, chances existem de que seja isso 
mesmo, Verifique, pois Provavelmente até já deve existir ou bugfix ou 
workaround... 
  
  Como vc diz que ao informar a string com o nome a rotina em tese funciona, 
Provavelmente deve ser um bug de referência no PL/SQL , então o Workaround 
óbvio é , ao invés de ter um loop passando por ref o valor, gere um script com 
as n linhas que vc quer, mais ou menos tipo (se vc for usar sql*plus) :
  
  
delete from cerv.log10 ;
variable num_corrupt number;
select 'sys.DBMS_REPAIR.CHECK_OBJECT ( SCHEMA_NAME => ' || chr(39) || 'CERV' || 
chr(39) || ',  OBJECT_NAME =>' || table_name 

 || ',  REPAIR_TABLE_NAME => ' || chr(39) || 'REPAIR_TABLE' || chr(39) || ',  
CORRUPT_COUNT =>:num_corrupt'  as linha_comando
 table_name from user_tables where 1=1   and table_name not in ( select 
view_name from user_views)  ;
 
===> Isso te geraria uma lista com as N chamadas para o DBMS_RAPAIR (uma pra 
cada tabela) , é só jogar essa lista prum arquivo-texto (via SPOOL, 
provavelmente), salvar esse arquivo-texto com extensão .SQL e executá-lo como 
um script de comandos... 
 Uma variação da técnica é passar a string gerada para cada chamada pra um 
EXECUTE IMMEDIATE, pra já sair executando ao invés de salvar em disco o texto 
com os comandos - eu gosto mais de gerar o texto em um arquivo porque é mais 
fácil de debugar E já tou com ele na mão se precisar repetir e/ou se precisar 
executar só uma parte, mas vai do gosto...
 
 OBS : eu NEM PRECISO DIZER, imagino, que o código acima é PSEUDO-CÓDIGO mais 
que qquer outra coisa, é só uma SUGESTÃO, não é de forma NENHUMA código pronto 
pra sair executando, okdoc ??
 
  []s
  
Chiappa