No artigo de hoje, vamos abordar sobre algumas situações que podem causar travamentos na tabela SB2.
Recentemente em um cliente pegamos uma situação, onde a SB2 estava lenta, onde ao tentar fazer apontamentos de produção, com dois usuários ou mais ao mesmo tempo, ocasionava travamentos.
Ao tentar rastrear via banco de dados, o comportamento era devido a trigger pra atualizar o campo S_T_A_M_P_.
Esse campo, ele grava a data e hora, toda vez que um registro é atualizado, e isso pra uma tabela de saldos é complicado pois para a SB2 imagina:
- Saldo entrando via documento de entrada
- Saldo saindo via documento de saída
- Reservas e Previsões sendo populadas via pedido de compras, solicitação de compras, pedidos de venda
- Consumos de Estoque via processos produtivos
- Entre outros
Mas aí que está, por padrão, a tabela SB2 por ser de saldos, ela não tem esse campo ativado por padrão, então pode ser que para o cenário do cliente, ativaram o campo.
E para sanar essa questão?
Bom, teria duas formas, a primeira é desativar a trigger de atualização, a segunda é mais agressiva, apagando a tabela e recriando, então vamos para as duas forma.
Forma 1 – Desativando a Trigger
1. Pare o DbAccess
2. Abra o sistema gerenciador de Banco de Dados
3. Vá na tabela em questão (nesse exemplo, vamos usar a SC5990, da nossa base local que tem essa trigger habilitada)
4. Vá em Triggers ou Gatilhos, vai ter o nome da tabela, em seguida “_STAMP”

5. Clique com o botão direito em cima desse gatilho, e depois clique em Desabilitar

6. Depois vai mostrar uma mensagem de sucesso, e o ícone do gatilho vai ficar com um X vermelho

7. Inicie o DbAccess
Forma 2 – Apagando a tabela e recriando
Obs.: Essa forma é mais agressiva, faça primeiro em base de testes
Obs. 2: Só faça essa forma, se a primeira não tiver dado certo ou você não tiver acesso ao gerenciador do Banco de Dados (como em um ambiente de nuvem)
1. Deixe tudo em modo exclusivo, para usuários não acessarem o sistema
2. Acesse o APSDU, vá na tabela SX2
3. Filtre por SB2, no campo X2_STAMP, deixe como “2” (1=Sim;2=Não)
4. Com o APSDU aberto ainda, abra a tabela SB2 e faça um backup dela
5. Após o backup criado (certifique-se de que esteja funcional o backup), dê um drop table na SB2
6. Pare todos os serviços, incluindo o DbAccess
7. Suba os serviços, mas ainda deixe o acesso exclusivo
8. Abra o Protheus, e faça o sistema recriar a tabela SB2 (vá no cadastro de produtos, posicione em qualquer produto e aperte -F4-)
9. Depois de recriar a SB2, vá no APSDU, e dê um append from, voltando os dados do backup criado no passo 5
Bom pessoal, por hoje é só.
Abraços e até a próxima.