Seguinte : um dos motivos que me levaram a preferir o banco Oracle é 
a sua extrema estabilidade nos conecitos básicos , como transação, a 
chance de um DML que foi comitado por si só  "sumir" do banco eu 
diria (baseado no que eu vi, na experiência que acumulei até hoje),  
que é de 0,00000001%, certo ? Bug que faça "perder" registros até 
hoje afaik foi mais raro q tudo, teve uns poucos pouquíssimos que 
fiquei sabendo...Então a esmagadora e absoluta maioria das chances 
quando vejo uma situação tipo a sua são mesmo de bug na aplicação, os 
mais prováveis :

a) neguinho faz absurdos do tipo :

BEGIN
 ....
    update...
    ..
    if condição then 
       x := 123456;
    ....
    insert into tabela....
    ...
    montes de outrso comandos...
    ...
    ...
EXCEPTION
   when others then null;
   
   
==>> OU SEJA, está dando algum erro e o when null mascara !!. No 
exemplo acima, inclusive, até se o erro não foi de DML (digamos, x é 
number de 2) o insert não será feito, pois houve DESVIO ... Erros de 
lógica do tipo vc só "pega" é ** LIMPANDO ** o código (tirando essas 
exceptions abusrdas do tipo) e debugando,/executando ** EXATAMENTE ** 
com os mesmo valores/parâmetros


b) triggers e SQL recursivo do tipo : se tiver sql do tipo mexendo 
numa das outras tabelas, pode interferir...

c) variação de a), se o tal "procedimento" for executado a partir 
duma aplicação-cliente, é o CLIENTE que recebe o código/retorno de 
eror, se ele o "mascarar" também, babau...


** feita essa limpeza do código **, aí sim é ter-se um log dos erros 
NO BANCO (alert.log *** não serve *** !!!), tendo-se uma trigger 
tipo :

DECLARE
   l_sql_text ora_name_list_t;         -- array com o texto do SQL em 
execução
   l_n        number           := 0;   -- contador do array do texto 
   --
   v_id number;                        -- valor da sequence q 
alimenta o id do erro
BEGIN
   FOR n IN 1..ora_server_error_depth
   LOOP
      --
      select chiappa.log_errors_seq.nextval into v_id from dual;
      --
      insert into chiappa.log_errors_tab values (v_id,
                                                  sysdate,
                                                  ora_login_user,
                                                  
ora_client_ip_address,
                                                  ora_server_error(n),
                                                  ora_server_error_msg
(n));
      insert into chiappa.LOG_ERRORS_SESSION_tab 
          (select sid,
                  serial#,
                  process,
                  module,
                  machine,
                  terminal,
                  program,
                  type,
                  client_info,
                  row_wait_obj#,
                  row_wait_file#,
                  row_wait_block#,
                  row_wait_row#,
                  logon_time,
                  last_call_et,
                  pdml_enabled,
                  pq_status,
                  log_errors_seq.currval 
             from v$session
            where audsid=userenv('sessionid')
          );
      --
      l_n := ora_sql_txt( l_sql_text );
      if l_n <> 0 then -- evito casos de erros sem texto de SQL, como 
um DESC errado    
         for i in 1 .. l_n
         loop
            insert into chiappa.LOG_ERRORS_SQL_TAB values 
(log_errors_seq.currval, l_sql_text(i), i );
         end loop;
      end if;   
   END LOOP;
end log_errors_trig;



==> aí é altíssima a chance de que vc VAI pegar o problema, certo ??

[]s

 Chiappa
 

--- Em oracle_br@yahoogrupos.com.br, "ESTUDO" <[EMAIL PROTECTED]> 
escreveu
> bom dia
> 
> O problema é o seguinte: Existe um procedimento que faz 
resumidamente o que tem abaixo:
> 
> 
> inicio da transaçao
>  insere valor na tabela 1;
>  insere valor na tabela 2;
>  commit;
> final da transação.
> 
> O que acontece é que percebeu que um determinado registro foi 
gravado na tabela 1 e nao gravou na tabela 2.
> comprova-se isso  vendo a tabela de auditoria.
> O horario da ocorrencia foi exatamente 13:55:00
> Então fui buscar algo no log, e a unica ocorrencia perto do horario 
foi a seguinte:
> 
> Fri Nov 18 13:55:07 2005
> Thread 1 advanced to log sequence 12561
>   Current log# 2 seq# 12561 mem# 
0: /oracle/database/prod/log/redo02.log
> Fri Nov 18 14:27:04 2005
> Thread 1 advanced to log sequence 12562
>   Current log# 3 seq# 12562 mem# 
0: /oracle/database/prod/log/redo03.log
> Fri Nov 18 16:50:16 2005
> 
> Como se explica isso?
> Não existem objetos inválidos.
> Não é falta de privilegios,
> ja simulamos a ocorrencia e não acontece de novo
> Oracle 9.2.0.5  Linux
> 
> Obrigada
> 
> Cris
> 
> [As partes desta mensagem que não continham texto foram removidas]




--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------_____________________________________________________________________
Area de download do grupo - http://www.4shared.com/dir/101727/a4dcc423  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a