CORRECTIF : Lenteur d'exécution ou blocage lorsque vous restaurez une base de données et exécutez des instructions en même temps dans SQL Server 2012

Traductions disponibles Traductions disponibles
Numéro d'article: 2725950 - Voir les produits auxquels s'applique cet article
Microsoft distribue les correctifs de Microsoft SQL Server 2012 sous la forme d'un fichier téléchargeable unique. Les correctifs étant cumulatifs, chaque nouvelle version contient tous les correctifs et correctifs de sécurité inclus avec la précédente 2012 de SQL Server version du correctif.
Agrandir tout | Réduire tout

Sommaire

Symptômes

Scénario 1

Envisagez le scénario suivant :
  • Vous restaurez une base de données dans Microsoft SQL Server 2012.
  • Avant la fin de l'opération de restauration de base de données, un autre processus fait référence à la vue de catalogue sys.database_recovery_status et nécessite un verrou sur la même base de données. Par exemple, vous exécutez l'instruction SELECT suivante :

    SELECT * FROM sys.database_recovery_status
Dans ce scénario, lenteur d'exécution se produit dans lequel un processus pour l'instruction SELECT attend jusqu'à ce que vous avez terminé le processus de restauration de base de données.

Scénario 2

Envisagez le scénario suivant :
  • Vous restaurez une base de données dans SQL Server 2012.
  • Avant la fin de l'opération de restauration de base de données, vous exécutez l'instruction suivante :

    IF EXISTS (SELECT * FROM sys.database_recovery_status WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
    Remarque : Le DataBaseID représente l'ID de la base de données sur lequel vous effectuez l'opération de restauration de base de données.
Dans ce scénario, un blocage se produit dans le processus de restauration de base de données. Ce blocage entraîne l'échec du processus de restauration de base de données.

Cause

Les deux scénarios sont décrits dans la section « Symptômes » sont provoqués par le même motif.

Dans la section « Scenario1 », le problème se produit car le processus de restauration de base de données requiert un verrou exclusif sur la base de données. Lorsque vous exécutez l'instruction qui est mentionnée dans cette section, un verrou partagé est requis sur la même base de données. Par conséquent, le verrou partagé attend que le verrouillage exclusif jusqu'à ce que le verrou exclusif est libéré.

Dans la section « Scénario 2 », lorsque vous exécutez l'instruction qui est mentionnée dans cette section, un verrou partagé est requis sur la même base de données et sur la table sys.sysdbreg . À la dernière phase du processus de restauration de base de données, le processus requiert un verrou de mise à jour sur la table sys.sysdbreg . Toutefois, le verrou partagé n'est pas publié à partir de la base de données. Par conséquent, un blocage se produit sur la table sys.sysdbreg , et le processus de restauration de base de données est déterminé comme victime du blocage.

Résolution

Informations de mise à jour cumulative

Package de mise à jour cumulative 1 pour SQL Server 2012 Service Pack 1

Le correctif de ce problème a été tout d'abord publié de mise à jour Cumulative 1. Pour plus d'informations sur l'obtention de ce package de mise à jour cumulatives pour SQL Server 2012 Service Pack 1, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2765331 Package de mise à jour cumulative 1 pour SQL Server 2012 Service Pack 1
Remarque Les versions étant cumulatives, chaque nouvelle version de correctif contient tous les correctifs et correctifs de sécurité inclus avec la précédente 2012 de SQL Server version du correctif. Il est recommandé que vous teniez compte de l'application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2772858 Le 2012 de SQL Server versions publiées après la publication du Service Pack 1 SQL Server 2012

Package de mise à jour cumulative 3 pour SQL Server 2012

Le correctif de ce problème a été tout d'abord publié de mise à jour Cumulative 3. Pour plus d'informations sur l'obtention de ce package de mise à jour cumulatives pour SQL Server 2012, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2723749 Mise à jour cumulative 3 pour SQL Server 2012
Remarque Les versions étant cumulatives, chaque nouvelle version de correctif contient tous les correctifs et correctifs de sécurité inclus avec la précédente 2012 de SQL Server version du correctif. Il est recommandé que vous teniez compte de l'application la plus récente version du correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2692828 Le 2012 de SQL Server versions publiées après la publication de SQL Server 2012

Statut

Microsoft a confirmé qu'il s'agit d'un problème pour les produits Microsoft répertoriés dans la section « S'applique à ».

Contournement

Pour contourner le problème dans le scénario 2, appliquez l'une des méthodes suivantes.
Méthode 1


Modifier l'instruction pour éviter le verrou partagé sur la table sys.sysdbreg à l'aide de l'option « NOLOCK ».
IF EXISTS (SELECT * FROM sys.database_recovery_status with(NOLOCK) WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
Méthode 2
Définir la priorité de blocage de l'instruction à « Faible ».
SET DEADLOCK_PRIORITY LOW
IF EXISTS(SELECT * FROM sys.database_recovery_status where database_id = DataBaseID AND database_guid IS NOT NULL)
Remarque : Lorsque vous utilisez la deuxième méthode pour éviter le blocage dans l'instruction et dans le processus de restauration de base de données, les codes dans l'instruction IF ne seront pas exécutés.

Références

Pour plus d'informations sur le verrou exclusif, verrou partagé et verrou de mise à jour, accédez au site Web MSDN suivant :
Informations générales sur les modes de verrouillage
Pour plus d'informations du modèle de service incrémentiel pour SQL Server, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
935897 Un modèle de service incrémentiel est disponible à partir de l'équipe SQL Server pour proposer des correctifs pour les problèmes signalés
Pour plus d'informations sur le schéma d'appellation des mises à jour de SQL Server, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
822499 Schéma d'affectation de noms pour les packages de mise à jour logicielle de Microsoft SQL Server
Pour plus d'informations sur la terminologie de mise à jour de logiciel, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
824684 Description de la terminologie standard utilisée pour définir les mises à jour logicielles de Microsoft

Propriétés

Numéro d'article: 2725950 - Dernière mise à jour: mardi 20 novembre 2012 - Version: 2.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Express
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Web
Mots-clés : 
kbtshoot kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2725950 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 2725950
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com