Problemas com valores de auto incremento

Olá,
Nosso Koha está apresentando a seguinte mensagem e nossa TI não está conseguindo solucionar o problema:

Alguém sabe como resolver?

1 curtida

Olá Karin.
Esse é um problema que vem afetando muitas instalações do Koha. É um problema que não foi resolvido ainda na instalação do Koha, mas a comunidade desenvolveu um script para solucionar o problema. É necessário acessar o servidor do banco de dados para resolver. Os passos são:

1 - Limpar as tabelas que causam o erro. Primeiro, acessar “Mais > Sobre o Koha > Informações do sistema”. Nessa aba, são destacados os IDs que estão causando o problema, e as duas tabelas do banco de dados que estão causando o conflito (com o padrão de nomes: “tabela”; e para a tabela de itens removidos: “old_tabela” ou “deletedtabela”). Para realizar a limpeza, deve-se remover os itens da tabela “old_tabela”, que possuem o identificador informado em “Informações do sistema”. A remoção pode ser feita pelo seguinte comando (inserido dentro da base de dados correspondente ao koha):

DELETE FROM old_tabela WHERE identificador IN (inserir aqui os identificadores apresentados no Koha, separados por vírgula);

Nesse passo, deve-se substituir “old_tabela” pelo nome da tabela correspondente (exibida no Koha) e “identificador” pelo identificador usado na tabela. Abaixo segue a lista de possíveis tabelas de erro e seus respectivos identificadores:

  • old_issues : issue_id
  • old_reserves : reserve_id
  • deleteditems : itemnumber
  • deletedbiblio : biblionumber
  • deletedborrowers : borrowernumber

2 - No servidor do banco de dados do Koha, acessar o arquivo /etc/mysql/my.cnf ou /etc/mysql/mariadb.conf.d/50-server.cnf, e inserir o seguinte comando, abaixo do trecho [mysqld]:

init-file=/var/lib/mysql/init-file_koha.sql

3 - Criar o arquivo init-file_koha.sql no diretório /var/lib/mysql/, e inserir o seguinte conteúdo, substituindo na primeira linha o koha_DB_Name pelo nome da base de dados do Koha em questão (geralmente tem a forma koha_nomeDaInstância):

USE koha_DB_Name;
 
SET @new_AI_borrowers = ( SELECT GREATEST( IFNULL( ( SELECT MAX(borrowernumber) FROM borrowers ), 0 ), IFNULL( ( SELECT MAX(borrowernumber) FROM deletedborrowers ), 0 ) ) + 1 );
SET @sql = CONCAT( 'ALTER TABLE borrowers AUTO_INCREMENT = ', @new_AI_borrowers );
PREPARE st FROM @sql;
EXECUTE st;
 
SET @new_AI_biblio = ( SELECT GREATEST( IFNULL( ( SELECT MAX(biblionumber) FROM biblio ), 0 ), IFNULL( ( SELECT MAX(biblionumber) FROM deletedbiblio ), 0 ) ) + 1 );
SET @sql = CONCAT( 'ALTER TABLE biblio AUTO_INCREMENT = ', @new_AI_biblio );
PREPARE st FROM @sql;
EXECUTE st;
 
SET @new_AI_biblioitems = ( SELECT GREATEST( IFNULL( ( SELECT MAX(biblioitemnumber) FROM biblioitems ), 0 ), IFNULL( ( SELECT MAX(biblioitemnumber) FROM deletedbiblioitems ), 0 ) ) + 1 );
SET @sql = CONCAT( 'ALTER TABLE biblioitems AUTO_INCREMENT = ', @new_AI_biblioitems );
PREPARE st FROM @sql;
EXECUTE st;
 
SET @new_AI_items = ( SELECT GREATEST( IFNULL( ( SELECT MAX(itemnumber) FROM items ), 0 ), IFNULL( ( SELECT MAX(itemnumber) FROM deleteditems ), 0 ) ) + 1 );
SET @sql = CONCAT( 'ALTER TABLE items AUTO_INCREMENT = ', @new_AI_items );
PREPARE st FROM @sql;
EXECUTE st;
 
SET @new_AI_issues = ( SELECT GREATEST( IFNULL( ( SELECT MAX(issue_id) FROM issues ), 0 ), IFNULL( ( SELECT MAX(issue_id) FROM old_issues ), 0 ) ) + 1 );
SET @sql = CONCAT( 'ALTER TABLE issues AUTO_INCREMENT = ', @new_AI_issues );
PREPARE st FROM @sql;
EXECUTE st;
 
SET @new_AI_reserves = ( SELECT GREATEST( IFNULL( ( SELECT MAX(reserve_id) FROM reserves ), 0 ), IFNULL( ( SELECT MAX(reserve_id) FROM old_reserves ), 0 ) ) + 1 );
SET @sql = CONCAT( 'ALTER TABLE reserves AUTO_INCREMENT = ', @new_AI_reserves );
PREPARE st FROM @sql;
EXECUTE st;

4 - Reiniciar o mysql:

$ sudo service mysql restart

É recomendado realizar testes antes, para não causar erros inesperados no Koha de ambiente de produção. O seguinte link apresenta um tutorial para a reprodução do erro em um ambiente de testes:

https://wiki.koha-community.org/wiki/DBMS_auto_increment_fix

2 curtidas