Contrôle du mécanisme de verrouillage pour l'importation en bloc
La commande bcp, les instructions BULK INSERT et INSERT ... SELECT * FROM OPENROWSET(BULK...) vous permettent de préciser que la table doit être verrouillée lors d'une opération d'importation en bloc. Le verrouillage est utilisé par le moteur de base de données SQL Server pour synchroniser l'accès simultané de plusieurs utilisateurs à la même donnée. Lorsqu'une transaction modifie une donnée, elle conserve le verrou qui protège la modification jusqu'à la fin de la transaction. Lorsque vous spécifiez un verrouillage de table pour une opération d'importation en bloc, un verrou au niveau de la table, pour la mise à jour en bloc, est appliqué pour toute la durée de l'opération d'importation en bloc. Les verrous BU permettent à plusieurs threads d'importer simultanément en bloc des données dans la même table tout en empêchant les processus qui n'effectuent pas d'importation de données en bloc d'accéder à cette table. Le verrouillage de table peut améliorer les performances de l'opération d'importation en bloc par la réduction du temps pendant lequel le verrou est maintenu sur la table.
Si le verrouillage de table n'est pas utilisé, des verrous au niveau des lignes sont utilisés par défaut, à moins que l'option table lock on bulk load soit définie sur on. En définissant l'option table lock on bulk load à l'aide de sp_tableoption, vous définissez également le mécanisme de verrouillage d'une table pendant toute la durée de l'opération d'importation en bloc.
Verrou de table lors de l'importation en bloc |
Comportement du verrouillage de table |
---|---|
Off (Inactif) |
Utilisation de verrous au niveau des lignes |
On (Actif) |
Utilisation d'un verrou au niveau de la table |
Si le verrouillage de table est spécifié, le paramétrage par défaut de la table défini à l'aide de sp_tableoption est ignoré pendant toute la durée de l'opération d'importation en bloc.
Notes
Il n'est pas nécessaire d'utiliser le verrouillage de table pour importer des données en bloc dans une table à partir de plusieurs clients en parallèle, mais cela peut améliorer les performances.
Qualificateurs des commandes
Le tableau suivant récapitule les qualificateurs utilisés pour spécifier le verrouillage de table dans les commandes d'importation en bloc.
Commande |
Qualificateur |
Type de qualificateur |
---|---|---|
bcp |
-h"TABLOCK" |
Indicateur |
BULK INSERT |
TABLOCK |
Argument |
INSERT ... SELECT * FROM OPENROWSET(BULK...) |
WITH(TABLOCK) |
Indicateur de table |
Notes
Dans SQL Server 2005 et versions ultérieures, la spécification de TABLOCK sur une table avec un index cluster empêche l'importation en bloc de données en parallèle. Si vous souhaitez effectuer une importation parallèle en bloc, n'utilisez pas TABLOCK. Pour plus d'informations sur le chargement en masse en parallèle, consultez Recommandations pour l'utilisation de l'importation en bloc.