1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Duvida Estouro de Lock

Discussão em 'Progress 4GL' iniciado por ueluis, Julho 4, 2015.

  1. ueluis

    ueluis Membro Participativo

    Galera,

    tenho uma nova rotina, onde será necessário fazer vários imports de registros para cada pedido implantado ex:(1000.0000 numeros) para dentro do banco em uma tabela chamada numeração.
    O problema é que por exemplo ao importar a numeração de um pedido de 390.000 un, já está dando estouro de lock.
    aumentei o parametro -L para 250.000 e ainda assim continua.

    faço a importação do txt para tabela temporária e depois da temporária para a tabela numeração.

    como proceder em um caso assim?
  2. renato.schlogel

    renato.schlogel Membro Participativo

    Boa tarde,

    Eu faria assim:
    Passo 1: criaria uma tabela para controlar a transação, com identificador dos registros que estará criado:
    ex: tabela: trans;
    campos: codigoprocesso (um id, da forma que costuma popular, ou uma sequencia).
    data
    hora
    usuario
    status (inicia)

    tabela: itemtrans;
    codigoprocesso (fk trans )
    idtabelaprocesso (chave primaria do registro criado).


    Passo 2: * Criar bloco de transação, para aplicar a transação a cada registro ou conjunto de registros(já fiz algo do tipo, e defini por parâmetro um tempo máximo de transação ).

    * A Cada registro criado, deve ser criado um vinculo com a tabela 'transacao';
    * Deve ser feito um tratamento de erro no bloco da transação, para que se ocorrer algum erro, ele leia os
  3. renato.schlogel

    renato.schlogel Membro Participativo

    Ignore o anterior ;-s

    atualizado:

    Boa tarde,

    Eu faria assim:
    Passo 1: criaria uma tabela para controlar a transação, com identificador dos registros que estará criado:
    ex: tabela: trans;
    campos: codigoprocesso (um id, da forma que costuma popular, ou uma sequencia).
    data
    hora
    usuario
    status (inicia)

    tabela: itemtrans;
    codigoprocesso (fk trans )
    idtabelaprocesso (chave primaria do registro criado).


    Passo 2: * Criar bloco de transação, para aplicar a transação a cada registro ou conjunto de registros(já fiz algo do tipo, e defini por parâmetro um tempo máximo de transação ).

    * A Cada registro criado, deve ser criado um vinculo com a tabela 'itemtrans';
    * Deve ser feito um tratamento de erro no bloco da transação, para que se ocorrer algum erro, ele leia os registro que vocês criou e delete os dados criados.
    * quando concluir setaria o status da trans.situacao = 'concluido'.
    passo 3:
    Ao sair se o trans.situacao for diferente de 'concluido' então apago todos os dados inseridos(lembrar de fazer a deleção dos itens em transação individual.).


    Fiquei sem tempo para fazer um exemplo.
    Talvez isso lhe ajude.

    Ate mais.
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    criar um bloco de trasação é o ideal, pois quando vc sai do bloco, ele libera os LOCKs, basta vc achar onde é o melhor ponto pra fazer.
  5. Eilleen

    Eilleen Membro Ativo

    E se quiser ter certeza de onde começa e termina a transação, nas alterações que fizer, é só gerar o arquivo Xref pelo compilador, que ele mostra direitinho... ;)
  6. renato.schlogel

    renato.schlogel Membro Participativo

    O ponto negativo, de criar apenas um bloco de transação aplicando a cada registro, é que se ocorrer um erro, só será desfeito o registro corrente.

    A estrutura que tentei desenhar acima, seria apenas uma estrutura de transação, controlada pelo programador, onde se ocorrer um erro, é só trata-lo, e desfazer as operações que já foram aplicadas no banco.

Compartilhe esta Página