SQL Server Performance

Bloquear Registro

Discussion in 'Preguntas sobre SQL Server en Español.' started by Eudes, Jul 19, 2005.

  1. Eudes New Member

    Es posible bloquear un registro de una tabla para que no pueda ser accesado? Es decir, mientras yo trabajo con un registro, nadie pueda hacer update, etc., pero si trabajar con los demas registros de la tabla.


    Gracias[^]

  2. Luis Martin Moderator

    El bloqueo es una característica de SQL Server. Lo maneja dinámicamente ya sea por tabla, página, claves, etc.

    Por el contrario debes especificar si no quieres bloqueo durante un select.

    La siguiente información te será de ayuda:

    Se puede especificar un intervalo de sugerencias de bloqueo en el nivel de tabla mediante las instrucciones SELECT, INSERT, UPDATE y DELETE para indicar a Microsoft® SQL Server™ 2000 el tipo de bloqueo que debe utilizar. Se pueden utilizar las sugerencias de bloqueo de tabla cuando se requiere un control más ajustado de los tipos de bloqueo adquiridos en un objeto. Estas sugerencias de bloqueo suplantan el nivel de aislamiento de la transacción actual durante la sesión.



    Nota El optimizador de consultas de SQL Server toma automáticamente la determinación correcta. Se recomienda utilizar las sugerencias de bloqueo de tabla para modificar el comportamiento de bloqueo predeterminado, en los casos estrictamente necesarios. Impedir un nivel de bloqueo puede ir en detrimento de la simultaneidad.


    Sugerencia de bloqueo Descripción
    HOLDLOCK Mantiene un bloqueo compartido hasta la finalización de la transacción en lugar de liberar el bloqueo tan pronto como deje de ser necesaria la tabla, la fila o la página de datos. HOLDLOCK es equivalente a SERIALIZABLE.
    NOLOCK No emite bloqueos compartidos y no respeta los bloqueos exclusivos. Cuando esta opción tiene efecto, es posible leer una transacción no confirmada o un conjunto de páginas deshechas en mitad de una lectura. Es posible realizar lecturas diferidas. Sólo se aplica a la instrucción SELECT.
    PAGLOCK Utiliza bloqueos de página donde se utilizaría normalmente un único bloqueo de tabla.
    READCOMMITTED Realizar un recorrido con la misma semántica de bloqueo que una transacción que se ejecute con el nivel de aislamiento LECTURA DE CONFIRMADAS. De forma predeterminada, SQL Server 2000 funciona con este nivel de aislamiento.
    READPAST Omite las filas bloqueadas. Esta opción hace que una transacción omita las filas que están bloqueadas por otras transacciones y que, normalmente, aparecerían en el conjunto de resultados, en lugar de bloquear la transacción que está esperando a que las demás transacciones liberen los bloqueos en estas filas. La sugerencia de bloqueo READPAST se aplica solamente a las transacciones que funcionan con el nivel de aislamiento LECTURA DE CONFIRMADAS y sólo leerá los bloqueos de fila anteriores. Se aplica solamente a la instrucción SELECT.
    READUNCOMMITTED Equivalente a NOLOCK.
    REPEATABLEREAD Realiza un recorrido con la misma semántica de bloqueo que una transacción que se ejecute con el nivel de aislamiento LECTURA REPETIBLE.
    ROWLOCK Utiliza bloqueos de fila en lugar de los bloqueos de página y de tabla más generales.
    SERIALIZABLE Realiza un recorrido con la misma semántica de bloqueo que una transacción que se ejecuta con el nivel de aislamiento SERIALIZABLE. Equivalente a HOLDLOCK.
    TABLOCK Utiliza un bloqueo de tabla en lugar de bloqueos más concretos de fila o de página. SQL Server mantiene este bloqueo hasta la finalización de la instrucción. Sin embargo, si también especifica HOLDLOCK, el bloqueo se mantiene hasta el final de la transacción.
    TABLOCKX Utiliza el bloqueo exclusivo de una tabla. Este bloqueo impide que otros lean o actualicen la tabla y se mantiene hasta el final de la instrucción o transacción.
    UPDLOCK Utiliza bloqueos de actualización en lugar de bloqueos compartidos mientras lee una tabla y mantiene el bloqueo hasta el final de la instrucción o transacción. UPDLOCK tiene la ventaja de permitirle leer datos (sin bloquear a otros lectores) y actualizarlos después con la seguridad de que los datos no han cambiado desde la última vez que los leyó.
    XLOCK Utiliza un bloqueo exclusivo que se mantendrá hasta el final de la transacción en todos los datos procesados por la instrucción. Este bloqueo se puede especificar mediante PAGLOCK o TABLOCK, en cuyo caso el bloqueo exclusivo se aplica al nivel adecuado de granularidad.


    Por ejemplo, si se establece el nivel de aislamiento de la transacción en SERIALIZABLE y se utiliza la sugerencia de bloqueo de nivel de tabla NOLOCK con la instrucción SELECT, no se aplican los bloqueos de intervalos de claves usados normalmente para mantener las transacciones serializables.



    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


    All postings are provided “AS IS” with no warranties for accuracy.



Share This Page