Échec d’assertion sur un serveur miroir lors de l’utilisation de l’architecture de mise en miroir SQL Server
Cet article décrit un échec d’assertion Microsoft SQL Server qui peut se produire sur un serveur partenaire lors de l’utilisation de l’architecture de mise en miroir SQL Server.
Version du produit d’origine : SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008
Numéro de base de connaissances d’origine : 2729953
Symptômes
Dans l’architecture de mise en miroir SQL Server, vous pouvez rencontrer un échec de vérification d’assertion SQL Server sur le serveur partenaire (miroir). Dans ce cas, consultez le journal des erreurs SQL Server pour plus d’informations. Dans le journal, vous trouverez un message d’erreur semblable au message suivant. Cette erreur signifie généralement que vous devez reconstruire la paire miroir.
Assertion SQL Server : fichier : loglock.cpp, line=834 Failed Assertion = 'result == LCK_OK' . Cette erreur peut être liée au minutage. Si l’erreur persiste après avoir réexécuté l’instruction, utilisez DBCC CHECKDB pour vérifier l’intégrité structurelle de la base de données ou redémarrez le serveur pour vous assurer que les structures de données en mémoire ne sont pas endommagées.
Erreur : 3624, Gravité : 20, État : 1.
En général, un échec d’assertion est provoqué par un bogue logiciel ou une altération des données. Pour vérifier l’altération de la base de données, envisagez d’exécuter DBCC CHECKDB
. Si vous acceptez d’envoyer des vidages à Microsoft pendant l’installation, un minidump est envoyé à Microsoft. Il est possible qu'une mise à jour Microsoft soit disponible dans le Service Pack le plus récent ou dans un correctif QFE émis par le support technique.
Note
Lorsque ce problème se produit, un fichier minidump est généré dans le dossier du journal des erreurs SQL Server. Ce fichier a un nom qui ressemble au nom du fichier SQLDumpnn.mdmp .
Cause
Ce problème peut se produire dans différents scénarios. Chaque scénario a une cause et une résolution différentes, et chaque scénario peut entraîner le même message d’erreur et l’échec d’assertion.
Note
- Bien que la signature d’erreur semble très spécifique, l’erreur réelle est due à une assertion qui a échoué. Par exemple, l’erreur peut être due à une assertion qui effectue une vérification proactive dans le code SQL Server qui valide les conditions saines pour échouer aussi correctement que possible au lieu de provoquer un blocage à l’échelle du processus.
- Vous ne pouvez pas déterminer facilement la cause réelle. Les services de support technique Microsoft déterminent généralement la cause. Il est généralement effectué en collectant le fichier de sauvegarde complète de la base de données principale et les sauvegardes du journal des transactions qui couvrent le temps du problème. En outre, un fichier de vidage de processus complet du miroir peut être nécessaire pour reproduire le problème dans des paramètres spécifiques.
Résolution
Pour résoudre ce problème, obtenez le dernier correctif pour votre version de SQL Server. Pour plus d’informations, reportez-vous au tableau suivant.
Cause | Article de la Base de connaissances | Tout d’abord corrigé dans |
---|---|---|
Comportement de verrouillage différent entre le serveur principal et le miroir | 2938828 CORRECTIF : La mise en miroir de bases de données atteint l’assertion et la session de mise en miroir affiche l’état suspendu dans SQL Server 2012 ou SQL Server 2014 | 2931693 mise à jour cumulative 1 pour SQL Server 2014, 2931078 mise à jour cumulative 9 pour SQL Server 2012 SP1 |
Insertion en bloc / BCP avec Check_Constraints OFF | SQL Server 2012 | |
Modification des clés de chiffrement : clé principale de base de données, clé principale d’instance de serveur | SQL Server 2012 |
Note
- Dans le tableau précédent, la dernière colonne répertorie uniquement la première build qui contient le correctif. Étant donné que les builds SQL Server sont cumulatives, les builds ultérieures, telles que SQL Server 2014 SP1, contiennent ces correctifs. Toutefois, ces builds ne sont pas répertoriées dans la table.
- Pour plus d’informations sur l’obtention du dernier Service Pack pour votre version de SQL Server, consultez Déterminer la version, l’édition et le niveau de mise à jour. Le scénario BCP/Bulk Insert est un scénario courant qui reste non corrigé pour SQL Server 2008 et SQL Server 2008 R2, et c’est la cause la plus probable d’assertions lck_ok sur ces versions. Le problème a d’abord été résolu dans SQL Server 2012. La raison de ne pas résoudre ce problème dans les versions antérieures est qu’elle nécessite une nouvelle architecture des internes du journal des transactions SQL Server. Une telle modification ne peut être incluse qu’avec une version majeure de SQL Server.