Migrando as tabelas de ID de chamados para Unsigned no GLPI – Behaviors

Uma ação em relação ao problema das IDs Integers do GLPI, que são chaves primárias e estrangeiras no banco de dados, foi tomada.

Após alguns debates por parte da equipe de desenvolvimento da Teclib’, foi definida uma alteração, que por ora, é opcional e não será executada automaticamente nem nas atualizações. Ou seja, é executada da mesma maneira que a migração do banco de dados para InnoDB: Através de um script na console do GLPI.

Devo alertar para 5 fatos importantes a serem considerados antes de executar qualquer comando que altere parâmetros dos bancos de dados:

  1. Sempre comece em uma base de homologação. Nunca em produção;
  2. Backup antes de tudo;
  3. Os plugins utilizados na sua base podem exigir execuções e correções manuais de alterações de IDs, updates em tabelas ou até recriação de constraints.
  4. Você tem acesso a todos os códigos e DEVE revisá-los para se certificar de que não impactarão negativamente no seu ambiente. Não terceirize suas decisões.
  5. Participe da discussão da solução lá no github caso o problema não seja resolvido na sua base.

O problema começou com 2022 pelo fato de um campo integer, utilizado nos IDs de chamados, aceitar caracteres limitados a 2.147.483.647, o que em Janeiro é facilmente ultrapassado por já iniciar em 202201010001 quando utilizado o formato ymd0001 do Behaviors.

Algumas correções de contorno foram sugeridas aqui, e a Teclib’ criou uma solução definitiva para que, quem quiser manter o formato de chamados, possa executar e continuar os IDs de chamados usando o padrão de protocolos com data na ID.

O script é executado da mesma maneira que o InnoDB – através da console do GLPI em pastadoglpi/bin usando o comando php console glpi:migration:unsigned_keys.

Dessa forma o script busca as tabelas que contêm chaves estrangeiras e primárias com formato integer e realiza a alteração para unsigned.

Na prática o script aumenta as possibilidades de IDs ao não mais reservar espaços de bits para números negativos que ocupam bits importantes no banco de dados.


Referência técnica:

Signed integers – YouTube
Unsigned integers – YouTube


Trouxe no vídeo uma maneira de aplicar o pull lá do github através do aplicativo ‘patch’ e como executar o comando de alteração, mais o update em uma das tabelas que traz um valor negativo e, por conta disso, o ‘script’ não consegue alterar o formato da tabela

Comandos utilizados no vídeo

apt-get install patch #instala o aplicativo patch
patch -p1 --dry-run < nomedopatch.patch #testa a integridade do patch 
patch -p1 < nomedopatch.patch #aplica o patch
php console glpi:migration:unsigned_keys #executa a migração das tabelas para unsigned
UPDATE glpi_events SET items_id = '0' WHERE items_id = '-1' AND type = 'system'; #atualiza os campos -1 na tabela glpi_events com tipo system para 0

Referências da solução proposta:

Add migration to use usigned int for primary/foreign keys; see #10262 by cedric-anne · Pull Request #10263 · glpi-project/glpi (github.com)

Você gostaria de ajudar o blog de alguma forma?

➤ Site: https://www.arthurschaefer.com.br
➤ Instagram: https://instagram.com/arthurrschaefer
➤ Facebook: https://facebook.com/arthurschaefercombr
➤ LinkedIn: https://br.linkedin.com/in/arthurramosschaefer
➤ Twitter: https://www.twitter.com/arthurrschaefer
➤ Inscreva-se no Canal: https://www.youtube.com/ArthurSchaefer
➤ Canal no Telegram: https://t.me/arthurschaefer
➤ Baviera TI: https://www.bavierati.com.br
➤ Servicedesk Brasil: https://www.servicedeskbrasil.com.br
➤ Conheça a Teclib Cloud: https://www.arthurschaefer.com.br/glpicloud

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *