SQL Server erreur d’assertion lorsque vous essayez d’exécuter une instruction DCP ou d’insertion en bloc

Cet article vous aide à résoudre le problème qui se produit lorsque vous essayez d’exécuter une BULK INSERT opération ou .BCP

Version d’origine du produit : SQL Server 2008 R2 Enterprise, SQL Server 2008 Enterprise
Numéro de la base de connaissances d’origine : 2700641

Symptômes

Prenons l’exemple du scénario suivant :

  • Les serveurs A et B exécutent Microsoft SQL Server 2008 ou SQL Server 2008 R2.

  • Vous configurez la mise en miroir de bases de données entre le serveur A et le serveur B.

  • Vous exécutez une BULK INSERT instruction ou BCP sur la base de données principale.

    Remarque

    Par défaut, l’option CHECK_CONSTRAINTS est désactivée lorsque vous exécutez une BULK INSERT instruction ou BCP .

  • La mise en miroir de bases de données est interrompue et la session de mise en miroir de bases de données passe à l’état SUSPENDED.

Dans ce scénario, une assertion se produit sur le serveur miroir. Par conséquent, un fichier de mini-vidage est créé dans le dossier de journal SQL Server. En outre, vous voyez l’erreur suivante dans le journal des erreurs SQL Server sur le serveur miroir :

Remarque

Vous devez réinitialiser la mise en miroir de bases de données pour résoudre ce problème.

Cause

Ce problème se produit car les informations de compatibilité de verrou dans le journal des transactions de la base de données principale ne sont pas transférées vers le serveur miroir.

Solution de contournement

Pour contourner ce problème, exécutez l’instruction BULK INSERT ou BCP sur la base de données principale à l’aide de l’option CHECK_CONSTRAINTS .

Remarque

L’option CHECK_CONSTRAINTS ralentit les performances. Toutefois, l’assertion de verrou sur le serveur miroir ne se produit pas.

Plus d'informations

Pendant une BULK INSERT opération ou BCP , une transaction enfant désactive l’option CHECK_CONSTRAINTS . Cette transaction enfant utilise un verrou compatible avec les verrous de transaction parents. Les informations de compatibilité sont stockées dans le journal des transactions de la base de données principale. Par conséquent, la demande de verrouillage de transaction enfant est accordée sur la base de données principale.

Toutefois, ces informations de compatibilité ne sont pas transférées au serveur miroir. Par conséquent, la demande de verrou de transaction enfant n’est pas compatible avec les verrous de transaction parents sur le serveur miroir. Ce scénario provoque l’assertion sur le serveur miroir.