Tipos de ‘locks’ no Magic xpa


1_system-integration
Dando continuidade a uma série de posts a respeito do uso e configurações de ‘transações’ e ‘locks’ com o Magic xpa (ver anteriores), vamos hoje concluir sobre as configurações de locks.

O lock tratado (referido) até o post anterior é o lock físico (real). Ou seja, uma vez que o programa obteve o lock significa que esta porção de dados está realmente bloqueada para alterações por outros usuários, fisicamente na tabela de dados.

Mas existe outro tipo de lock no Magic xpa, que é o lock lógico.

Este ao contrário, não bloqueia o dado fisicamente na tabela. Ao invés disso, é simulada uma situação para que o programa Magic xpa venha a entender que o dado está protegido contra alterações de terceiros, sem que ele esteja realmente reservado para ele.

Esta simulação é feita com a inclusão de “testes” adicionais na cláusula WHERE de localização do registro, sempre que for necessário realizar um UPDATE ou um DELETE. O lock lógico consiste então, em testar se o registro a ser alterado/excluído não foi modificado (ou até apagado) por alguém, desde a sua última leitura (garantia esta que seria naturalmente obtida com o lock físico).

No Magic xpa nós decidimos se iremos querer ou não um lock. Mas é uma decisão exclusiva do Magic Runtime (Módulo de Execução) se ele será do tipo físico ou lógico. E a regra é a seguinte:

  • Todo dado acessado pelo gateway ODBC, possuirão locks lógicos qdo. solicitados.
  • Todo dado acessado pelos gateways Nativos (Oracle, MSSQL, MySQL, BTrieve, Pervasive, DB2, DB2/400, AS/400, etc…), possuirão locks físicos qdo. solicitados.

Ou seja: se um programa o Magic xpa obter um lock em uma tabela acessada via ODBC, este dado não está bloqueado de verdade. Mas se a tabela for acessada via gateway (driver) nativo, estará.

O lock lógico aumenta a disponibilidade do dado, já que ele não estará reservado exclusivamente para um determinado usuário por um determinado tempo, mas também aumenta a possibilidade de perda da atualização (não poder concretizar um UPDATE ou DELETE pq. o dado foi modificado por outro usuário).

O teste adicional que o Magic xpa realiza para implementar o lock lógico é controlado pela propriedade Identify Modified Row. Esta propriedade, que pode ser definida de forma genérica nas definições de fontes de dados:

Imagem_001

  ou de forma mais específica diretamente no programa que utiliza a tabela:

Imagem_002

determina o quão detalhada (e acurada) será esta verificação.

A propriedade Identify Modified Row não é utilizada apenas para os casos de lock lógico. Ela é analisada também nos casos de lock físico, antes de se obter o lock, para garantir que o dado a ser bloqueado ainda está intacto.

Estas são, portanto, as diferenças entre os locks físicos e lógicos existentes no Magic xpa.

Fique ligado nesta série.

Manoel Frederico - Gerente de Produto e Magic Evangelista
Manoel Frederico – Gerente de Produto e Magic Evangelista

4 comentários

  1. Teremos sequência deste post?
    Daria para continuar com os detalhamentos sobre as combinações entre
    Transaction Mode e begin?

    1. Os pedidos de ‘lock’ do Magic são sempre em nível de ‘registro’ qdo. se trabalha com bases SQL.

      Qdo. se trabalha com bases ISAM, podem também ser em nível de tabela cfe. a configuração ‘Access’ & ‘Share’ ( http://community.magicsoftware.com/en/library?book=en/uniPaaS/&page=Data_Management/SQL_Considerations/Table_Access_and_Share_Mode.htm )

      Esta é a regra geral, mas pode ter exceções em função de qual banco de dados está sendo utilizado.

      O MSSQL por exemplo, pode decidir bloquear a tabela inteira se a qtde. de registros bloqueados for quase o total de registros existentes.

      O Oracle possui a opção de ‘Lock Table’ explícita, como mencionado no link acima.

      E alguns bancos de dados podem decidir bloquear uma ‘página’ de dados, incluindo registros que estajam perto (antes & depois) do registro que se deseja realmente bloquear.

      Em bases SQL, o total de registros bloqueados será o total de registros acessados durante uma transação de ‘escrita’.

Deixe um comentário

O seu endereço de e-mail não será publicado.