Fehler (Der angegebene Schlüssel war im Wörterbuch nicht vorhanden) und SQL Server der Installation der FCI auf einer Azure VM in Server 2019 fehl.

Dieser Artikel hilft Ihnen, das Problem zu beheben, das auftritt, wenn Sie versuchen, eine Microsoft SQL Server-Failoverclusterinstanz (FCI) in Windows Server 2019 auf einem virtuellen Computer (VM) von Microsoft Azure zu installieren.

Gilt für:   SQL Server in VM – Windows, Windows Server 2019
Ursprüngliche KB-Nummer:   4525647

Problembeschreibung

Wenn Sie versuchen, eine Microsoft SQL Server-Failoverclusterinstanz (FCI) in Windows Server 2019 auf einem virtuellen Computer (VM) von Microsoft Azure zu installieren, schlägt die Installation fehl, und die folgende Fehlermeldung wird angezeigt:

Der angegebene Schlüssel war im Wörterbuch nicht vorhanden.

In diesem Fall werden die folgenden zusätzlichen Informationen in der protokolldatei Details.txt im Ordner "Setup SQL Server angezeigt:

Aktionsdaten: Feature = SQL_Engine_Core_Inst_sql_engine_core_inst_Cpu64 Scenario = install Timing = ConfigNonRC ConfigObjectType = Microsoft.SqlServer.Configuration. ClusterConfiguration.FailoverClusterNamePrivateConfigObject FeatureName = SQL_Engine_Core_Inst FeatureCpuType = Cpu64 FeaturePackageId = sql_engine_core_inst FeatureClusterState = CompleteFailoverCluster Configuration action failed for feature SQL_Engine_Core_Inst during timing ConfigNonRC and scenario ConfigNonRC. Der angegebene Schlüssel war im Wörterbuch nicht vorhanden. Die Kategorie des Konfigurationsfehlers der aktuellen Ausnahme ist "ConfigurationFailure Configuration action failed for feature SQL_Engine_Core_Inst during timing ConfigNonRC and scenario ConfigNonRC". System.Collections.Generic.KeyNotFoundException: Der angegebene Schlüssel war nicht im Wörterbuch vorhanden. at System.ThrowHelper.ThrowKeyNotFoundException() at System.Collections.Generic.Dictionary 2.get_Item(TKey key) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject pubConfig) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.Install(ConfigActionTiming timing, Dictionary 2 actionData, PublicConfigurationBase spcb) at Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary 2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary 2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream) The following is an exception stack listing the exceptions in outermost to innermost order Inner exceptions are being indented Exception type: System.Collections.Generic.KeyNotFoundException Message: The given key was not present in the dictionary. HResult : 0x80131577 Data: SQL. Setup.FailureCategory = ConfigurationFailure WatsonConfigActionData = INSTALL@CONFIGNONRC @SQL_ENGINE_CORE_INST WatsonExceptionFeatureIdsActionData = System.String[] Stack: at System.ThrowHelper.ThrowKeyNotFoundException() at System.Collections.Generic.Dictionary 2.get_Item(TKey key) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject pubConfig) at Microsoft.SqlServer.Configuration.ClusterConfiguration.FailoverClusterNamePrivateConfigObject.Install(ConfigActionTiming timing, Dictionary 2 actionData, PublicConfigurationBase spcb) at Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary 2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary 2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) at Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream)

Ursache

Ein neuer Switch, ManagementPointNetworkType, der von PowerShell-Cmdlets für Failovercluster aufgerufen werden kann, wird in Windows Server 2019 eingeführt. Sie können die folgenden Optionen für den neuen Switch verwenden.

Parameter "Switch" Nutzung
Singleton Verwendet die herkömmliche Methode von DHCP oder statischer IP-Adresse.
Verteilt Verwenden Sie einen verteilten Netzwerknamen mithilfe von Knoten-IP-Adressen.
Automatisch Ermittelt mithilfe der Erkennung die entsprechende Einstellung. Wenn SQL Server in Azure ausgeführt wird, verwendet distributed . Wenn SQL Server lokal ausgeführt wird, wird Singleton (Standardeinstellung) verwendet.

Wenn Sie den Windows-Cluster mithilfe des Windows-Cluster-Manager-Tools erstellen, legt das Tool den Parameter "Switch" auf "Automatic" fest. Da Sie an einem virtuellen Azure-Computer arbeiten, verwendet der Switch stattdessen einen verteilten Netzwerknamen.

Sie können dies überprüfen, indem Sie den folgenden PowerShell-Befehl ausführen:

C:\windows\system32> Get-clusterresource

Die ausgabe, die von diesem Befehl zurückgegeben wird, sieht in etwa wie folgt aus:

Name                 State          OwnerGroup                ResourceType
Cloud Witness                       Online Cluster Group      Cloud Witness
Cluster Name                        Online Cluster Group      Distributed Network Name
Cluster Pool 1                      Online 45d8f3c2-e8df-4a01-87b8-f3c383801f3f
                                                              Storage Pool
Cluster Virtual Disk
   (ClusterPerformanceHistory)      Online Cluster Group      Physical Disk
Health                              Online Cluster Group      Health Service
SDDC Management                     Online Cluster Group      SDDC Management
Storage QoS Resource                Online Cluster Group      Storage QoS Policy Manager

Die CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject pubConfig) Funktion überprüft den Ressourcennamen, dessen Typ "NetworkName" ist. Dadurch wird überprüft, ob der von Ihnen eingegebene Virtuelle Servername bereits vorhanden ist.

Die Installation der SQL Server FCI auf einem Windows-Cluster, der nur einen verteilten Netzwerknamen hat, wird jedoch nicht unterstützt. Die im Abschnitt "Symptome" erwähnte Fehlermeldung weist darauf hin, dass in Windows Server 2019 keine Ressource mit dem Typ "NetworkName" verfügbar ist.

Lösung

Um dieses Problem zu beheben, können Sie den aktuellen Cluster löschen und dann mithilfe eines PowerShell-Befehls, der den folgenden Parameter hat, erneut erstellen:

managementpointnetworktype singleton