Verificação de CRC - parte I

Escrito por Marcos Kirchner em 13 de outubro de 2008, 13:56h

Nos posts da série de portabilidade de r-codes verificamos as regras existentes para que um r-code gerado em um ambiente possa executar em outro ambiente. Estas regras de portabilidade estão relacionadas ao formato físico do r-code, que muda conforme a plataforma utilizada para compilação.

Existe uma outra validação de compatibilidade que o Progress realiza em tempo de execução para que alterações no esquema (estrutura) do banco de dados não invalidem o conteúdo programa. Esta validação chama-se CRC (cyclic redundancy check).

O CRC é um cálculo matemático (uma função hash) normalmente utilizado para detectar corrupções de dados / programas. O Progress o utiliza para detectar alterações no dicionário de dados. Cada objeto do banco de dados (tabelas, índices) possui um valor de CRC associado, e este valor é alterado quando a estrutura do objeto é alterada.

Durante a compilação de um programa, o Progress inclui no r-code o o valor do CRC dos objetos que o programa referencia. Antes de o programa ser executado, o CRC armazenado no r-code é comparado com o CRC dos objetos armazenados no banco de dados utilizado para execução. Se os valores não forem compatíveis, serão gerados os erros:
** CRC for Customer does not match CRC in customer.p. Try recompiling. (1896)
** CRC for index 'Country-Post' on table 'Customer' does not match CRC in procedure 'customer.p'. Try recompiling. (7968)

Os erros 1896 e 7968 correspondem, respectivamente, a uma falha de validação de CRC para uma tabela e um índice. A mensagem de erro apresenta o nome do objeto (tabela / índice) e o nome do programa onde a falha de CRC ocorreu.

A causa mais comum para o erro de CRC em ambientes Datasul é a atualização de algum pacote que contenha alterações de dicionário de dados. Se forem atualizados apenas os programas, ou apenas aplicadas as alterações de dicionário, o CRC contido nos programas (r-codes) não será o mesmo do CRC associado aos objetos do banco de dados, e o erro será gerado. Neste caso, deve-se verificar se os programas e o dicionário de dados foram atualizados corretamente. Alterações indevidas na definição de esquema do banco de dados também podem causar erros de CRC, e neste caso a recomendação é restaurar um backup de antes da alteração.

No próximo post deste série verificaremos quais alterações no banco de dados ocasionam alteração de valores de CRC.

Categorias: Ambiente | Atualização de Pacote

Tags: , , ,

Comentar




biuquote
  • Comentário
  • Pré-visualização
Loading


Acesso LogMeIn

Informe o código PIN: