Como usar um bloqueio de dois bancos de dados diferentes. Quando uma sessão adquire o bloqueio, nada impede que uma sessão diferente adquira o mesmo bloqueio de um banco de dados diferente.
Primeira sessão:
USE db_one;
EXEC @lock_result = sp_getapplock @Resource = 'my_resource',
@LockMode = 'Exclusive',
@LockTimeout = 30000;
Segunda sessão:
USE db_two;
EXEC @lock_result = sp_getapplock @Resource = 'my_resource',
@LockMode = 'Exclusive',
@LockTimeout = 30000;
A segunda sessão adquire o bloqueio sem atraso, em vez de aguardar o bloqueio. Agora, duas sessões parecem ter o mesmo bloqueio ao mesmo tempo.
Considere a qualificação do banco de dados do
sp_getapplock
nome do proc. Dessa forma, o bloqueio será adquirido no banco de dados especificado em vez do contexto do banco de dados da sessão atual.Você pode colocá-lo em um procedimento armazenado em um dos bancos de dados e executá-lo com uma chamada entre bancos de dados.