Controlar el comportamiento de bloqueo para la importación masiva

El comando bcp, la instrucción BULK INSERT y la instrucción INSERT ... SELECT * FROM OPENROWSET(BULK...) permiten especificar que la tabla se bloquee durante una operación de importación masiva. El bloqueo lo utiliza Motor de base de datos de SQL Server para sincronizar el acceso simultáneo de varios usuarios al mismo elemento de datos. Cuando una transacción modifica un elemento de datos, conserva el bloqueo que protege la modificación hasta el final de la transacción. Cuando especifica el bloqueo de tablas en una operación de importación masiva, se aplica un bloqueo de actualización masiva (BU) en la tabla durante toda la operación de importación masiva. Un bloqueo de actualización masiva (BU) permite que varios subprocesos importen datos de forma masiva y simultánea en la misma tabla, pero impide que otros procesos que no estén importando datos de forma masiva tengan acceso a la tabla. El bloqueo de tablas puede mejorar el rendimiento de la operación de importación masiva porque reduce la contención de bloqueo en la tabla.

Si no se utiliza el bloqueo de tablas, el valor predeterminado utiliza los bloqueos de nivel de fila si la opción table lock on bulk load no se ha establecido en on. Si activa la opción table lock on bulk load con sp_tableoption, establecerá el comportamiento de bloqueo para una tabla durante una operación de importación masiva.

Bloqueo de tablas durante importación masiva

Comportamiento de bloqueo de tablas

Desactivado

Se utilizan bloqueos de fila

Activado

Se utilizan bloqueos de tabla

Si se especifica el bloqueo de tablas, el valor predeterminado para la tabla establecida con sp_tableoption se invalida durante toda la operación de importación masiva.

Nota

No es necesario utilizar el bloqueo de tablas para la importación masiva de datos en una tabla desde varios clientes en paralelo, aunque su uso puede mejorar el rendimiento.

Calificadores de comandos

La siguiente tabla muestra los calificadores que se utilizan para especificar el bloqueo de tablas en los comandos de importación masiva.

Comando

Calificador

Tipo de calificador

bcp

-h"TABLOCK"

Sugerencia

BULK INSERT

TABLOCK

Argumento

INSERT ... SELECT * FROM OPENROWSET(BULK...)

WITH(TABLOCK)

Sugerencia de tabla

Nota

En SQL Server 2005 y versiones posteriores especificar TABLOCK en una tabla con un índice clúster impide las importaciones masivas de datos en paralelo. Si desea llevar a cabo una importación masiva de datos en paralelo en este caso, no utilice TABLOCK. Para obtener más información acerca de la carga masiva en paralelo, vea Directrices para optimizar la importación masiva.