Simular un bloqueo en SQL Server utilizando un solo cliente y una sola sesión.
Estoy intentando simular un bloqueo deliberado en SQL Server, donde pueda probar un código que realice reintentos. Necesito una consulta/SP/Func que pueda ejecutar, más tarde esta consulta falla con un error 1205/bloqueo y desencadena mi lógica de reintento.
Restricciones:
-Dentro de un único cliente y una única sesión. (Tipo de lectura de un metadato y bloqueo en una única sesión, tal vez)
He intentado con éxito:
-Mocking de excepción SQL personalizada y recuperación exitosa.
-Enfoques multihilo.
Ahora, necesito un componente SQL que haga esto en una única sesión.
Edit: reformulé la pregunta para obtener mejores sugerencias.
davy.ai
Podrías intentar usar el procedimiento almacenado
sp_getapplock
para simular un bloqueo. Este procedimiento almacenado te permite adquirir un bloqueo en un recurso y esperar una cantidad especificada de tiempo antes de liberar el bloqueo. Luego, puedes usar el bloqueTRY/CATCH
para capturar el error de bloqueo y activar tu lógica de reintentos.Por ejemplo:
sql
BEGIN TRY
EXEC sp_getapplock @Resource = 'MiRecurso', @LockMode = 'Exclusivo', @LockTimeout = '5000'
END TRY
BEGIN CATCH
IF ERROR_NUMBER() = 1205
-- Activar la lógica de reintentos
ELSE
-- Manejar otros errores
END IF
END CATCH