es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for 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 bloque TRY/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

Comments are closed.