"La clé donnée n'était pas présente dans le dictionnaire" erreur et SQL Server FCI installation échoue sur un Azure VM dans Server 2019

Symptômes

Lorsque vous essayez d'installer une instance de défaillance en grappes de serveur Microsoft SQL (FCI) dans Windows Server 2019 sur une machine virtuelle Microsoft Azure (VM), l'installation échoue et vous recevez le message d'erreur suivant :

La clé donnée n'était pas présente dans le dictionnaire.

Dans ce cas, vous pouvez voir les informations supplémentaires suivantes dans le fichier de journal Details.txt dans le dossier de configuration du serveur SQL :

Données d'action :   Caractéristiques de la SQL-Engine-Core-Inst-sql-engine-core-inst-Cpu64   Scénario et installation   Calendrier ' ConfigNonRC   ConfigObjectType - Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject   Nom de l'actualité de l'entité ( SQL-Engine-Core-Inst   CaractéristiquesCpuType - Cpu64   CaractéristiquesPackageId - sql-engine-core-inst   CaractéristiquesClusterState - CompleteFailoverCluster L'action de configuration a échoué pour la fonction SQL-Engine-Core-Inst pendant le chronométrage ConfigNonRC et le scénario ConfigNonRC. La clé donnée n'était pas présente dans le dictionnaire. La catégorie de défaillance de configuration de l'exception actuelle est ConfigurationFailure L'action de configuration a échoué pour la fonction SQL-Engine-Core-Inst pendant le chronométrage ConfigNonRC et le scénario ConfigNonRC. System.Collections.Generic.KeyNotFoundException: La clé donnée n'était pas présente dans le dictionnaire.    à System.ThrowHelper.ThrowKeyNotFoundException()    à System.Collections.Generic.Dictionary'2.get-Item(Clé TKey)    à Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject)    à Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.Install(ConfigActionTiming timing, Dictionary'2 actionData, PublicConfigurationBase spcb)    à Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary'2 actionData, PublicConfigurationBase spcbCurrent)    à Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary'2 actionData, PublicConfigurationBase spcbCurrent)    à Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction (String actionId)    à Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream) Ce qui suit est une pile d'exception énumérant les exceptions dans l'ordre le plus intime Les exceptions intérieures sont en cours d'indens Type d'exception: System.Collections.Generic.KeyNotFoundException

Message:        La clé donnée n'était pas présente dans le dictionnaire.     Résultat : 0x80131577     données:       Sql. Configuration.FailureCategory et ConfigurationFailure       WatsonConfigActionData - INSTALL-CONFIGNONRC -SQL-ENGINE-CORE-INST       WatsonExceptionFeatureIdsActionData - System.String[]     tas:         à System.ThrowHelper.ThrowKeyNotFoundException()         à System.Collections.Generic.Dictionary'2.get-Item(Clé TKey)         à Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject)         à Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.Install(ConfigActionTiming timing, Dictionary'2 actionData, PublicConfigurationBase spcb)         à Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary'2 actionData, PublicConfigurationBase spcbCurrent)         à Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary'2 actionData, PublicConfigurationBase spcbCurrent)         à Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction (String actionId)         à Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream)

Cause

Un nouveau commutateur, ManagementPointNetworkType, qui peut être appelé par les cmdlets PowerShell pour FailoverClusters est introduit dans Windows Server 2019. Vous pouvez utiliser les options suivantes pour le nouveau commutateur.

Paramètres de commutation

Utilisation

Singleton

Utilise la méthode traditionnelle de DHCP ou d'adresse IP statique.

réparti

Utilisez un nom de réseau distribué en utilisant les adresses IP de Node.

Automatique

Utilise la détection pour déterminer le réglage approprié. Si SQL Server s'exécute dans Azure, utilise Distributed. Si SQL Server est en cours d'exécution sur site, utilise Singleton (paramètre par défaut).

Si vous créez le cluster Windows en utilisant l'outil Windows Cluster Manager, l'outil définit le paramètre de commutation vers Automatic. Étant donné que vous travaillez sur une VM Azure, le commutateur utilise plutôt un nom de réseau distribué.

Vous pouvez vérifier cela en exécutant la commande PowerShell suivante :

C:\windows\system32> Get-clusterresource

La sortie retournée par cette commande ressemble à ce qui suit :

Nom State OwnerGroup ResourceType ----------------------       ------       ------------------------       ---------------------------- Cloud Witness Online Cluster Group Cloud Témoin Nom de cluster En ligne Groupe de groupe distribué Nom du réseau Cluster Pool 1 En ligne 45d8f3c2-e8df-4a01-87b8-f3c383801f3f                                                                                                   Piscine de stockage Cluster Disque virtuel    (ClusterPerformanceHistory)        Disque physique de groupe de cluster en ligne Service de santé en ligne cluster Group Health Service Gestion de la DDDC Groupe DeDDC Stockage QoS Resource Online Cluster Group Storage QoS Policy Manager

La fonction CreateFailoverClusterNameResource(FailoverClusterNomPublicConfigObject pubConfig) vérifie le nom de ressource dont le type est NetworkName. Il s'agit de vérifier que le nom de serveur virtuel que vous avez entré existe déjà.

Toutefois, l'installation du SQL Server FCI sur un cluster Windows qui n'a qu'un nom de réseau distribué n'est pas prise en charge. Le message d'erreur qui est mentionné dans la section "Symptômes" indique qu'il n'y a pas de ressource disponible dans Windows Server 2019 dont le type est NetworkName.

Résolution

Pour résoudre ce problème, vous pouvez supprimer le cluster actuel, puis le créer à nouveau en utilisant une commande PowerShell qui a le paramètre suivant :

managementpointnetworktype singleton

Statut

Microsoft a confirmé l’existence de ce problème dans les produits Microsoft répertoriés dans la section « S’applique à ».

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×