Ocorrência
Esta ocorrência indica um estouro do limite de balanceamento do índice atualmente utilizado em uma tabela, reproduzido quando utilizado o driver ADS. Esta ocorrência apresenta-se no log do console do Servidor de Aplicação, precedendo uma ocorrência fatal do AdvPL, normalmente relacionada às funções DBAppend(), DBRUnlock() e/ou DBSkip().
ADS Error (7022) - Operacao: <x> - Maximum index levels exceeded. File: <y>
Causa
Esta ocorrência é reproduzida quando da utilização de uma tabela indexada, onde foi usada uma expressão de indexação cujo resultado da chave ( &(Indexkey()) ) ultrapasse 140 carascteres, onde houve uma sequencia grande de inserções consecutivas.
Correção
- Verifique as chaves de índice utilizadas para a tabela, e garanta que nenhuma chave seja maior que 140 caracteres.
- Caso não seja possível reduzir a chave do índice, verifique se é possível criá-la após os dados estarem inseridos na tabela.
- Caso nenhuma das alternativas anteriores seja viável, o programa pode ser alterado para, preventivamente, recriar o índice a cada X mil registros inseridos. Este número X deve ser determinado com base na rotina em questão, e deve ser estabelecido um limite preventivo, para deletar e recriar o índice. Por exemplo, no programa em questão normalmente após
- Ou, troque a RDD de acesdo a tabela. Ao invés de cria a tabela usando driver ADS ( DBFCDX com ADS Local ou DBFCDXADS ), use o driver CTREECDX, onde os índices não têm esta limitação de balanceamento com chaves maiores que 140 bytes.
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas