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 Lock em tabela

Discussão em 'Progress 4GL' iniciado por erickles, Julho 22, 2014.

  1. erickles

    erickles Membro Participativo

    Boa Tarde pessoal,

    Estou com uns problemas referente a lock de tabela. Em alguns pontos do EMS, criamos registros que serão lidos posteriormente por programas com TIMER (chamados de "pescadores"). Neste programa pescador, tem um "for each" que lê todos os registros e faz gravação nos mesmos. Colocar um "EXCLUSIVE-LOCK" no for each amenizaria os problema gerados de "LOCK"?
  2. Eilleen

    Eilleen Membro Ativo

    Boa tarde!
    O que você chama de problemas de lock é aparecer mensagem que o registro está sendo usado por outro usuário?

    Se for isso, um for each com EXCLUSIVE-LOCK pode até aumentar o problema, uma vez que ele aloca todos os registros da busca e só libera depois que ela termina, ao contrário do SHARE-LOCK que só aloca os registros que são usados.

    Para diminuir o problema, uma forma eficaz é dar FOR EACH com NO-LOCK e dentro dele buscar o registro corrente com EXCLUSIVE-LOCK... assim você somente aloca o registro que está sendo processado no momento e o libera em seguida... Teoricamente isso seria o mesmo que usar FOR EACH com SHARE-LOCK, mas com o FIND (usando EXCLUSIVE-LOCK NO-ERROR NO-WAIT) é possível verificar se o registro já está alocado (IF LOCKED) e fazer um laço para ir testando se o registro foi desalocado pra poder usar. Também dá pra colocar limites nesse laço, pra rodar X vezes ou por X tempo, etc... Assim resolve tanto o problema de prender registros, como o de usar registros presos...

    Era isso que queria saber?
    ueluis e Agnaldo curtiram isso.
  3. erickles

    erickles Membro Participativo

    Boníssima explicação, era justo isso que precisava, muito obrigado!
  4. Eilleen

    Eilleen Membro Ativo

  5. fernandofarah

    fernandofarah Membro Participativo

    Eilleen, bom dia.

    Poderia postar um exemplo? Sabe porque, fiquei meio na dúvida do seguinte:

    Se eu fizesse assim:

    Código:
    /* tabela na qual preciso evitar o lock */
    for each tabela1 no-lock:
    /* dando o find exclusive na mesma tabela */
    find tabela1 exclusive-lock where condicao = condicao no-error no-wait.
    
    disp tabela1 with 1 col width 444.
    end.
    
    Ele não reclamaria que não seria possível um find tabela1 dentro de um for each com a mesma tabela?

    valeeu e desculpe reativar esse tópico, mas é que veio essa dúvida.

    :D
  6. Eilleen

    Eilleen Membro Ativo

    Bom dia, Fernando!

    Para não ter problemas vc tem que usar um buffer da tabela...
    Estou no celular agora, a tarde posto um exemplo pra vc.. blz?

    Até logo!

Compartilhe esta Página