Quando o Protheus perde a conexão com o banco de dados, o sistema exibe mensagens de erro que podem ser confusas. Entender o significado dos códigos negativos do TOPCONN e DBAccess é crucial para diagnosticar o problema rapidamente e evitar reinícios desnecessários do serviço.

Erros comuns do TOPCONN e DBAccess

A comunicação entre o Protheus e o banco de dados é gerenciada por componentes como o TOPCONN e o DBAccess. Falhas nessa comunicação geram códigos de erro específicos que indicam a causa raiz do problema.

Códigos de erro e o que investigar

  • TOPCONN - Create error: -15 : FILE_IN_USE: Este erro ocorre ao tentar criar uma tabela com a RDD TOPCONN quando a tabela já existe e está em uso por outro usuário. Verifique a lógica AdvPL para criação de tabelas. Implemente seções críticas (Critical Section) para garantir que apenas uma thread crie a tabela por vez, verificando sua existência antes da criação.
  • TOPCONN - Create error: -19 : COMMAND_FAILED: Indica falha na criação de uma nova tabela via TOPCONN. As causas comuns incluem falta de espaço no servidor de banco de dados ou uma estrutura de tabela inconsistente/não suportada. Consulte o log do DBAccess para detalhes. Exemplos incluem campos com tamanho excessivo ou falta de espaço no disco.
  • TopConnect error (Insert): -27: Ocorre ao tentar inserir registros em uma tabela com um campo de usuário com propriedade IDENTITY (auto-numeração) usando a RDD TOPCONN. Não utilize modos de compatibilidade AdvPL (DBUserArea) para acessar tabelas SQL com IDENTITY. Use queries e instruções SQL diretas via TCSQLExec().
  • TC_FilterEx - NO CONNECTION: Sinaliza que a thread AdvPL perdeu a conexão com o DBAccess durante a chamada da instrução TC_FilterEx. Para análise detalhada, abra um ticket de suporte. O log do console do Servidor de Aplicação pode conter informações adicionais.
  • DBUseArea - DB driver not initialized: Um erro fatal AdvPL que ocorre ao tentar abrir uma tabela. Isso acontece quando a RDD (Remote Database Driver) não foi inicializada corretamente. Verifique o log do console do Servidor de Aplicação. Pode ocorrer com a RDD TOPCONN se nenhuma conexão com o DBAccess foi estabelecida (via TCLink()) ou se não há conexão ativa no processo atual.
  • TC_ALTER FAILED on file... Table DATA or STRUCTURE should be INVALID or CORRUPTED: Ocorre durante a alteração da estrutura de uma tabela se uma etapa intermediária falhar devido a estrutura incompleta ou dados corrompidos. Verifique os logs do DBAccess. Restrições causadas por views, triggers, statistics ou outros recursos que impedem a operação são causas comuns. É fundamental que a tabela não possua dependências externas que impeçam a alteração estrutural. Triggers e statistics inseridos diretamente no SGBD podem precisar ser removidos e reaplicados manualmente.

Exemplo de log de erro (TC_ALTER FAILED)

04/01/2016 12:52:20 : [BEGINLOG]
Error : 5074 (37000) (RC=-1) - [Microsoft][ODBC SQL Server Driver][SQL Server]The statistics 'CTB_FILORI' is dependent on column 'CTB_FILORI'. ( From tMSSQLConnectionAlterTable_1 )
...
04/01/2016 12:52:20 : [BEGINLOG]
TC_ALTER FAILED on file [CTB010]. Table DATA or STRUCTURE should be INVALID or CORRUPTED. ( From tDBServer::AlterFile )
...

Armadilhas

  • A perda de conexão com o DBAccess (TC_FilterEx - NO CONNECTION, DBUseArea - DB driver not initialized) pode indicar problemas na rede, no servidor de banco de dados ou na configuração do DBAccess.
  • Erros de criação de tabela (-15, -19) frequentemente apontam para problemas de permissão, espaço em disco ou inconsistências na definição da tabela.
  • Tabelas com recursos avançados do banco de dados (IDENTITY, triggers, statistics) podem exigir abordagens de acesso e manipulação específicas, diferentes do padrão AdvPL.

Fontes oficiais

Paginas publicadas pela TOTVS na Developer Network.