TaxPlus | Banco de dados | Configuração do controle de transações
5 min
Criado por Natalia Oliveira Bastos em 29/01/2025 10:36
Atualizado por Julianna Lima em 30/04/2026 11:17

 Configuração do Controle de Transações

Como padrão do servidor do banco de dados, ao se criar um novo banco de dados, o padrão do SQL Server é que o Lock em um simples select, enquanto que em outra transação não consegue acessar o dados até a transação que requisição inicial (select) seja liberada pelo servidor/cliente. Nas próximas versões do sistema o banco de dados será criado com o comando (descrito abaixo) e não há a necessidade de execução desse comando.


Para exemplificar os problemas que podem ocorrer com a abordagem, veja abaixo.


1 Imagine uma tabela de nome Entidade com cinco registros e duas transações... e uma delas está no processo de atualização e inserção de uma nova entidade. Antes de a transação concluir, outro usuário acessa a entidade através de Select.

Para simular, inicie um debug em uma aba do SQL Server Management Studio e pare em Insert. Depois entre abra uma nova aba e execute o comando da transação 2.


Transação 1

Begin transaction

begin transaction
update Entidade Set NomeFantasia = 'Alterado 123' where ID =1
commit

Insert Into Entidade (Id,NomeFantasia) values (70, 'Test')

update Entidade Set NomeFantasia = 'Outra alteração' where ID = 2

commit

 

Transação 2

Select * From Entidade -- (Isso deve bloquear (lock) até que a atualização da transação 1 for resolvido )


A segunda transação irá trazer todos os registros do banco de dados, mas somente quando a primeira transação for finalizada e isso causa lentidão e diversos outros problemas de performance no banco. Para poder resolver isso, pode-se usar HINT with(lock) como alguns softwares fazem; mas há uma outra forma usando um comando de configuração do próprio banco, alterando o ISOLATION LEVEL definindo no banco de dados.

Para realização desse comando, faz-se necessário que somente um usuário esteja conectado: o usuário da transação corrente. Para saber se existem mais usuários, use a procedure seguinte (esse comando retorna todos os usuários conectados no servidor).

exec sp_who

 

Depois execute o seguinte para alterar as configurações do snapshot.

ALTER DATABASE [NomeDoBancoDeDados] SET READ_COMMITTED_SNAPSHOT ON;

 

Dica
Caso o SQL Server esteja demorando muito para executar esse comando, verifique se seu SAP está aberto - caso esteja, feche-o para que o banco de dados possa executar o comando mais rápido.


Depois disso, realize o mesmo procedimento da executado em Transação 1 e Transação 2 e veja se o SQL Server não irá bloquear o resultado do comando Transação 2.


Esse procedimento é aconselhado para todos os bancos de dados que existem no servidor. Essa configuração ativa o modo ROW VERSION no controle de transações, que é comum em outros servidores de banco de dados.


Para saber qual o nível que está configurado, execute o seguinte comando.

SELECT is_read_committed_snapshot_on,* FROM sys.databases WHERE name= 'NomeDoBancoDeados'

 

O resultado mostra as configurações do banco e uma das linhas mostram o ISOLATION LEVEL do banco de dados.

6.png


Observação
Foi retirado a obrigatoriedade de habilitar o controle de transações, será exibida a mensagem abaixo, será um “Aviso“, ou seja, não impedirá que o add-on seja iniciado.

"O banco de dados está com uma configuração não apropriada, recomendamos alterar a configuração de transações (READ_COMMITTED_SNAPSHOT), para não haver lentidão e gerar deadlocks no SAP B1"

 

Este artigo foi útil para você?
Últimos artigos visitados