Error (la clave dada no estaba presente en el diccionario) y SQL Server instalación de FCI en una máquina virtual de Azure en Server 2019
Este artículo le ayuda a resolver el problema que se produce al intentar instalar una instancia clúster de conmutación por error (FCI) de Microsoft SQL Server en Windows Server 2019 en una máquina virtual (VM) de Microsoft Azure.
Se aplica a: SQL Server vm : Windows, Windows Server 2019
Número KB original: 4525647
Síntomas
Cuando intenta instalar una instancia agrupada en clústeres de conmutación por error (FCI) de Microsoft SQL Server en Windows Server 2019 en una máquina virtual (VM) de Microsoft Azure, se produce un error en la instalación y recibe el siguiente mensaje de error:
La clave dada no estaba presente en el diccionario.
En esta situación, puede ver la siguiente información adicional en el Details.txt de registro de la carpeta SQL Server instalación:
Datos de acción: 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. La clave dada no estaba presente en el diccionario. La categoría de error de configuración de la excepción actual es ConfigurationFailure Configuration action failed for feature SQL_Engine_Core_Inst during timing ConfigNonRC and scenario ConfigNonRC. System.Collections.Generic.KeyNotFoundException: la clave especificada no estaba presente en el diccionario. en System.ThrowHelper.ThrowKeyNotFoundException() en 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) en Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario scenario, Tiempo ConfigActionTiming, acción ConfigBaseAction, Dictionary2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary
2 actionData, PublicConfigurationBase spcbCurrent) en Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) en Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream) La siguiente es una pila de excepciones que enumera las excepciones en orden más externo a más interno Las excepciones internas se están sangríando Tipo de excepción: System.Collections.Generic.KeyNotFoundException Message: The given key was not present in the dictionary. HResult : 0x80131577 datos: SQL. Setup.FailureCategory = ConfigurationFailure WatsonConfigActionData = INSTALL@CONFIGNONRC @SQL_ENGINE_CORE_INST WatsonExceptionFeatureIdsActionData = System.String[] Stack: en System.ThrowHelper.ThrowKeyNotFoundException() en System.Collections.Generic.Dictionary2.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, Spcb de PublicConfigurationBase) en Microsoft.SqlServer.Configuration.SqlConfigBase.PrivateConfigurationBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary2 actionData, PublicConfigurationBase spcbCurrent) at Microsoft.SqlServer.Configuration.SqlConfigBase.SqlFeatureConfigBase.Execute(ConfigActionScenario scenario, ConfigActionTiming timing, ConfigBaseAction action, Dictionary
2 actionData, PublicConfigurationBase spcbCurrent) en Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.ExecuteAction(String actionId) en Microsoft.SqlServer.Configuration.SqlConfigBase.SlpConfigAction.Execute(String actionId, TextWriter errorStream)
Causa
En Windows Server 2019 se introduce un nuevo modificador, ManagementPointNetworkType, al que pueden llamar los cmdlets de PowerShell para FailoverClusters. Puede usar las siguientes opciones para el nuevo modificador.
Parámetro Switch | Uso |
---|---|
Singleton | Usa el método tradicional de DHCP o dirección IP estática. |
Distribuido | Use un nombre de red distribuida mediante direcciones IP de nodo. |
Automática | Usa la detección para determinar la configuración adecuada. Si SQL Server se está ejecutando en Azure, usa Distributed. Si SQL Server se ejecuta localmente, usa Singleton (configuración predeterminada). |
Si crea el clúster de Windows mediante la herramienta Administrador de clústeres de Windows, la herramienta establece el parámetro de modificador en Automático. Dado que está trabajando en una máquina virtual de Azure, el conmutador usa un nombre de red distribuida en su lugar.
Para comprobarlo, ejecute el siguiente comando de PowerShell:
C:\windows\system32> Get-clusterresource
El resultado que devuelve este comando es similar al siguiente:
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
La CreateFailoverClusterNameResource(FailoverClusterNamePublicConfigObject pubConfig)
función comprueba el nombre del recurso cuyo tipo esNetworkName. Esto es para comprobar que el nombre del servidor virtual que escribió ya existe.
Sin embargo, no se admite SQL Server fci en un clúster de Windows que solo tenga un nombre de red distribuida. El mensaje de error que se menciona en la sección Síntomas indica que no hay ningún recurso disponible en Windows Server 2019 cuyo tipo seaNetworkName.
Solución
Para solucionar este problema, puede eliminar el clúster actual y, a continuación, crearlo de nuevo con un comando de PowerShell que tenga el siguiente parámetro:
managementpointnetworktype singleton