[firebase-br] FB 5.0.2.1532 - Erro operation

Osvaldo G. Da Cruz Júnior - NetNúcleo junior em netnucleo.com.br
Quarta Janeiro 22 10:16:28 -03 2025


Gladiston,

Realmente estava utilizando o "copiar / colar" e nunca tinha percebido que
tinha esse controle na transação.
Utilizo o básico de uma conexão, ou seja, sem utilizar o  *FbTransaction
transaction = connection.BeginTransaction()*
Qual método devo utilizar apenas para fazer consulta? *IsolationLevel*.*?*

Veja os detalhes:

   private void CarregaGrid()
   {
  string stringConexao = "Data
Source=127.0.0.1;Port=3055;User=SYSDBA;Password=masterkey;charset=WIN1252;Dialect=3;Database=c:\Arquivos\BANCO.FDB"
       using (FbConnection conexao = new FbConnection(stringConexao))
           try
           {
               StringBuilder sql = new StringBuilder();
               sql.Append("select PAI, PAI_NOME, MAE, MAE_NOME,
PROBABILIDADE ");
               sql.Append("  from SP_DNA_LAUDO_RETESTE_11(@LOTE_ANIMAL,
@FINALIDADE, @QUALIFICACAO)");
               FbCommand comando = new FbCommand(sql.ToString(), conexao);
               comando.Parameters.Add("@LOTE_ANIMAL", hfdLoteAnimal.Value);
               comando.Parameters.Add("@FINALIDADE",
ddlFinalidade.SelectedValue);
               comando.Parameters.Add("@QUALIFICACAO",
ddlQualificacao.SelectedValue);
               conexao.Open();
               FbDataAdapter adapter = new FbDataAdapter(comando);
               DataTable dt = new DataTable();
               adapter.Fill(dt);
               Session.Add("TEMP_SESSAO_GRIPADRAO_DT", dt);
               griPadrao.DataSource = dt;
               griPadrao.DataBind();
               griPadrao.SelectedIndex = -1;
           }
           catch (Exception erro)
           {
               string error = erro.Message;
               if (error.Contains("MENSAGEM")) { Master.ShowMessage(error);
} else { Master.ShowMessage("Seleção de re-teste não pode ser realizada.");
}
               Log logErro = new Log();
               logErro.GravaLogFile(Session["Sistema"].ToString(),
Session["Usuario"].ToString(), "ERRO", "ID: " + hfdLoteAnimal.Value + " -
Finalidade: " + ddlFinalidade.SelectedValue + " - Qualificação: " +
ddlQualificacao.SelectedValue + " - Erro: " + error, "selecao de re-teste -
grid", "selecionar", Request.UserHostAddress);
           }
           finally
           {
               conexao.Close();
           }
   }

*** Esse é o conteúdo da procedure no FB 5:

*/* Já percebi que preciso melhorar o processo de fazer o SELECT, mas
gostaria de entender o motivo do erro. */*

SET TERM ^ ;

create or alter procedure SP_DNA_LAUDO_RETESTE_11 (
    I_LOTE_ANIMAL DM_BIGINT,
    I_QUALIFICACAO DM_SMALLINT)
returns (
    PAI DM_BIGINT,
    PAI_NOME DM_VARCHAR_255,
    MAE DM_BIGINT,
    MAE_NOME DM_VARCHAR_255,
    PROBABILIDADE numeric(15,8))
as
declare variable V_MACHO integer;
declare variable V_FEMEA integer;
begin
  select count(SEXO) from DNA_LAUDO_RETESTE where
LOTE_ANIMAL=:I_LOTE_ANIMAL and SEXO='M' into :V_MACHO;
  select count(SEXO) from DNA_LAUDO_RETESTE where
LOTE_ANIMAL=:I_LOTE_ANIMAL and SEXO='F' into :V_FEMEA;

      if (:V_MACHO <= 0) then
        exception MENSAGEM 'É necessário ter no mínimo um animal Macho para
análise.#FIM#';
      if (:V_FEMEA <= 0) then
        exception MENSAGEM 'É necessário ter no mínimo um animal Fêmea para
análise.#FIM#';
      for
      select PAI, PAI_NOME, MAE, MAE_NOME, PROBABILIDADE
        from (
      select PAI, PAI_NOME, MAE, MAE_NOME, count(coalesce(PROBABILIDADE,0))
PROBABILIDADE
        from (
        select
               RT.ANIMAL PAI,
               ANI_PAI.NOME || case when ANI_PAI.REGISTRO is not null then
' ['||trim(ANI_PAI.REGISTRO)||']' else '' end as PAI_NOME,
               RTF.ANIMAL MAE,
               ANI_MAE.NOME || case when ANI_MAE.REGISTRO is not null then
' ['||trim(ANI_MAE.REGISTRO)||']' else '' end as MAE_NOME,
               (select PROBABILIDADE from
SP_PROBABILIDADE_TRIO(PER.MARCADOR, coalesce(PER.ALELO1,0),
coalesce(PER.ALELO2,0), coalesce(MAE.ALELO1,0), coalesce(MAE.ALELO2,0),
coalesce(PAI.ALELO1,0), coalesce(PAI.ALELO2,0))) PROBABILIDADE
          from DNA_MARCADOR MAR
          left join DNA_LAUDO_RETESTE RT on RT.LOTE_ANIMAL=:I_LOTE_ANIMAL
and RT.SEXO='M'
          left join DNA_LAUDO_RETESTE RTF on RTF.LOTE_ANIMAL=RT.LOTE_ANIMAL
and RTF.SEXO='F'
          left join DNA_PERMANENTE PAI on PAI.ANIMAL=RT.ANIMAL and
PAI.marcador=MAR.MARCADOR
          left join DNA_PERMANENTE MAE on MAE.ANIMAL=RTF.ANIMAL AND
MAE.MARCADOR=MAR.MARCADOR
          left join DNA_LOTE_ANIMAL LOT_ANI on
LOT_ANI.LOTE_ANIMAL=RT.LOTE_ANIMAL
          left join DNA_TRIAGEM_ANIMAL TRI_ANI on
TRI_ANI.TRIAGEM_ANIMAL=LOT_ANI.TRIAGEM_ANIMAL
          left join PAD_ANIMAL ANI_PAI on ANI_PAI.ANIMAL=RT.ANIMAL
          left join PAD_ANIMAL ANI_MAE on ANI_MAE.ANIMAL=RTF.ANIMAL
          left join PAD_ANIMAL ANI on ANI.ANIMAL=TRI_ANI.ANIMAL
-- 06/10/2022 - Douglas solicitou para comparar sobre o resultado e não do
arquivo permanente
          left join DNA_LOTE_RESULTADO PER on PER.LOTE_ANIMAL =
:I_LOTE_ANIMAL and PER.MARCADOR = MAR.MARCADOR
         where MAR.situacao = 'A'
           and RT.APTO = 'S' AND RTF.APTO = 'S'
           and (((:I_QUALIFICACAO=99)
                or ((:I_QUALIFICACAO=15) and (RT.QUALIFICA >= 15))
                or ((:I_QUALIFICACAO=14) and (RT.QUALIFICA >= 14))
                or ((:I_QUALIFICACAO=13) and (RT.QUALIFICA >= 13))
                or ((:I_QUALIFICACAO=12) and (RT.QUALIFICA >= 12))
                or ((:I_QUALIFICACAO=11) and (RT.QUALIFICA >= 11))
                or ((:I_QUALIFICACAO=10) and (RT.QUALIFICA >= 10))
                or ((:I_QUALIFICACAO=9) and (RT.QUALIFICA >= 9))
                or ((:I_QUALIFICACAO=8) and (RT.QUALIFICA >= 8)))
           or ((:I_QUALIFICACAO=99)
                or ((:I_QUALIFICACAO=15) and (RTF.QUALIFICA >= 15))
                or ((:I_QUALIFICACAO=14) and (RTF.QUALIFICA >= 14))
                or ((:I_QUALIFICACAO=13) and (RTF.QUALIFICA >= 13))
                or ((:I_QUALIFICACAO=12) and (RTF.QUALIFICA >= 12))
                or ((:I_QUALIFICACAO=11) and (RTF.QUALIFICA >= 11))
                or ((:I_QUALIFICACAO=10) and (RTF.QUALIFICA >= 10))
                or ((:I_QUALIFICACAO=9) and (RTF.QUALIFICA >= 9))
                or ((:I_QUALIFICACAO=8) and (RTF.QUALIFICA >= 8))))
           and (
                (coalesce(PER.ALELO1,0)>0)
             or ((coalesce(PER.ALELO2,0)>0))
             or ((coalesce(MAE.ALELO1,0)>0))
             or ((coalesce(MAE.ALELO2,0)>0))
             or ((coalesce(PAI.ALELO1,0)>0))
             or ((coalesce(PAI.ALELO2,0)>0))
               )
         order by TRI_ANI.ANIMAL, RT.ANIMAL, RTF.ANIMAL, MAR.MARCADOR
         )
         where PROBABILIDADE > 0
         group by 1, 2, 3, 4
         )
         where ((:I_QUALIFICACAO=99)
                or ((:I_QUALIFICACAO=15) and (PROBABILIDADE >= 15))
                or ((:I_QUALIFICACAO=14) and (PROBABILIDADE >= 14))
                or ((:I_QUALIFICACAO=13) and (PROBABILIDADE >= 13))
                or ((:I_QUALIFICACAO=12) and (PROBABILIDADE >= 12))
                or ((:I_QUALIFICACAO=11) and (PROBABILIDADE >= 11))
                or ((:I_QUALIFICACAO=10) and (PROBABILIDADE >= 10))
                or ((:I_QUALIFICACAO=9) and (PROBABILIDADE >= 9))
                or ((:I_QUALIFICACAO=8) and (PROBABILIDADE >= 8)))
          order by PROBABILIDADE desc,MAE_NOME,PAI_NOME
         into :PAI,
              :PAI_NOME,
              :MAE,
              :MAE_NOME,
              :PROBABILIDADE
      do
        suspend;
end^

SET TERM ; ^







Osvaldo *Júnior* <junior em netnucleo.com.br>
Sócio Proprietário / Analista de Sistemas
(34)3077-1573 / (34) 9.9269-3333
Skype: osvaldo.junior
NetNúcleo.com.br <http://www.netnucleo.com.br> NetBovino.com.br
<http://www.netbovino.com.br>


Em ter., 21 de jan. de 2025 às 15:11, Gladiston Santana <
gladiston.santana em gmail.com> escreveu:

> Dá uma olhada no seu programa para ver qual o método de transação que
> anda usando, eu vejo em alguns grupos o pessoal copiando/colando sem nem
> saber o que é cada tipo de transação. Por exemplo, se usar Serializable,
> vc mata qualquer paralelismo e concorrência que exista, fica todo mundo
> aguardando  quem abriu primeiro encerrar  a transação (ou exceder o timeout
> com uma mensagem possivelmente aleatória como a sua).
>
>
> Em qui., 16 de jan. de 2025 às 16:29, Osvaldo G. Da Cruz Júnior -
> NetNúcleo via lista <lista em firebase.com.br> escreveu:
>
>> Prezados,
>>
>> Informações do servidor:
>>
>> OS: Windows Server 2022
>> Server: running (Super Server)
>> Version:
>>
>> *WI-V5.0.2.1532 Firebird 5.0 HQbirdPrograma desenvolvido em C# Asp.net
>> Framework 4.8*Firebird ADO.NET data provider - Versão 9.1.1.
>> Conexão string: Data
>>
>> Source=localhost;Port=3050;User=SYSDBA;Password=masterkey;charset=WIN1252;Dialect=3;Database=c:\Arquivos\BANCO.FDB;Packet
>> Size=8192"
>> Tamanho da base: 24GB
>>
>> Erro: " *operation=-1964273576 Nome do parâmetro: operation*"
>>
>> Percebi que o erro ocorre uma consulta que está demorando bastante (3
>> minutos) e realmente preciso otimizá-la, mas gostaria de entender e ter
>> mais informações sobre a causa real. Se o erro é do Firebird ou do
>> Provider.
>>
>> Quando o erro ocorre, todo o sistema começa também a apresentar problemas
>> em todas as consultas ao banco de dados, mas com mensagem "aleatórias' do
>> operation. Exemplo: "
>> * operation=719761414Nome do parâmetro: operation" *ou
>> *"operation=-1723256783 Nome do parâmetro: operation"*
>>
>> * Este erro também ocorreu no Firebird 2.1 e foi um dos motivos que levou
>> a
>> fazer a atualização para o FB 5.
>>
>>
>>
>> Osvaldo *Júnior* <junior em netnucleo.com.br>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas:
>> http://www.firebase.com.br/pesquisa_lista.html
>>
>
>
> --
> --
>


Mais detalhes sobre a lista de discussão lista